> ## Documentation Index
> Fetch the complete documentation index at: https://developer.box.com/llms.txt
> Use this file to discover all available pages before exploring further.

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

export const Link = ({href, children, className, ...props}) => {
  const localizedHref = localizeLink(href);
  return <a href={localizedHref} className={className} {...props}>
      {children}
    </a>;
};

export const MultiRelatedLinks = ({sections = []}) => {
  if (!sections || sections.length === 0) {
    return null;
  }
  return <div className="space-y-8">
      {sections.map((section, index) => <RelatedLinks key={index} title={section.title} items={section.items} />)}
    </div>;
};

export const RelatedLinks = ({title, items = []}) => {
  const getBadgeClass = badge => {
    if (!badge) return "badge-default";
    const badgeType = badge.toLowerCase().replace(/\s+/g, "-");
    return `badge-${badge === "ガイド" ? "guide" : badgeType}`;
  };
  if (!items || items.length === 0) {
    return null;
  }
  return <div className="my-8">
      {}
      <h3 className="text-sm font-bold uppercase tracking-wider mb-4">{title}</h3>

      {}
      <div className="flex flex-col gap-3">
        {items.map((item, index) => <a key={index} href={item.href} className="py-2 px-3 rounded related_link hover:bg-[#f2f2f2] dark:hover:bg-[#111827] flex items-center gap-3 group no-underline hover:no-underline border-b-0">
            {}
            <span className={`px-2 py-1 rounded-full text-xs font-semibold uppercase tracking-wide flex-shrink-0 ${getBadgeClass(item.badge)}`}>
              {item.badge}
            </span>

            {}
            <span className="text-base">{item.label}</span>
          </a>)}
      </div>
    </div>;
};

<RelatedLinks
  title="必須のガイド"
  items={[
{ label: translate("Metadata template scopes"), href: "/guides/metadata/scopes", badge: "GUIDE" },
{ label: translate("Create a metadata template"), href: "/guides/metadata/templates/create", badge: "GUIDE" }
]}
/>

メタデータテンプレートを更新するには、操作の配列を<Link href="/reference/put-metadata-templates-id-id-schema">`PUT /metadata_templates/:scope/:templateKey/schema`</Link> APIに渡します。

<CodeGroup>
  ```sh cURL theme={null}
  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 Node/TypeScript v10 theme={null}
  await client.metadataTemplates.updateMetadataTemplate(
    'enterprise' as UpdateMetadataTemplateScope,
    templateKey,
    [
      {
        op: 'addField' as UpdateMetadataTemplateRequestBodyOpField,
        fieldKey: 'newfieldname',
        data: { ['type']: 'string', ['displayName']: 'newFieldName' },
      } satisfies UpdateMetadataTemplateRequestBody,
    ],
  );
  ```

  ```python Python v10 theme={null}
  client.metadata_templates.update_metadata_template(
      UpdateMetadataTemplateScope.ENTERPRISE,
      template_key,
      [
          UpdateMetadataTemplateRequestBody(
              op=UpdateMetadataTemplateRequestBodyOpField.ADDFIELD,
              field_key="newfieldname",
              data={"type": "string", "displayName": "newFieldName"},
          )
      ],
  )
  ```

  ```csharp .NET v10 theme={null}
  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" } } }}));
  ```

  ```swift Swift v10 theme={null}
  try await client.metadataTemplates.updateMetadataTemplate(scope: UpdateMetadataTemplateScope.enterprise, templateKey: templateKey, requestBody: [UpdateMetadataTemplateRequestBody(op: UpdateMetadataTemplateRequestBodyOpField.addField, fieldKey: "newfieldname", data: ["type": "string", "displayName": "newFieldName"])])
  ```

  ```java Java v10 theme={null}
  client.getMetadataTemplates().updateMetadataTemplate(UpdateMetadataTemplateScope.ENTERPRISE, templateKey, Arrays.asList(new UpdateMetadataTemplateRequestBody.Builder(UpdateMetadataTemplateRequestBodyOpField.ADDFIELD).data(mapOf(entryOf("type", "string"), entryOf("displayName", "newFieldName"))).fieldKey("newfieldname").build()))
  ```

  ```java Java v5 theme={null}
  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);
  ```

  ```py Python v4 theme={null}
  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)
  ```

  ```csharp .NET v6 theme={null}
  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");
  ```

  ```js Node v4 theme={null}
  // 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 } ] }
    */
   });
  ```
