Box Developerドキュメント

メタデータテンプレートの更新

ガイド メタデータ メタデータテンプレート メタデータテンプレートの更新

メタデータテンプレートの更新

メタデータテンプレートを更新するには、操作の配列をPUT /metadata_templates/:scope/:templateKey/schema APIに渡します。

cURL
curl -i -X PUT "https://api.box.com/2.0/metadata_templates/enterprise/blueprintTemplate/schema" \
     -H "authorization: Bearer <ACCESS_TOKEN>" \
     -H "content-type: application/json-patch+json" \
     -d '[
       {
         "op": "editField",
         "fieldKey": "category",
         "data": {
           "displayName": "Customer Group"
         }
       }
     ]'
TypeScript Gen
await client.metadataTemplates.updateMetadataTemplate(
  'enterprise' as UpdateMetadataTemplateScope,
  templateKey,
  [
    {
      op: 'addField' as UpdateMetadataTemplateRequestBodyOpField,
      fieldKey: 'newfieldname',
      data: { ['type']: 'string', ['displayName']: 'newFieldName' },
    } satisfies UpdateMetadataTemplateRequestBody,
  ],
);
Python Gen
client.metadata_templates.update_metadata_template(
    UpdateMetadataTemplateScope.ENTERPRISE,
    template_key,
    [
        UpdateMetadataTemplateRequestBody(
            op=UpdateMetadataTemplateRequestBodyOpField.ADDFIELD,
            field_key="newfieldname",
            data={"type": "string", "displayName": "newFieldName"},
        )
    ],
)
.NET Gen
await client.MetadataTemplates.UpdateMetadataTemplateAsync(scope: UpdateMetadataTemplateScope.Enterprise, templateKey: templateKey, requestBody: Array.AsReadOnly(new [] {new UpdateMetadataTemplateRequestBody(op: UpdateMetadataTemplateRequestBodyOpField.AddField) { FieldKey = "newfieldname", Data = new Dictionary<string, object>() { { "type", "string" }, { "displayName", "newFieldName" } } }}));
Java
List<MetadataTemplate.FieldOperation> updates = new ArrayList<MetadataTemplate.FieldOperation>();

String addCategoryFieldJSON = "{\"op\":\"addField\","\"data\":{"
    + "\"displayName\":\"Category\",\"key\":\"category\",\"hidden\":false,\"type\":\"string\"}}";
updates.add(new MetadataTemplate.FieldOperation(addCategoryFieldJSON));

String changeTemplateNameJSON = "{\"op\":\"editTemplate\",\"data\":{"
    + "\"displayName\":\"My Metadata\"}}";
updates.add(new MetadataTemplate.FieldOperation(changeTemplateNameJSON));

MetadataTemplate.updateMetadataTemplate(api, "enterprise", "myData", updates);
Python
template = client.metadata_template('enterprise', 'employeeRecord')
updates = template.start_update()
updates.add_enum_option('state', 'WI')
updates.edit_template({'hidden': False})
updates.edit_template({'copyInstanceOnItemCopy': False})
updated_template = template.update_info(updates=updates)
.NET
var updates = new List<BoxMetadataTemplateUpdate>()
{
    new BoxMetadataTemplateUpdate()
    {
        Op = MetadataTemplateUpdateOp.addEnumOption,
        FieldKey = "fy",
        Data = new {
            key = "FY20"
        }
    },
    new BoxMetadataTemplateUpdate()
    {
        Op = MetadataTemplateUpdateOp.editTemplate,
        Data = new {
            hidden = false
        }
    }
};
BoxMetadataTemplate updatedTemplate = await client.MetadataManager
    .UpdateMetadataTemplate(updates, "enterprise", "marketingCollateral");
Node
// Add a new option to the Fiscal Year field, and un-hide the template
var operations = [
	{
		op: 'addEnumOption',
		fieldKey: 'fy',
		data: { key: 'FY20' }
	},
	{
		op: 'editTemplate',
		data: { hidden: false }
	}
];
client.metadata.updateTemplate('enterprise', 'vcontract', operations)
	.then(template => {
		/* template -> {
			templateKey: 'vcontract',
			scope: 'enterprise_12345',
			displayName: 'Vendor Contract',
			hidden: false,
			fields: 
			[ { type: 'date',
				key: 'signed',
				displayName: 'Date Signed',
				hidden: false },
				{ type: 'string',
				key: 'vendor',
				displayName: 'Vendor',
				hidden: false },
				{ type: 'enum',
				key: 'fy',
				displayName: 'Fiscal Year',
				options: 
					[ { key: 'FY17' },
					{ key: 'FY18' },
					{ key: 'FY19' },
					{ key: 'FY20' } ],
				hidden: false } ] }
		*/
	});
