【Salesforce】自動設定変更のためのシステム管理者ツールの作成

スポンサーリンク

スポンサーリンク

Trailhead

ハンズオン 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.

  • 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.
https://trailhead.salesforce.com/ja/content/learn/modules/apex_metadata_api/apex_metadata_api_tools

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 を使用します。

Translated with DeepL

なんかやたらエラー出まくって苦労したけど、なんとかうまくいったソースコードがこちら。

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ということで…

コメント

スポンサーリンク






スポンサーリンク





タイトルとURLをコピーしました