Box Developerドキュメント

メタデータテンプレートを作成

post
https://api.box.com/2.0
/metadata_templates/schema

ファイルやフォルダに適用可能な新しいメタデータテンプレートを作成します。

リクエスト

bearer [ACCESS_TOKEN]
application/json

リクエスト本文

boolean本文内省略可能
true
false

ファイルまたはフォルダをコピーするときに、追加されているメタデータをコピーするかどうか。デフォルトでは、ファイルまたはフォルダのコピー時に、メタデータは一緒にコピーされません。

string本文内必須
"Product Info"
4096

テンプレートの表示名。

object array本文内省略可能

テンプレートに含まれるテンプレートフィールドの並べ替えられたリスト。各フィールドは、通常のテキストフィールド、日付フィールド、数値フィールド、単一または複数選択リストのいずれかになります。

string本文内条件付きで必須
"string"

フィールドのタイプ。基本のフィールドは、テキストを表すstringフィールド、数値を表すfloatフィールド、およびユーザーに日時選択機能を表示するためのdateフィールドです。

さらに、メタデータテンプレートは、基本の項目リストを表すenumフィールドのほか、ユーザーが複数の値を選択できる同様の項目リストを表す multiSelectフィールドをサポートしています。

次の値のいずれか1つ: string,float,date,enum,multiSelect

string本文内省略可能
"The category"
4096

フィールドの説明。ユーザーには表示されません。

string本文内条件付きで必須
"Category"
4096

ウェブアプリおよびモバイルアプリでユーザーに表示されるフィールドの表示名。

boolean本文内省略可能
true

このフィールドをUI上でユーザーに対して非表示にし、代わりにAPIを介してのみ設定できるようにするかどうか。

string本文内条件付きで必須
"category"
256

フィールドの一意の識別子。この識別子は、そのフィールドが属するテンプレート内で一意である必要があります。

object array本文内省略可能

このフィールドのオプションのリスト。enumおよびmultiSelectフィールドタイプと組み合わせて使用します。

string本文内条件付きで必須
"Category 1"

オプションのテキスト値。オプションの表示名と、テンプレートの更新時に使用される内部キーの両方を表します。

boolean本文内省略可能
true
false

このテンプレートをBoxウェブアプリのUIに表示するか、APIを介した使用のみを目的とするかを定義します。

string本文内必須
"enterprise"

作成するメタデータテンプレートのスコープ。アプリケーションで作成できるのは、認証済みユーザーの会社内で使用するテンプレートのみです。

この値はenterpriseに設定する必要があります。globalスコープはアプリケーションで作成できないからです。

string本文内省略可能
^[a-zA-Z_][-a-zA-Z0-9_]*$
"productInfo"
64

テンプレートの一意の識別子。この識別子は、メタデータテンプレート作成の対象となる会社全体で一意である必要があります。

指定しなかった場合、APIによりdisplayNameの値に基づいて一意のtemplateKeyが作成されます。

レスポンス

作成されたメタデータテンプレートを表すスキーマ。

リクエストのパラメータまたは本文が無効な場合に返されます。

  • bad_request - 本文に有効なリクエストが含まれていない場合に返されます。多くの場合、このレスポンスには、不足しているフィールドに関する追加の詳細が含まれます。

ユーザーにメタデータテンプレートを作成する権限がない場合に返されます。その理由はいくつかありますが、最も一般的なのは、ユーザーが (共同) 管理者権限を持っていないこと、またはアプリケーションがglobalスコープのテンプレートを作成しようとしていることです。

予期しないクライアントエラー。

post
メタデータテンプレートを作成
このドキュメント内で一部のAPIを試せるようになりました。
ログイン

リクエストの例

cURL
curl -i -X POST "https://api.box.com/2.0/metadata_templates/schema" \
     -H "authorization: Bearer <ACCESS_TOKEN>" \
     -H "content-type: application/json" \
     -d '{
      "scope": "enterprise",
      "displayName": "Customer",
      "fields": [
        {
          "type": "string",
          "key": "name",
          "displayName": "Name",
          "description": "The customer name",
          "hidden": false
        },
        {
          "type": "date",
          "key": "last_contacted_at",
          "displayName": "Last Contacted At",
          "description": "When this customer was last contacted at",
          "hidden": false
        },
        {
          "type": "enum",
          "key": "industry",
          "displayName": "Industry",
          "options": [
            {"key": "Technology"},
            {"key": "Healthcare"},
            {"key": "Legal"}
          ]
        },
        {
          "type": "multiSelect",
          "key": "role",
          "displayName": "Contact Role",
          "options": [
            {"key": "Developer"},
            {"key": "Business Owner"},
            {"key": "Marketing"},
            {"key": "Legal"},
            {"key": "Sales"}
          ]
        }
      ]
    }'
