tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Salesforce CLI コマンドを試してみました - Part 3

Part 2 の続き。リファレンスサイトの「cmdt Commands」から続けます。

Salesforce Developers

cmdt Commands

カスタム メタデータ タイプとそのレコードを生成するコマンドです。

cmdtgenerate field

指定されたフィールド タイプに基づいてカスタム メタデータ タイプのフィールドを生成するとのことです。

// カスタム チェックボックス フィールドのメタデータ ファイルを生成し、そのファイルを MyCmdt__mdt/fields ディレクトリに追加します。
% sf cmdt generate field --name MyCheckboxField --type Checkbox --output-directory force-app/main/default/objects/MyCmdt__mdt

// カスタム選択リスト フィールドのメタデータ ファイルを生成し、いくつかの値を追加します。
% sf cmdt generate field --name MyPicklistField --type Picklist --picklist-values A --picklist-values B --picklist-values C --output-directory force-app/main/default/objects/MyCmdt__mdt

// カスタム数値フィールドのメタデータ ファイルを生成し、小数点以下 2 桁を指定します。
% sf cmdt generate field --name MyNumberField --type Number --decimal-places 2 --output-directory force-app/main/default/objects/MyCmdt__mdt


コマンドを実行するとカスタムフィールドを作成できるって感じだと思うのですが、とりあえず何も考えず動かしてみました。


ちゃんと動きました。存在しないカスタムオブジェクトでしたが、それっぽい定義ファイルが追加されました。この時点ではファイルが作られるだけで実際にSalesforce組織にカスタム項目が作られるわけではありません。組織へのデプロイはまた別で必要となります。


それから生成されたファイルに対してエラーメッセージは表示されているので手順としては不足していたと思います。本来は存在するオブジェクトを対象に項目追加する進め方をすべきだと思います。CustomFieldタグの一式を手入力していくのは大変ですがこのコマンドを使えば必要な宣言がまとめて行える感じだと思います。(項目作成は画面から行った方が間違いはなさそう。)

cmdt generate fromorg

Salesforce オブジェクトからカスタム メタデータ タイプとそのすべてのレコードを生成するコマンドです。

// デフォルト組織の MySourceObject__c というカスタム オブジェクトからカスタム メタデータ タイプを生成します。
% sf cmdt generate fromorg --dev-name MyCMDT --sobject MySourceObject__c

// エイリアス my-scratch-org を使用して、組織内のカスタム オブジェクトからカスタム メタデータ タイプを生成します。サポートされていないフィールド タイプをテキストに変換する代わりに無視します。
% sf cmdt generate fromorg --dev-name MyCMDT --sobject MySourceObject__c --ignore-unsupported --target-org my-scratch-org

// カスタム オブジェクトから保護されたカスタム メタデータ タイプを生成します。
% sf cmdt generate fromorg --dev-name MyCMDT --sobject MySourceObject__c --visibility Protected

// 特定の単数形および複数形のラベルを使用して、カスタム設定から保護されたカスタム メタデータ タイプを生成します。
% sf cmdt generate fromorg --dev-name MyCMDT --label "My CMDT" --plural-label "My CMDTs" --sobject MySourceSetting__c --visibility Protected

// カスタム メタデータ タイプを生成し、結果のメタデータ ファイルを指定されたディレクトリに置きます。
% sf cmdt generate fromorg --dev-name MyCMDT --sobject MySourceObject__c --type-output-directory path/to/my/cmdt/directory

// カスタム メタデータ タイプを生成し、結果のレコード メタデータ ファイルを指定されたディレクトリに置きます。
% sf cmdt generate fromorg --dev-name MyCMDT --sobject MySourceObject__c --records-output-dir path/to/my/cmdt/record/directory


これもとりあえずそのまま動かしてみたところ、存在しないオブジェクトということでエラーになりました。


カスタムメタデータ型オブジェクトを用意してみます。


とりあえずオブジェクトの枠部分を作成。


実行したところ組織に存在しないという感じのエラーになりました。


よくわかっていない状態でのお試し実行ではダメでした。普段のカスタマイズでは使わなそうな気はするので今回はここまでにします。

cmdt generate object

現在のプロジェクトで新しいカスタム メタデータ タイプを生成するコマンドです。

// 開発者名「MyCustomType」のカスタム メタデータ タイプを生成します。この名前はラベルとしても使用されます。
% sf cmdt generate object --type-name MyCustomType