</CodeGroup>

<Warning>
  **管理者権限が必須**

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

## 操作

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

## テンプレートの操作

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

### テンプレートの編集

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

| パラメータ  |                    |
| ------ | ------------------ |
| `data` | 変更するプロパティを表すオブジェクト |

```json theme={null}
[
  {
    "op": "editTemplate",
    "data": {
      "displayName": "Client",
      "copyInstanceOnItemCopy": true
    }
  }
]
```

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

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

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

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

| パラメータ  |                    |
| ------ | ------------------ |
| `data` | 追加するフィールドを表すオブジェクト |

```json theme={null}
[
  {
    "op": "addField",
    "data": {
      "displayName": "Category",
      "key": "category",
      "hidden": false,
      "type": "string"
    }
  }
]
```

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

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

### フィールドの並べ替え

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

| パラメータ       |                                |
| ----------- | ------------------------------ |
| `fieldKeys` | リクエストされた順番になっているフィールドキーの新しいリスト |

```json theme={null}
{
  "op": "reorderFields",
  "fieldKeys": ["field2", "field1", "field3"]
}
```

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

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

## フィールドの操作

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

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

### フィールドの編集

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

| パラメータ      |                             |
| ---------- | --------------------------- |
| `data`     | フィールドに設定する新しいプロパティを表すオブジェクト |
| `fieldKey` | 編集するフィールドのキー                |

```json theme={null}
{
  "op": "editField",
  "fieldKey": "category",
  "data": {
    "displayName": "Customer Group"
  }
}
```

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

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

### フィールドの削除

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

| パラメータ      |                      |
| ---------- | -------------------- |
| `fieldKey` | テンプレートから削除するフィールドのキー |

```json theme={null}
{
  "op": "removeField",
  "fieldKey": "brand"
}
```

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

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

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

<Link href="/guides/metadata/fields/enum">`enum`</Link>および<Link href="/guides/metadata/fields/multi-select">`multiSelect`</Link>メタデータフィールドタイプはどちらも、フィールドのオプションを変更するための追加操作をサポートしています。

| 操作                                                                                                   |                                 |
| ---------------------------------------------------------------------------------------------------- | ------------------------------- |
| <Link href="/guides/metadata/fields/enum#add-an-option">`addEnumOption`</Link>                       | `enum`フィールドにオプションを追加します         |
| <Link href="/guides/metadata/fields/enum#edit-an-option">`editEnumOption`</Link>                     | `enum`フィールドのオプションを編集します         |
| <Link href="/guides/metadata/fields/enum#reorder-options">`reorderEnumOptions`</Link>                | `enum`フィールドのオプションを並べ替えます        |
| <Link href="/guides/metadata/fields/enum#remove-an-option">`removeEnumOption`</Link>                 | `enum`フィールドのオプションを削除します         |
| <Link href="/guides/metadata/fields/multi-select#add-an-option">`addMultiSelectOption`</Link>        | `multiSelect`フィールドにオプションを追加します  |
| <Link href="/guides/metadata/fields/multi-select#edit-an-option">`editMultiSelectOption`</Link>      | `multiSelect`フィールドのオプションを編集します  |
| <Link href="/guides/metadata/fields/multi-select#reorder-options">`reorderMultiSelectOptions`</Link> | `multiSelect`フィールドのオプションを並べ替えます |
| <Link href="/guides/metadata/fields/multi-select#remove-an-option">`removeMultiSelectOption`</Link>  | `multiSelect`フィールドのオプションを削除します  |

<RelatedLinks
  title="関連するAPI"
  items={[
{ label: translate("Update metadata template"), href: "/reference/put-metadata-templates-id-id-schema", badge: "PUT" }
]}
/>

<RelatedLinks
  title="関連するガイド"
  items={[
{ label: translate("Create a metadata template"), href: "/guides/metadata/templates/create", badge: "GUIDE" }
]}
/>