TypeScript Gen
await client.metadataTemplates.createMetadataTemplate({
  scope: 'enterprise',
  displayName: templateKey,
  templateKey: templateKey,
  fields: [
    {
      key: 'firstName',
      displayName: 'First name',
      description: 'Person first name',
      type: 'string' as CreateMetadataTemplateRequestBodyFieldsTypeField,
    } satisfies CreateMetadataTemplateRequestBodyFieldsField,
    {
      key: 'lastName',
      displayName: 'Last name',
      description: 'Person last name',
      type: 'string' as CreateMetadataTemplateRequestBodyFieldsTypeField,
    } satisfies CreateMetadataTemplateRequestBodyFieldsField,
    {
      key: 'dateOfBirth',
      displayName: 'Birth date',
      description: 'Person date of birth',
      type: 'date' as CreateMetadataTemplateRequestBodyFieldsTypeField,
    } satisfies CreateMetadataTemplateRequestBodyFieldsField,
    {
      key: 'age',
      displayName: 'Age',
      description: 'Person age',
      type: 'float' as CreateMetadataTemplateRequestBodyFieldsTypeField,
    } satisfies CreateMetadataTemplateRequestBodyFieldsField,
    {
      key: 'hobby',
      displayName: 'Hobby',
      description: 'Person hobby',
      type: 'multiSelect' as CreateMetadataTemplateRequestBodyFieldsTypeField,
    } satisfies CreateMetadataTemplateRequestBodyFieldsField,
  ],
} satisfies CreateMetadataTemplateRequestBody);
Python Gen
client.metadata_templates.create_metadata_template(
    "enterprise",
    template_key,
    template_key=template_key,
    fields=[
        CreateMetadataTemplateFields(
            key="firstName",
            display_name="First name",
            description="Person first name",
            type=CreateMetadataTemplateFieldsTypeField.STRING.value,
        ),
        CreateMetadataTemplateFields(
            key="lastName",
            display_name="Last name",
            description="Person last name",
            type=CreateMetadataTemplateFieldsTypeField.STRING.value,
        ),
        CreateMetadataTemplateFields(
            key="dateOfBirth",
            display_name="Birth date",
            description="Person date of birth",
            type=CreateMetadataTemplateFieldsTypeField.DATE.value,
        ),
        CreateMetadataTemplateFields(
            key="age",
            display_name="Age",
            description="Person age",
            type=CreateMetadataTemplateFieldsTypeField.FLOAT.value,
        ),
        CreateMetadataTemplateFields(
            key="hobby",
            display_name="Hobby",
            description="Person hobby",
            type=CreateMetadataTemplateFieldsTypeField.MULTISELECT.value,
        ),
    ],
)
.NET Gen
await client.MetadataTemplates.CreateMetadataTemplateAsync(requestBody: new CreateMetadataTemplateRequestBody(scope: "enterprise", displayName: templateKey) { TemplateKey = templateKey, Fields = Array.AsReadOnly(new [] {new CreateMetadataTemplateRequestBodyFieldsField(key: "firstName", displayName: "First name", type: CreateMetadataTemplateRequestBodyFieldsTypeField.String) { Description = "Person first name" },new CreateMetadataTemplateRequestBodyFieldsField(key: "lastName", displayName: "Last name", type: CreateMetadataTemplateRequestBodyFieldsTypeField.String) { Description = "Person last name" },new CreateMetadataTemplateRequestBodyFieldsField(key: "dateOfBirth", displayName: "Birth date", type: CreateMetadataTemplateRequestBodyFieldsTypeField.Date) { Description = "Person date of birth" },new CreateMetadataTemplateRequestBodyFieldsField(key: "age", displayName: "Age", type: CreateMetadataTemplateRequestBodyFieldsTypeField.Float) { Description = "Person age" },new CreateMetadataTemplateRequestBodyFieldsField(key: "hobby", displayName: "Hobby", type: CreateMetadataTemplateRequestBodyFieldsTypeField.MultiSelect) { Description = "Person hobby" }}) });
Java
MetadataTemplate.Field metadataField = new MetadataTemplate.Field();
metadataField.setType("string");
metadataField.setKey("text");
metadataField.setDisplayName("Text");

List<MetadataTemplate.Field> fields = new ArrayList<MetadataTemplate.Field>();
fields.add(metadataField);

MetadataTemplate template = MetadataTemplate.createMetadataTemplate(api, "enterprise", "CustomField", "Custom Field", false, fields);

final JsonObject jsonObject = new JsonObject();
jsonObject.add("text", "This is a test text");

Metadata metadata = new Metadata(jsonObject);
boxFile.createMetadata("CustomField", metadata);
Python
from boxsdk.object.metadata_template import MetadataField, MetadataFieldType

fields = [
    MetadataField(MetadataFieldType.STRING, 'Name'),
    MetadataField(MetadataFieldType.DATE, 'Birthday', 'bday'),
    MetadataField(MetadataFieldType.ENUM, 'State', options=['CA', 'TX', 'NY'])
]
template = client.create_metadata_template('Employee Record', fields, hidden=True)
print(f'Metadata template ID {template.scope}/{template.templateKey} created!')
.NET
var templateParams = new BoxMetadataTemplate()
{
    TemplateKey = "marketingCollateral",
    DisplayName = "Marketing Collateral",
    Scope = "enterprise",
    Fields = new List<BoxMetadataTemplateField>()
    {
        new BoxMetadataTemplateField()
        {
            Type = "enum",
            Key = "audience",
            DisplayName = "Audience",
            Options = new List<BoxMetadataTemplateFieldOption>()
            {
                new BoxMetadataTemplateFieldOption() { Key = "internal" },
                new BoxMetadataTemplateFieldOption() { Key = "external" }
            }
        },
        new BoxMetadataTemplateField()
        {
            Type = "string",
            Key = "author",
            DisplayName = "Author"
        }
    }
};
BoxMetadataTemplate template = await client.MetadataManager.CreateMetadataTemplate(templateParams);
Node
// Create a new template, but hide it for now until it's ready for use
client.metadata.createTemplate(
		'Vendor Contract',
		[
			{
				type: 'date',
				key: 'signed',
				displayName: 'Date Signed'
			},
			{
				type: 'string',
				key: 'vendor',
				displayName: 'Vendor'
			},
			{
				type: 'enum',
				key: 'fy',
				displayName: 'Fiscal Year',
				options: [
					{key: 'FY17'},
					{key: 'FY18'},
					{key: 'FY19'}
				]
			}
		],
		{
			hidden: true,
			templateKey: 'vcontract',
			copyInstanceOnItemCopy: false
		}
	)
	.then(template => {
		/* template -> {
			id: '17f2d715-6acb-45f2-b96a-28b15efc9faa',
			templateKey: 'vcontract',
			scope: 'enterprise_12345',
			displayName: 'Vendor Contract',
			hidden: true,
			copyInstanceOnItemCopy: 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' } ],
				hidden: false } ] }
		*/
	});
iOS
var templateFields: [MetadataField] = []
templateFields.append(MetadataField(
    type: "string",
    key: "name",
    displayName: "Full Name"
))
templateFields.append(MetadataField(
    type: "date",
    key: "birthday",
    displayName: "Birthday"
))
templateFields.append(MetadataField(
    type: "enum",
    key: "department",
    displayName: "Department",
    options: [
        ["key": "HR"],
        ["key": "Sales"],
        ["key": "Marketing"],
    ]
))
client.metadata.createTemplate(
    scope: "enterprise",
    templateKey: "personnelRecord",
    displayName: "Personnel Record",
    hidden: false,
    fields: templateFields
) { (result: Result<MetadataTemplate, BoxSDKError>) in
    guard case let .success(template) = result {
        print("Error creating metadata template")
        return
    }

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

レスポンスの例

{
  "id": "58063d82-4128-7b43-bba9-92f706befcdf",
  "type": "metadata_template",
  "copyInstanceOnItemCopy": true,
  "displayName": "Product Info",
  "fields": [
    {
      "type": "string",
      "key": "category",
      "displayName": "Category",
      "description": "The category",
      "hidden": true,
      "options": [
        {
          "key": "Category 1",
          "id": "45dc2849-a4a7-40a9-a751-4a699a589190"
        }
      ],
      "id": "822227e0-47a5-921b-88a8-494760b2e6d2"
    }
  ],
  "hidden": true,
  "scope": "enterprise_123456",
  "templateKey": "productInfo"
}