// 特定のラベルを持つ保護されたカスタム メタデータ タイプを生成します。
% sf cmdt generate object --type-name MyCustomType --label "Custom Type" --plural-label "Custom Types" --visibility Protected


とりあえず実行してみたところ定義ファイルが生成されました。


サンプルコードは現在のディレクトリにファイル生成されるみたいです。みたところ、OUTPUT-DIRECTORYのパラメータはあったのでちゃんと指定した方が良さそうです。「cmdt generate field」を上で試しましたが、新規作成の場合はまず「generate object」で枠を作ったあとに「generate field」でフィールドを作成するという流れが良さそうです。

% sf cmdt generate object --type-name MyCustomType -d force-app/main/default/objects
% sf cmdt generate field --name MyCheckboxField --type Checkbox --output-directory force-app/main/default/objects/MyCustomType__mdt


動いたものの正しい構成で作成されているのかよく分からず..カスタムメタデータ自体あまり触らないのでそこから勉強しないとダメそう。

cmdt generate record

現在のプロジェクト内の特定のカスタム メタデータ タイプの新しいレコードを生成します。

// 2 つのカスタム フィールドに指定された値を使用して、カスタム メタデータ タイプ「MyCMT」のレコード メタデータ ファイルを作成します。
% sf cmdt generate record --type-name MyCMT__mdt --record-name MyRecord My_Custom_Field_1=Foo My_Custom_Field_2=Bar

// 2 つのカスタム フィールドに指定された特定のラベルと値を使用して、カスタム メタデータ タイプ「MyCMT」の保護されたレコード メタデータ ファイルを作成します。
% sf cmdt generate record --type-name MyCMT__mdt --record-name MyRecord --label "My Record" --protected true My_Custom_Field_1=Foo My_Custom_Field_2=Bar


実際のコマンド実行は省略。また今度にします。

cmdt generate records

CSV ファイルから新しいカスタム メタデータ タイプ レコードを生成します。

// カスタム メタデータ タイプ MyCmdt の CSV ファイル内の値からレコード メタデータ ファイルを生成します。レコード名を指定する列として「Name」を使用します。
% sf cmdt generate records --csv path/to/my.csv --type-name MyCmdt

// デフォルトとは異なるディレクトリにある CSV ファイルからレコード メタデータ ファイルを生成し、レコード名を指定する列として「PrimaryKey」を使用します。
% sf cmdt generate records --csv path/to/my.csv --type-name MyCmdt --input-directory path/to/my/cmdt/directory --name-column "PrimaryKey"

これも、こういうコマンドがあるということで今回はスキップ。

community Commands

Experience Cloudのサイトをコマンドから作成したりするコマンドです。

community create

Experience Cloudのサイトをコマンドから作成できます。

// テンプレート「Customer Service」と URL パスプレフィックス「customers」を使用して Experience Cloud サイトを作成します。
% sf community create --name 'My Customer Site' --template-name 'Customer Service' --url-path-prefix customers --description 'My customer site'

// 「パートナー セントラル」テンプレートを使用してサイトを作成します。
% sf community create --name partnercentral --template-name 'Partner Central' --url-path-prefix partners

// 認証タイプ UNAUTHENTICATED の「Build Your Own (LWR)」テンプレートを使用してサイトを作成します。
% sf community create --name lwrsite --template-name 'Build Your Own (LWR)' --url-path-prefix lwrsite templateParams.AuthenticationType=UNAUTHENTICATED


これも事前準備とかいろいろ必要そうでした。よくわからないのでスキップします。

community list template

組織で使用可能なテンプレートのリストを取得します。

% sf community list template --target-org my-scratch-org


シンプルに実行できました。エディションとかで使えるテンプレートを確認するためのものっぽいです。


community publish

Experience Builder サイトを公開して有効にするコマンド。画面からやったほうが間違いはなさそうです。

// Experience Builder サイトを「My Customer Site」という名前で公開します。
% sf community publish --name 'My Customer Site'

Part 3のまとめ

「cmdt Commands」と「community Commands」の2種類を試してみました。どちらもちゃんと理解して使い方慣れれば便利なのだと思いますが、とりあえずは他の手順で作業した方が間違いなさそうかなというイメージ。選択肢として方法が用意されているのでちゃんと使いこなせるように慣れれば良いなと思います。