Boxのカスケードポリシーを使用したメタデータ管理の自動化

Yuko Taniguchi
Box Developer Japan Blog
15 min readMar 31, 2023

Box管理者 (または編集者権限を持つ任意のユーザー) は、メタデータカスケードポリシーを使用することで、フォルダレベルでメタデータを設定し、そのメタデータを自動的にコンテンツ全体に適用できます。

この記事で説明した方法に関心がある方は、以前の記事「Boxのメタデータ管理の入門ガイド」をご確認ください。

メタデータカスケードポリシー

メタデータカスケードポリシーを使用すると、フォルダレベルでメタデータを設定し、そのメタデータを自動的にコンテンツ全体に適用できます。

このポリシーは、特定のテンプレートをコンテンツに関連付けるだけでなく、その属性に対して適用されたフォルダと同じ値を設定することもできます。

このように、メタデータカスケードポリシーが適用されたフォルダにユーザーがコンテンツをアップロードまたは移動すると、メタデータが自動的に設定されます。

サンプルのユースケース

複数の部署から、Boxに保存されている請求書と契約書をすぐに探すように依頼されているとします。

多くの場合、請求書と契約書には暗号のような名前が設定されており、テキストによる通常の検索では関連のない項目が多く返されるため、ユーザーは、正しい項目を特定するのにかなりの手間がかかると不満の声があがります。

  • カスタマーサクセスは、顧客の名前で契約書や請求書を探せるようにしたいと考えています。
  • 会計担当者は、顧客に関係なくすべての請求書を探したいと考えています。
  • 法務担当者は、すべての契約書を探したいと考えています。
  • あなたは、元の名前を使用して、各ドキュメントのコピーを1部、1か所に保持したいと考えています。

「Customers」フォルダの中には「ACME Corp」フォルダと「Stark Industries」フォルダがあります。

そして、顧客ごとに「Contracts」フォルダと「Invoices」フォルダのセットがあります。

各ファイルに自動的に顧客名 (ACME、Starkなど) とドキュメントの種類 (InvoiceまたはContract) を付けるメタデータカスケードポリシーを作成する必要があります。

管理ツール

この記事の内容はすべてBoxアプリで実行できますが、常に規模について考慮が必要です。規模を拡大してこの処理を行う場合 (数百もの項目を考えてください)、Box管理者にとってBox CLIが最適なツールになります。

作業を開始するには、Box CLIのガイドをご確認ください

実装

まず、CLIを使用してメタデータテンプレートを作成しましょう。これは、使用するメタデータの構造を表します。

この例では、顧客名を持つテキストフィールドと、ドキュメントの種類 (「Contract」または「Invoice」) を持つ単一選択フィールドが必要です。

❯ box metadata-templates:create --display-name "Customer data" \
--string "Customer Name" \
--enum "Document Type" --option Contract --option Invoice

その結果、次の出力が返されます。

ID: 56ea51b8-ce40-4aed-852b-a176d076896c
Type: metadata_template
Template Key: customerData
Scope: enterprise_877840855
Display Name: Customer data
Hidden: false
Copy Instance On Item Copy: false
Fields:
-
ID: a98b2412-dcd9-46ad-bc1f-6da24877ec14
Type: string
Key: customerName
Display Name: Customer Name
Hidden: false
-
ID: b1eedd5e-bb95-4a6b-9032-e40cabc448d1
Type: enum
Key: documentType
Display Name: Document Type
Hidden: false
Options:
-
ID: 4e317f48-b3c2-4c1a-a3b6-67eb4026b18c
Key: Contract
-
ID: d2570209-f92c-465e-b1a1-9e04ccf2c9f9
Key: Invoice

ここで、「Customers」(195808887286) フォルダの下にあるフォルダを特定しましょう。--csv --fields type,id,nameフラグを使用すると、簡単に表示できます。

❯ box folders:items 195808887286 \
--as-user 18622116055 \
--csv --fields type,id,name
### output ###
type,id,name
folder,195812577701,Acme Corp
folder,195808702433,Stark Industries
❯ box folders:items 195812577701 \
--as-user 18622116055 \
--csv --fields type,id,name,parent
### output ###
type,id,name,...,parent.name
folder,195811920048,Contracts,...,Acme Corp
folder,195811116086,Invoices,...,Acme Corp
❯ box folders:items 195808702433 \
--as-user 18622116055 \
--csv --fields type,id,name,parent
### output ###
type,id,name,...,parent.name
folder,195809191381,Contracts,...,Stark Industries
folder,195813852815,Invoices,...,Stark Industries

次に、以下のコマンドを使用して、「Acme Corp/Contracts」(195811920048) フォルダにメタデータを適用します。

❯ box folders:metadata:add 195811920048 \
--template-key customerData \
--data "customerName=Acme Corp" \
--data documentType=Contract \
--as-user 18622116055 \
--csv
### output ###
customerName,documentType,$parent,...
Acme Corp,Contract,folder_195811920048,...

上記のコマンドでは、メタデータテンプレートをフォルダに関連付けただけでなく、メタデータ属性customerNamedocumentTypeに値も設定しました。