iOS
client.metadata.updateTemplate(
    scope: "enterprise",
    templateKey: "personnelRecord",
    operation: .reorderEnumOptions(fieldKey: "department", enumOptionKeys: ["Marketing", "Sales", "HR"])
) { (result: Result<MetadataTemplate, BoxSDKError>) in
    guard case let .success(template) = result {
        print("Error updating metadata template")
        return
    }

    print("Updated metadata template with ID \(template.id)")
}

管理者権限が必須

メタデータテンプレートの更新は、管理者権限を持つユーザーに制限されています。つまり、管理者、または管理者から会社のメタデータテンプレートを作成、編集する権限が付与されている共同管理者だけがウェブアプリまたはAPIを使用してテンプレートを管理できます。

操作

メタデータテンプレートの更新は、テンプレート自体を直接変更するのではなく、操作を利用して実行されます。この方法では、ファイルおよびフォルダにすでに適用されている既存のメタデータインスタンスを更新できます。

テンプレートの操作

テンプレートの操作により、テンプレートの詳細またはフィールドが更新されます。一般的に、これらの操作は、あまり影響なくテンプレートインスタンスに適用されるため安全です。

テンプレートの編集

editTemplate操作では、displayNamecopyInstanceOnItemCopyなど、テンプレートの基本プロパティを編集できます。

パラメータ
data変更するプロパティを表すオブジェクト
[
  {
    "op": "editTemplate",
    "data": {
      "displayName": "Client",
      "copyInstanceOnItemCopy": true
    }
  }
]

これにより、新しい表示名がClientになるようにテンプレートが更新されます。

これは、このテンプレートの既存のインスタンスに影響します。

テンプレートへのフィールドの追加

addField操作では、テンプレートにフィールドを追加します。

パラメータ
data追加するフィールドを表すオブジェクト
[
  {
    "op": "addField",
    "data": {
      "displayName": "Category",
      "key": "category",
      "hidden": false,
      "type": "string"
    }
  }
]

これにより、displayNameおよびkeycategoryに指定されている、非表示ではない新しい文字列フィールドが追加されます。

これは、このテンプレートの既存のインスタンスに影響します。

フィールドの並べ替え

reorderFields操作では、テンプレート内のフィールドのリストを、リクエストされたフィールドリストに合わせて並べ替えます。

パラメータ
fieldKeysリクエストされた順番になっているフィールドキーの新しいリスト
{
  "op": "reorderFields",
  "fieldKeys": ["field2", "field1", "field3"]
}

これにより、テンプレートのフィールドは、最初にfield2、その後field1field3が続くように並べ替えられます。

これは、このテンプレートの既存のインスタンスに影響します。フィールドは並べ替えられますが、フィールドの値はそのまま変わりません。

フィールドの操作

フィールドの操作により、テンプレートのスキーマが変換されます。以下に、このAPIで使用できる、以前に割り当てたテンプレートのデータを変更する可能性のある操作のリストを示します。

このような変更は、ファイルの変更ではなくテンプレートの変更としてログに記録されます。

フィールドの編集

editField操作では、displayNamedescriptionkeyhidden状態など、フィールドの基本プロパティをいくつでも編集できます。

パラメータ
dataフィールドに設定する新しいプロパティを表すオブジェクト
fieldKey編集するフィールドのキー
{
  "op": "editField",
  "fieldKey": "category",
  "data": {
    "displayName": "Customer Group"
  }
}

これにより、新しい表示名がCustomer Groupになるようにフィールドcategoryが更新されます。このキーが変更された場合、指定されたフィールドの既存の値は新しいキーに移行されます。検索インデックスは更新されますが、更新にかかる時間は、この変更の対象となるファイルの数によって異なります。

これは、このテンプレートの既存のインスタンスに影響する可能性があります。

フィールドの削除

removeField操作では、テンプレートからフィールドを削除します。

パラメータ
fieldKeyテンプレートから削除するフィールドのキー
{
  "op": "removeField",
  "fieldKey": "brand"
}

これにより、フィールドbrandは、テンプレートに加えて、テンプレートのすべてのインスタンスから削除されます。検索インデックスは更新されますが、更新にかかる時間は、この変更の対象となるファイルの数によって異なります。

これは、このテンプレートの既存のインスタンスに影響します。

フィールドオプションの操作

enumおよびmultiSelectメタデータフィールドタイプはどちらも、フィールドのオプションを変更するための追加操作をサポートしています。

操作
addEnumOptionenumフィールドにオプションを追加します
editEnumOptionenumフィールドのオプションを編集します
reorderEnumOptionsenumフィールドのオプションを並べ替えます
removeEnumOptionenumフィールドのオプションを削除します
addMultiSelectOptionmultiSelectフィールドにオプションを追加します
editMultiSelectOptionmultiSelectフィールドのオプションを編集します
reorderMultiSelectOptionsmultiSelectフィールドのオプションを並べ替えます
removeMultiSelectOptionmultiSelectフィールドのオプションを削除します