Setting content-type when using box-node-sdk
Hi, I am trying to set metadata to different folders using the box-node-sdk like so:
```
client.folders.setMetadata('1111', client.metadata.scopes.ENTERPRISE, 'afterMarketAndService')
-
That's odd — the SDK should be setting the header correctly for you. I just tested on my laptop, and unfortunately I'm not able to reproduce the issue you're seeing. Here's the code I used to test:
var metadata = {foo: 'bar'}; client.folders.setMetadata(FOLDER_ID, 'global', 'properties', metadata) .then(console.log);
In your code sample, I noticed that you're not passing anything to the method for metadata; did you forget to add that parameter?
-
Thanks, this works when trying to create a custom metadata however how would I go about adding a metadata to a folder from an existing template? Im trying to copy over a folder and then add a templated metadata to that folder.
await client.folders.copy(copyFolder, destinationFolderID) .then(folderCopy => { console.log('copied NA'); var meta = { foo: 'bar' }; client.folders.setMetadata(folderCopy.ID, 'enterprise', 'afterMarketAndService', meta) .then(console.log); });
The template is called afterMarketAndService. Not quite sure what I should have in my meta object, saw that was optional in the docs.
-
I'm not sure that I understand your use case — you just want to add the template to the folder, with no actual data? The metadata template itself does not contain any actual values; it's essentially a schema for the values you can add. Without providing any actual data, just adding the template doesn't generally accomplish much. Could you elaborate a bit more about what you're trying to do?
-
so basically I have a ton of different product folders that will all contain the same file structure with in them. Im trying to write a script to copy a templated version of that folder structure into any of the new product folders I create and include the metadata with it. We already have created multiple metadata templates and I want to use those existing ones. The issues is when I copy that folder structure into the new product folder the metadata does not come with is so Im trying to manually add all those metadata tags to it after it copies over. When I copy the code example you sent me it work but create a custom metadata tag with the attributes foo:bar, not sure how to do it using a existing template rather then a new custom metadata.
my code looks something like this
const copyFolderStucture = (destinationFolderID) => { const folderIDs = { NA: '7***phone number removed for privacy***', China: '7***phone number removed for privacy***', LA: '7***phone number removed for privacy***', EMEAR: '7***phone number removed for privacy***', AUS: '7***phone number removed for privacy***', APAC: '7***phone number removed for privacy***' } client.folders.copy(folderIDs.NA, destinationFolderID) .then(folderCopy => { console.log('copied NA'); client.folders.setMetadata(folderCopy.ID, 'enterprise', 'afterMarketAndService') .then(console.log); }); client.folders.copy(folderIDs.China, destinationFolderID) .then(folderCopy => { console.log('copied China'); var metadata = { foo: 'bar' }; client.folders.setMetadata(folderCopy.id, 'global', 'properties', metadata) .then(console.log); }); client.folders.copy(folderIDs.LA, destinationFolderID) .then(folderCopy => { console.log('copied Latin America'); var metadataValues = { audience: "internal", documentType: "Q1 plans", competitiveDocument: "no", status: "active", author: "Jones", currentState: "proposal" }; client.folders.addMetadata(folderCopy.id, client.metadata.scopes.ENTERPRISE, "marketingCollateral", metadataValues) .then(metadata => { console.log(metadata); }); }); client.folders.copy(folderIDs.EMEAR, destinationFolderID) .then(folderCopy => { console.log('copied EMEAR'); }); client.folders.copy(folderIDs.AUS, destinationFolderID) .then(folderCopy => { console.log('copied AUS'); }); client.folders.copy(folderIDs.APAC, destinationFolderID) .then(folderCopy => { console.log('copied APAC'); }); }
Im trying a couple different way of copy over the templated meta data on different folders but non are working. I'm not sure if this is the best approach to doing this, any advice you have will help. Thanks again.
-
Ah, I see — if you want to copy the metadata from one folder to another, it's not enough just to apply the same template to the destination folder; you need to actually move the values too. You'll need to get the metadata values from the first folder and then set them on the destination folder.
-
Yes, it does support Metadata Cascade Policies — here's the documentation for creating one: https://github.com/box/box-node-sdk/blob/master/docs/metadata.md#create-cascade-policy
-
Hey I'm having another issue getting the items back from inside a copied folder my code looks something like this
client.folders.copy('7***phone number removed for privacy***', destinationFolderID) .then(folderCopy => { client.folders.addMetadata(folderCopy.id, client.metadata.scopes.ENTERPRISE, 'finalMarketingCollateral', dataValuesEmear.EMEAR) client.metadata.createCascadePolicy('enterprise', 'finalMarketingCollateral', folderCopy.id) client.metadata.forceApplyCascadePolicy('78adb313-d9fc-4dfb-a1f4-cef5f9b2f37a', client.metadata.cascadeResolution.PRESERVE_EXISTING) client.folders.getItems(folderCopy.id) .then((items) => { console.log('items!!!', items, 'END'); console.log('ENTRIES', items.entries); }) }
When I look at my item entries log in shows the folder is empty even though it does have folders within it. If I set like a minute timeout then it works and gets the correct item entries however that solution feels a bit hacky and can be effected based on how good the wifi is when running this script. Any suggestions?
-
I am not able to login to my router !
Please sign in to leave a comment.
Comments
10 comments