フォルダのメタデータを確認できます。

❯ box folders:metadata:get 195811920048 --template-key customerData \
--as-user 18622116055 --csv
### output ###
customerName,documentType,...
Acme Corp,Contract,...

最後に、メタデータカスケードポリシーを有効にします。

❯ box metadata-templates:cascade customerData --folder 195811920048 \
--as-user 18622116055 --csv
### output ###
id,,,,parent.type,parent.id,scope,
MTk1ODExOT...YTkyMDFkNw,,,,folder,195811920048,enterprise_877840855,

これで、Boxアプリでフォルダのメタデータがテンプレートに関連付けられ、属性が設定されて、カスケードポリシーが有効になります。

この例では、フォルダはただ作成されただけで空です。ただし、既存の項目にカスケードポリシーを強制的に適用することが必要な場合があります。

項目がすでにテンプレートに関連付けられていた場合、競合の解決方法をnoneまたはoverwriteのどちらかに決める必要があります。つまり、既存のテンプレートの属性値を維持するか、既存の値を新しい値で上書きするかを決定します。

❯ box metadata-cascade-policies:force-apply MTk1ODExOT...YTkyMDFkNw \
--conflict-resolution overwrite \
--as-user 18622116055 --csv
### output ###
Successfully applied policy MTk1ODExOT...YTkyMDFkNw

上の例を使用して、他のフォルダにメタデータカスケードポリシーを実装しましょう。この手順を自動化するシンプルなシェルスクリプトも作成できます。

フォルダ「Acme Corp/Invoices」の場合:

❯ box folders:metadata:add 195811116086 \
--template-key customerData \
--data "customerName=Acme Corp" \
--data documentType=Invoice \
--as-user 18622116055 --csv
### output ###
customerName,documentType,...
Acme Corp,Invoice,...

❯ box metadata-templates:cascade customerData --folder 195811116086 \
--as-user 18622116055 --csv
...,owner_enterprise.id,parent.type,parent.id,scope,templateKey
...,877840855,folder,195811116086,enterprise_877840855,customerData

フォルダ「Stark Industries/Contracts」の場合:

❯ box folders:metadata:add 195809191381 \
--template-key customerData \
--data "customerName=Stark Industries" \
--data documentType=Contract \
--as-user 18622116055 --csv
### output ###
customerName,documentType,...
Stark Industries,Contract,...

❯ box metadata-templates:cascade customerData --folder 195809191381 \
--as-user 18622116055 --csv
### output ###
...,owner_enterprise.id,parent.type,parent.id,scope,templateKey
...,877840855,folder,195809191381,enterprise_877840855,customerData

フォルダ「Stark Industries/Invoices」の場合:

❯ box folders:metadata:add 195813852815 \
--template-key customerData \
--data "customerName=Stark Industries" \
--data documentType=Invoice \
--as-user 18622116055 --csv
customerName,documentType,...
Stark Industries,Invoice,...

❯ box metadata-templates:cascade customerData --folder 195813852815 \
--as-user 18622116055 --csv
### output ###
...,owner_enterprise.id,parent.type,parent.id,scope,templateKey
...,877840855,folder,195813852815,enterprise_877840855,customerData

さらに、これらのフォルダにいくつかのファイルをアップロードします。

❯ box files:upload --parent-id 195811920048 \
./acme_contract.txt \
--as-user 18622116055 --csv
### output ###
type,id,name
file,1147571642464,acme_contract.txt

❯ box files:upload --parent-id 195811116086 \
./acme_invoice.txt \
--as-user 18622116055 --csv --fields type,id,name
### output ###
type,id,name
file,1147572999246,acme_invoice.txt

❯ box files:upload --parent-id 195809191381 \
./stark_contract.txt \
--as-user 18622116055 --csv --fields type,id,name
### output ###
type,id,name
file,1147578288128,stark_contract.txt

❯ box files:upload --parent-id 195813852815 \
./stark_invoice.txt
--as-user 18622116055 --csv --fields type,id,name
### output ###
type,id,name
file,1147575581165,stark_invoice.txt

ユーザーは、アップロードされたファイルにメタデータが自動的に適用されていることを確認できます。

メタデータが自動的にファイルに適用された状態

これで、すべてのユーザーは、探しているコンテンツを正確に見つけることができるようになります。

カスタマーサクセスは、「Acme Corp」と関連したすべての請求書と契約書を必要としています。

「Acme Corp」の契約書と請求書両方が表示される

会計担当者は、会社に関係なくすべての請求書を必要としています。

すべての請求書が表示される

法務担当者は、すべての契約書を必要としています。

すべての契約書が表示される

営業担当者もこの新しい機能を知り、これを使用して「Stark Industries」の契約書を探したいと考えました。

「Stark Industries」の契約書

このプロセスでは、ファイルの変更、コピー、移動、名前変更は行われていません。コンテンツの元の構造は維持したまま、ユーザーの効率を高めることができました。

参照資料

Boxのメタデータの詳細については、以下を参照してください。

このシリーズの以下の記事もご覧ください。

--

--