ラベル

2022-11-17

Salesforce - オブジェクトの項目一覧取得


Salesforce 上の「標準オブジェクト」および「カスタムオブジェクト」の項目一覧を取得したい。
  • ファイル出力先は salseforce のファイル
  • .csv ファイル形式で出力する(タブ区切り / UTF-8)
  • オブジェクト単位にファイル出力する





String outputFileName = 'OBJECT_FILE_' + System.today();
String NEW_LINE = '\n';
String SEP = '\t';
List<ContentVersion> outputFileList = new List<ContentVersion>();

Map <String,Schema.SObjectType> gd = Schema.getGlobalDescribe();
for(String objName : gd.keySet()) {
  Schema.SObjectType sobjType = gd.get(objName);
  Schema.DescribeSObjectResult sobjResult = sobjType.getDescribe();
  Map<String, Schema.SObjectField> fields = sobjResult.fields.getMap();

  ContentVersion cv = new ContentVersion();
  cv.ContentLocation = 'S';
  cv.PathOnClient = outputFileName + '_' + sobjType + '.csv';
  cv.Title = outputFileName + '_' + sobjType;

  String line = 'オブジェクト名' + SEP + 'オブジェクトAPI参照名' + NEW_LINE;
  line += sobjResult.getLabel() + SEP + sobjType + NEW_LINE;

  line += '項目名' + SEP + 'API参照名' + SEP + 'データ型' + NEW_LINE;
  for(String fieldName : fields.keySet()) {
    Schema.SObjectField field = fields.get(fieldName);
    Schema.DescribeFieldResult fResult = field.getDescribe();

    // ※ //

    line += fResult.getLabel() + SEP + field + SEP +  fResult.getType() + NEW_LINE;
  }
  cv.VersionData = Blob.valueOf(line);
  outputFileList.add(cv);
}

insert outputFileList;
 ※ 出力値に改行等含まれる場合は別途処理が必要
 ex. 下記、数式の場合
String cf = fResult.getCalculatedFormula();
cf = (String.isBlank(cf) ? '' : cf.replaceAll('"', '""'));
line += … + SEP + '"' + cf + '"' … ;


ref:

Salesforce - 開発環境設定


過去記事(削除済み)の修正
VSCode で環境を整える

2023-06-14 追記
この記事は sf コマンド未対応となっております。
sfdx | Salesforce CLI Command Reference → sfdx コマンドは非推奨になったてよ
sf | Salesforce CLI Command Reference → 今後は sf コマンド使えってよ





環境
  • salesforce: Winter '23
  • SFDX: sfdx-cli 7.176.1





前提
  • %SalesforceCLI_HOME%\bin へのパスを環境変数に設定済み





■ ローカル環境にプロジェクトを作成し sandbox 組織からソースを取得する


1. Salesforce DX project を作成する(マニフェスト作成)

作業ディレクトリ: C\:workspace
sfdx force:project:create --projectname sandbox-project --manifest
※ ローカル環境のプロジェクト名は名は任意(「sandbox-project」)


2. 組織へのログインURL を sandbox 組織のものに変更

作業ファイル: C\:workspace\sandbox-project\sfdx-project.json
"sfdcLoginUrl": "https://login.salesforce.com",
        ↓
"sfdcLoginUrl": "https://test.salesforce.com",


3. sandbox 組織の認証を行う

作業ディレクトリ: C\:workspace\sandbox-project
sfdx force:auth:web:login -r https://test.salesforce.com -a sandbox-alias
※ 組織のエイリアス名は任意(「sandbox-alias」)
※ ブラウザで salesforce ログイン画面が表示されるので、ログインする


4. sandbox 組織からソースを取得する

■ クラス
sfdx force:source:retrieve -m ApexClass

■ トリガー
sfdx force:source:retrieve -m ApexTrigger

■ VFage
sfdx force:source:retrieve -m ApexPage

■ すべて
sfdx force:source:retrieve
※ 『sf retrieve metadata コマンドはリリースと同様ですが、逆の動作となります。初めて取得を実行するときは、すべてのものが取得されますが、次回取得を実行するときは、組織で変更されたものだけが取得されます。--source-dir、--metadata、または --manifest を指定しない場合は、force:source:pull と同様に組織のすべての変更が取得されます。』(sf のソース追跡について





ref: