upsertMetadata()
構文
1UpsertResult[] = metadataConnection.upsertMetadata(Metadata[] metadata);使用方法
upsertMetadata() コールは、メタデータを拡張するすべてのコンポーネントの作成または更新に使用します。同一コール内のすべてのコンポーネントは、同じ種類である必要があります。詳細は、「Metadata コンポーネントおよびメタデータ型」を参照してください。
指定されたコンポーネントがすでに組織に存在する場合、upsertMetadata() コールはこれらのコンポーネントを更新します。存在しない場合、upsertMetadata() はこれらのコンポーネントを作成します。コンポーネントは fullname 項目によって照合されます。このコールは同期して実行されます。つまり、コールは、操作が完了した後にのみ戻ります。
API バージョン 34.0 以降、このコールで AllOrNoneHeader ヘッダーがサポートされます。デフォルトでは、AllOrNoneHeader が API バージョン 34.0 以降で使用されていない場合、このコールでエラーのない一部のレコードを保存できます (AllOrNoneHeader=false に相当)。API バージョン 33.0 以前の場合、デフォルトでは、コール内のどのレコードにもエラーがない場合にのみ、すべてのレコードが保存されます (AllOrNoneHeader=true に相当)。
バージョン
API バージョン 31.0 以降で利用できます。
権限
クライアントアプリケーションは、「すべてのデータの編集」権限でログインしている必要があります。
必須項目
コンポーネント内のすべての必須項目に値を指定する必要があります。
有効な項目値
整数項目については整数 (英字は不可)、項目のデータ型に対して有効な値を入力する必要があります。クライアントアプリケーションでは、プログラム言語および開発ツールで指定されているデータ形式ルールに従ってください。(開発ツールは、SOAP メッセージのデータ型の適切な対応付けを処理します)。
文字列値
String 項目に値を保存する場合、API は先頭および末尾の空白文字を削除します。たとえば、label 項目の値に "MyObject " と入力されると、その値はデータベースに "MyObject" として保存されます。
メタデータコンポーネント更新/挿入の基本手順
- 作成または更新するコンポーネントに対応するメタデータオブジェクトの配列を作成します。すべてのコンポーネントは同じ種類である必要があります。
-
upsertMetadata() を呼び出し、前のステップで作成したメタデータコンポーネントの配列を渡します。
upsertMetadata() コールは、UpsertResult オブジェクトの配列を返します。更新/挿入した各コンポーネントに対して UpsertResult が返されます。その中には、更新/挿入操作に関する情報 (操作が成功したかどうか、更新/挿入されたコンポーネントの名前、コンポーネントが作成されたかどうかを示すフラグ、操作が成功しなかった場合に返されるエラー) が含まれます。
サンプルコード —Java
1public void upsertMetadataSample() {
2 try {
3 // Create custom object to upsert
4 CustomObject co = new CustomObject();
5 String name = "MyCustomObject";
6 co.setFullName(name + "__c");
7 co.setDeploymentStatus(DeploymentStatus.Deployed);
8 co.setDescription("Upserted by the Metadata API");
9 co.setEnableActivities(true);
10 co.setLabel(name + " Object");
11 co.setPluralLabel(co.getLabel() + "s");
12 co.setSharingModel(SharingModel.ReadWrite);
13
14 CustomField nf = new CustomField();
15 nf.setType(FieldType.Text);
16 nf.setLabel("CustomField1");
17 co.setNameField(nf);
18
19 // Upsert the custom object
20 UpsertResult[] results = metadataConnection
21 .upsertMetadata(new Metadata[] { co });
22
23 for (UpsertResult r : results) {
24 if (r.isSuccess()) {
25 System.out.println("Success!");
26 if (r.isCreated()) {
27 System.out.println("Created component: "
28 + r.getFullName());
29 } else {
30 System.out.println("Updated component: "
31 + r.getFullName());
32 }
33 } else {
34 System.out
35 .println("Errors were encountered while upserting "
36 + r.getFullName());
37 for (Error e : r.getErrors()) {
38 System.out.println("Error message: " + e.getMessage());
39 System.out.println("Status code: " + e.getStatusCode());
40 }
41 }
42 }
43 } catch (ConnectionException ce) {
44 ce.printStackTrace();
45 }
46}引数
| 名前 | 型 | 説明 |
|---|---|---|
| metadata | Metadata[] | 作成または更新する 1 つ以上のメタデータコンポーネントの配列。 上限: 10。 1 つの種類のコンポーネントの配列を送信する必要があります。たとえば、10 個のカスタムオブジェクトの配列または 10 個のプロファイルの配列を送信できますが、両方の種類を混ぜて送信することはできません。 |