Update a metadata template
Update a metadata template
Let's look at how we can update an existing metadata template.
Updates to metadata templates are performed through operations rather than directly changing the template itself. This method allows you to update any existing metadata instances that are already applied to files and folders.
Learn more about updating templates
In this case, let's assume that we realized that having a Name
field is a bit
ambiguous, and therefore, we want to change the Name
field of the customerInfo
template
to Company Name
instead. By using the editField
operation we can change the
displayName
and the key
of the field on the template and on every instance
of the template that might be applied to a file or folder.
curl -X PUT https://api.box.com/2.0/metadata_templates/enterprise/blueprintTemplate/schema \
-H "authorization: Bearer <ACCESS_TOKEN>" \
-H "content-type: application/json" \
-d '[
{
"op": "editField",
"fieldKey": "name",
"data": {
"key": "company_name",
"displayName": "Company Name"
}
}
]'
var updates = new List<BoxMetadataTemplateUpdate>()
{
new BoxMetadataTemplateUpdate()
{
Op = MetadataTemplateUpdateOp.editField,
FieldKey = "name",
Data = new {
key = "company_name",
displayName = "Company Name"
}
}
};
BoxMetadataTemplate updatedTemplate = await client.MetadataManager
.UpdateMetadataTemplate(updates, "enterprise", "customerData");
List<MetadataTemplate.FieldOperation> updates = new ArrayList<MetadataTemplate.FieldOperation>();
String editField = "{\"op\":\"editField\",\"fieldKey\":\"name\",\"data\":{\"key\":\"company_name\",\"displayName\":\"Company Name\"}}";
updates.add(new MetadataTemplate.FieldOperation(editField));
MetadataTemplate.updateMetadataTemplate(api, "enterprise", "customerData", updates);
template = client.metadata_template('enterprise', 'customerData')
updates = template.start_update()
updates.edit_field('name', key='company_name', display_name="Company Name")
template.update_info(updates)
var operations = [
{
op: 'editField',
fieldKey: 'name',
data: {
key: 'company_name',
displayName: "Company Name"
}
}
];
client.metadata.updateTemplate(
'enterprise',
'customerData',
operations
).then(template => {
//..
});
The API will return the updated metadata template.
{
"id": "100ac693-a468-4b37-9535-05984b804dc2",
"type": "metadata_template",
"templateKey": "customerInfo",
"scope": "enterprise_34567",
"displayName": "Customer Info",
"hidden": false,
"copyInstanceOnItemCopy": false,
"fields": [
{
"id": "5c6a5906-003b-4654-9deb-472583fc2930",
"type": "string",
"key": "company_name",
"displayName": "Company Name",
"hidden": false
},
{
"id": "cf3eb5b8-52ef-456c-b175-44354a27e289",
"type": "enum",
"key": "industry",
"displayName": "Industry",
"options": [
{"key": "Technology"},
{"key": "Healthcare"},
{"key": "Legal"}
],
"hidden": false
},
{
"id": "5c6a5906-4654-9deb-003b-472583fc2930",
"type": "float",
"key": "tav",
"displayName": "Total account value",
"hidden": false
}
]
}
Updating the template through operations has the benefit that any instance of the template is automatically updated as well. In this case, the instance we created in previous steps would now look something like this.
{
"company_name": "Box",
"industry": "Technology",
"tav": 1000000,
"$id": "01234500-12f1-1234-aa12-b1d234cb567e",
"$parent": "folder_12345,",
"$scope": "enterprise_34567",
"$template": "customerInfo",
"$type": "customerInfo-6bcba49f-ca6d-4d2a-a758-57fe6edf44d0",
"$typeVersion": 2,
"$version": 1,
"$canEdit": true
}