ハンズオン Challengeの前に、ちゃんとカリキュラムの内容をやる良い子のみんな!
組織のデフォルト言語の設定は、ちゃんと「英語」にしておくんだぞ!
「日本語」にしてたせいで、カスタムメタデータの作成中のところで複数形のラベルが表示されない、って悩んでたのは私ですorz
ちなみに組織のデフォルト言語の変更は、設定>会社の設定>組織情報から。
Use Apex Metadata API to add a custom metadata type to an org.
Create an Apex class that creates a new custom metadata type record programmatically. Add the new record to a deployment container, and queue it for deployment.
https://trailhead.salesforce.com/ja/content/learn/modules/apex_metadata_api/apex_metadata_api_tools
- Create a public Apex class called MetadataExample.
- Create a public method called updateMetadata that takes no arguments and returns void.
- Create an object called customMetadata of type Metadata.CustomMetadata.
- Set the fullName of the customMetadata object to be: ‘MyNamespace__MyMetadataTypeName.MyMetadataRecordName’.
- Create an object called customField of the type Metadata.CustomMetadataValue.
- Set customField.field to ‘customField__c’. Set customField.value to ‘New value’.
- Add the customField object to the list of values in customMetadata.
- Create an object called deployContainer of type Metadata.DeployContainer.
- Add customMetadata to deployContainer.
- Use the Metadata.Operations.enqueueDeployment method to deploy the metadata. Assign the return value of the method to a variable called asyncResultId of type Id. Use null for the callback parameter.
DeepLで翻訳した日本語版はこちら。
Apex Metadata APIを使用して、カスタム・メタデータ・タイプを組織に追加します。
新しいカスタム・メタデータ・タイプのレコードをプログラムで作成するApexクラスを作成します。新しいレコードをディプロイメント コンテナに追加し、ディプロイメントのためにキューに入れます。
MetadataExampleというパブリックApexクラスを作成します。
引数を取らず、void を返す updateMetadata というパブリック メソッドを作成します。
Metadata.CustomMetadata型のcustomMetadataというオブジェクトを作成します。
customMetadataオブジェクトのfullNameを’MyNamespace__MyMetadataTypeName.MyMetadataRecordName’に設定します。
Metadata.CustomMetadataValue型のcustomFieldというオブジェクトを作成します。
customField.fieldを’customField__c’に設定する。customField.valueを’New value’に設定する。
customFieldオブジェクトをcustomMetadataの値のリストに追加します。
Metadata.DeployContainer型のdeployContainerというオブジェクトを作成する。
customMetadataをdeployContainerに追加する。
Metadata.Operations.enqueueDeploymentメソッドを使用して、メタデータをデプロイします。メソッドの戻り値を、Id 型の asyncResultId という変数に代入します。コールバック・パラメータには null を使用します。
なんかやたらエラー出まくって苦労したけど、なんとかうまくいったソースコードがこちら。
public class MetadataExample {
public void updateMetadata() {
// カスタムメタデータオブジェクトを作成
Metadata.CustomMetadata customMetadata = new Metadata.CustomMetadata();
customMetadata.fullName = 'MyNamespace__MyMetadataTypeName.MyMetadataRecordName';
// カスタムフィールドオブジェクトを作成
Metadata.CustomMetadataValue customField = new Metadata.CustomMetadataValue();
customField.field = 'customField__c';
customField.value = 'New value';
// カスタムフィールドをカスタムメタデータに追加
customMetadata.values.add(customField);
// デプロイメントコンテナを作成
Metadata.DeployContainer deployContainer = new Metadata.DeployContainer();
// カスタムメタデータをデプロイメントコンテナに追加
deployContainer.addMetadata(customMetadata);
// デプロイメントを実行
Id asyncResultId = Metadata.Operations.enqueueDeployment(deployContainer, null);
}
}
とりあえず動いたしOKということで…
コメント