Operations クラス
名前空間
使用方法
Metadata.Operations クラスを使用して、メタデータ操作を実行します。Apex におけるメタデータ操作の使用事例と制限についての詳細は、「メタデータ」を参照してく���さい。
例: メタデータの取得
次の例では、登録者組織から「MyTestCustomMDType」カスタムメタデータレコードを取得してカスタム項目を調べます。
1public class ReadMetadata {
2 public void retrieveMetadata () {
3 // List fullnames of components we want to retrieve
4 List<String> componentNameList =
5new List<String>{'ISVNamespace__TestCustomMDType.MyTestCustomMDType'};
6
7 // Retrieve components that are records of custom metadata types
8 // based on name
9 List<Metadata.Metadata> components = Metadata.Operations.retrieve(
10Metadata.MetadataType.CustomMetadata, componentNameList);
11 Metadata.CustomMetadata customMetadataRecord = (Metadata.CustomMetadata) components.get(0);
12
13 // Check fields of retrieved component
14 List<Metadata.CustomMetadataValue> values = customMetadataRecord.values;
15 for (integer i = 0; i < values.size(); i++) {
16 if (values.get(i).field == 'testField__c' &&
17 values.get(i).value == 'desired value') {
18 // ...process accordingly...
19 }
20 }
21 }
22}例: メタデータのリリース
次の例では、Apex のメタデータ API を使用して、MetadataRecordName カスタムメタデータレコードの customField カスタム項目値を更新し、その変更内容を登録者組織にリリースします。リリースは非同期のため、Metadata.DeployCallback インターフェースを実装するコールバッククラスを指定する必要があります。これは、その後、キュー内のリリースが完了したときに使用されます。
1public class CreateMetadata{
2 public void updateAndDeployMetadata() {
3 // Setup custom metadata to be created in the subscriber org.
4 Metadata.CustomMetadata customMetadata = new Metadata.CustomMetadata();
5 customMetadata.fullName = 'ISVNamespace__MetadataTypeName.MetadataRecordName';
6
7 Metadata.CustomMetadataValue customField = new Metadata.CustomMetadataValue();
8 customField.field = 'customField__c';
9 customField.value = 'New value';
10
11 customMetadata.values.add(customField);
12
13 Metadata.DeployContainer mdContainer = new Metadata.DeployContainer();
14 mdContainer.addMetadata(customMetadata);
15
16 // Setup deploy callback, MyDeployCallback implements
17 // the Metadata.DeployCallback interface (code for
18 // this class not shown in this example)
19 MyDeployCallback callback = new MyDeployCallback();
20
21 // Enqueue custom metadata deployment
22 Id jobId = Metadata.Operations.enqueueDeployment(mdContainer, callback);
23 }
24}例: 2 つのメタデータレコードの同期作成
メタデータレコードとそれを参照する別のメタデータレコードを同じトランザクションで作成します。親レコードが名前空間を使用してインストールされている場合、API 参照名に recordNs__ というプレフィックスを付けます。
1public class CreateMetadata {
2
3 public Id doCreate(
4 String parentRecDevName,
5 String parentRecLabel,
6 String childRecDevName,
7 String childRecLabel) {
8
9 Metadata.DeployContainer mdContainer = new Metadata.DeployContainer();
10
11 Metadata.CustomMetadata parentRecord = new Metadata.CustomMetadata();
12 parentRecord.fullName = 'ParentType.' + parentRecDevName;
13 parentRecord.label = parentRecLabel;
14 mdContainer.addMetadata(parentRecord);
15
16 Metadata.CustomMetadata childRecord = new Metadata.CustomMetadata();
17 childRecord.fullName = 'ChildType.' + childRecDevName;
18 childRecord.label = childRecLabel;
19 Metadata.CustomMetadataValue relValue = new Metadata.CustomMetadataValue();
20 relValue.field = 'Parent__c';
21 relValue.value = parentRecDevName;
22 childRecord.values.add(relValue);
23 mdContainer.addMetadata(childRecord);
24
25 Id jobId = Metadata.Operations.enqueueDeployment(mdContainer, null);
26 return jobId;
27 }
28
29}Operations のメソッド
Operations のメソッドは次のとおりです。
enqueueDeployment(container, callback)
署名
public static Id enqueueDeployment(Metadata.DeployContainer container, Metadata.DeployCallback callback)
パラメータ
- container
- 型: Metadata.DeployContainer
- リリースする一連のメタデータコンポーネントを含むコンテナ。
- callback
- 型: Metadata.DeployCallback
- Metadata.DeployCallback インターフェースを実装するクラス。リリース結果に関する情報を返すために Salesforce が使用します。
retrieve(type, fullNames)
署名
public static List<Metadata.Metadata> retrieve(Metadata.MetadataType type, List<String> fullNames)
パラメータ
- type
- 型: Metadata.MetadataType
- メタデータコンポーネントのデータ型。
- fullNames
- 型: List<String>
- 取得するコンポーネント名のリスト。コンポーネント名の形式についての詳細は、「Metadata.fullName()」を参照してください。