DropBox for Business Integration
JavaScript sample code for Script Task
In this article, we show how a script task can be used to integrate with DropBox for Business. The script will write the files in a Straatos Task into a directory in DropBox. The task in Straatos can have Original Document as well as Additional Data files.
Preparation Dropbox for Business
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy8zMzg1LzUwNDYvY2tmaW5kZXIvaW1hZ2VzL2ltYWdlKDgwKS5wbmciLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NjgzOTU0MDZ9fX1dfQ__&Signature=nv6WwqAn7kqXehsYAUGQDfZVVz3B7S4urcTNRO75qEPkO2SzkuBp~YX-nlirUP9dJ7xiXfZGnQIOTG3oDvzCTOolAG72KSaGHNBmHXHfGT4CLT07OX4GpiVnHIsy1yUJAPcnR6YrqEYWAmSvVK8fGrgVzIzpvw6RoCbldwahXaLtdFcR091GL2tGdfhQ97CXeYYffvGw0eeiAKix2FIHKiof2WJrqScgRzPCnoeCVHoqukeogJNW8ehKBJawE0xKtEW~gw1kTJIVBJfvu5XNt16FCbiqXSqhlrdL-8ofhS2hEBq7iUzkGl1YrcGm7gV-ewcLFZ7MgTdPs~GpXuphAw__&Key-Pair-Id=K2TK3EG287XSFC)
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy8zMzg1LzUwNDYvY2tmaW5kZXIvaW1hZ2VzL2ltYWdlKDgxKS5wbmciLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NjgzOTU0MDZ9fX1dfQ__&Signature=nsi6KPnU1YpMgbim9Qqo65BNVhsxd1ArGEO1V0nsDHQdVE7HbGiNFQ5r25~d7yyMvDHToIa6DBi9XAVUdw0Gm20qMZvJEiJkIFwGFqkfbXFx6fLk5B~-t00h1UbciKYV6w-xmp2FTl4R9fuwKkmQqGdivLT~EUZ-lWkGml9g8ppmX~hfKYzwn-zrPcoKwmtN3LWyCpvec4VZ6UDE5~Fjl5IPIwdsPX27~9d78ai72EAmVwuFYCb0FzToBEiUyS-g2V2OwIfiC1ye-dfJE~DkTMdcMvNS5zsXmy0oi~luQmgGYdFBZVoGw4Ac29YlIhnHOszQDLMKGKRummWfe7BnGg__&Key-Pair-Id=K2TK3EG287XSFC)
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy8zMzg1LzUwNDYvY2tmaW5kZXIvaW1hZ2VzL2ltYWdlKDgyKS5wbmciLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NjgzOTU0MDZ9fX1dfQ__&Signature=pcHhe6G~t7dEkhoDhyDnutQraax2gwlJsOi3xQobN1OEPGCy8NiSvbdHRzfoDfnhnPDZMPfbSO1I9DHW2h1l5H0HH34N2GcGchwPonDGFYyXd1T0EF-ysN28z2iiRdCuexuHHsNv2bHWVfQPYFcc66E7LZ70at08TLeVdzbveovz21NwY~4Xforl3FMhJaI8i2hoqv5yHkjxN6kcOOYvRmhvSdZLgrjq52Nv3Hjt8GvJbdvxf9gDuXB5esGToHuOd~nmsYy6rdO8SdL2wKEYqIiutbNU9XfJo2Vgvf2j6jExt7U5lAPIeeJ8ca1LDdPgNsLpkqZ78dBC6FQIrvoQEw__&Key-Pair-Id=K2TK3EG287XSFC)
Straatos Workflow Setup
For the example, we create a simple workfow where users can create a new task in MyHome, select the DropBox Folder the document should be stored in and then upload a document. The document will then get exported to that folder.
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy8zMzg1LzUwNDYvY2tmaW5kZXIvaW1hZ2VzL2ltYWdlKDgzKS5wbmciLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NjgzOTU0MDZ9fX1dfQ__&Signature=lohLdNTERf2ca9sryNZ48veb6Djhk0t50VKiWUHTzKeM8qml88qOlzdFf6U4LANNoV40w0ddUJkEcwjMiRbCfMnTWfwjHbBN1XnJT4u-xxMaiCeNoBwWYpUvIzh7RFoDZsyUKnz1vgfDC24ikjF2M33kzT9dJgrknvTgcqF8ytwUFmTM436NzBr4mSz2SqJvkwPkJCd0qDrWwZZ8ZWLQKaxNynMVwINf0T9ZdJMBgRkac9ilFINuOx148~NjqxoGY7VggzAYDPc7dUwNIyYqRcbnWD86xBcvxhrocutY7ekysZGeL99ADI2TbrdLnB5VncH-0mEX~qURXAivf6Jw2w__&Key-Pair-Id=K2TK3EG287XSFC)
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy8zMzg1LzUwNDYvY2tmaW5kZXIvaW1hZ2VzL2ltYWdlKDg0KS5wbmciLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NjgzOTU0MDZ9fX1dfQ__&Signature=KpNNTaRbF97c0OxPOlQCj6jHrOQQ67rTu19WVFvUcbYPZhuRCxTgnbqU1Bk7oawtLY97nbLS3YwxMMtSynxwMtVL7WvImzOBbTZ~yiLhO~INme4c0-LQcUiDjHolegtolk-MvlubhZsRRMGNE4HAk9472TPkrJ381jp24S4R~-yaWrpmyUmhzlRvxxaTc1i2FqehEPusFWM5h27MdyDsxSlmO~eUalbx6~Gj6IcHBr0ZhTQKZlgsyFkCQ~HjqZJ8qE5Cp8krFh-o~MXpKQkssW17OevyE1VknZEU7ZHEXfCaFl3qbTCvPLy~V2FjlHAebY89RD9Lw5-T3C~WN9F3Ag__&Key-Pair-Id=K2TK3EG287XSFC)
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy8zMzg1LzUwNDYvY2tmaW5kZXIvaW1hZ2VzL2ltYWdlKDg1KS5wbmciLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NjgzOTU0MDZ9fX1dfQ__&Signature=Wku9Re6ab5omGAgw80VSeUO-nKS4BNqfspt3PLZni3L~EvWQUBsSXnmbtrv1UhtU0AGlbNlGOFtwZdpaWzActhcmArvc3tziT3-jJYB8KXzOV54gUUCTDUpKsF~k1GMJ0-6Wn9nOq~HrOuXriV6w~bvcuAkTcetUqofaRkUEFe1T7B1aV~P~Bg7j9Sni65azMDNg7qJGP5mEEJXSrukWFhvvfmdVT4DuNd0HY74E3l0PQUc1Ex3qh~yUR~rl-c529tU5V8eCnjp88mHWFvPU8lRvpavacVON3Tmf4D4cXx~SIzWJ-Gg2ltFYUykel05Gb3ChZfNcIQqH4~pbLiBR2g__&Key-Pair-Id=K2TK3EG287XSFC)
We have now created the workflow and added a task with documents we can use to write and test our DropBox Script.
Script Task for Getting Folders from DropBox
In order to export the documents to dropbox, we need to match the user selected folder name with the folders in dropbox. Dropbox provides an ID for each folder. This information we need to provide when we upload the documents. For this sample, we retrieve the folders from dropbox and get the ID we need. We save then the ID in the 'Namespaces' field we created earlier.
try { Namespaces = ''; straatos.ajax({ url: 'https://api.dropboxapi.com/2/team/namespaces/list', method: 'POST', headers: {'Content-Type': 'application/json' , 'Authorization':'Bearer<your api token>'}, data: JSON.stringify({"limit": 1}) }).done(function (dataString) { var resp = JSON.parse(dataString).namespaces; console.log('++ resp: ' + JSON.stringify(resp)); if(resp && resp.length > 0) { for(var i=0; i<resp.length; i++) { if(resp[i].name == Folder){ Namespaces = resp[i].namespace_id; } } } }).fail(function (jqXHR, error) { console.log('Error:' + error); straatos.setError('Error: ' + error); }); } catch(err) { console.log('Error: ' + err); }
Script Task for Getting Teammember ID from DropBox
When a document is uploaded, we need to provide a Teammember Id. For this script example, we retrieve a list of teammembers from DropBox and use the first teammember to upload the document as. In a production implemenation, this could be checked against the Straatos Loginname or agains a fix ID used to upload documents.
We will add the code in the script step ''Get Folders & Members Info', just below the Folders code in the section above.
try { TeamMemberId = ''; straatos.ajax({ url: 'https://api.dropboxapi.com/2/team/members/list', method: 'POST', headers: {'Content-Type': 'application/json' , 'Authorization':'Bearer<your api token>'}, data: JSON.stringify({"limit": 100, "include_removed": false}) }).done(function (dataString) { var resp = JSON.parse(dataString).members; if(resp && resp.length > 0) { for(var i=0; i<resp.length; i++) { var elem = resp[i]; var profile = (elem).profile; var email = (profile).email; var status = JSON.stringify((profile).status); status = status.split(':')[1]; if(status == '"active"}') { TeamMemberId = (profile).team_member_id; } } } }).fail(function (jqXHR, error) { console.log('Error:' + error); straatos.setError('Error: ' + error); }); console.log('tmid ' + TeamMemberId); } catch(err) { console.log('Error: ' + err); }
Script Task for Uploading the documents to DropBox
Now that we have all the information needed to upload the documents to DropBox, we can write the script to upload.
In the script, we will upload the Original Document in the Straatos task (if there is one) as well as any additional documents. For additional documents, we will use the original filename that has been uploaded. For the Original Document, we will assign a UUID as the filename.
// SETUP ADDITIONAL DATA var uploadUrls = [], uploadfileNames = []; var documentInfo = straatos.adapter.getDocumentInfo(); for (var h=0; h<documentInfo.additionalData.length; h++){ uploadUrls[h] = documentInfo.additionalData[h].url + '?w=' + straatos.webServiceKey; uploadfileNames[h] = getFileName(documentInfo.additionalData[h].key); } // Setup the Original Document for export if(documentInfo.originalURL) { var urlsLength = uploadUrls.length; uploadUrls[urlsLength] = documentInfo.originalURL + '?w=' + straatos.webServiceKey; uploadfileNames[urlsLength] = straatos.uuid() + '.pdf'; console.log('++ original URL: ' + uploadUrls[urlsLength]); console.log('++ fileName: ' + uploadfileNames[urlsLength]); } //---- saving file URLs-------// var teamMemberId = TeamMemberId; if(uploadUrls && uploadUrls.length > 0) { for(var i=0; i < uploadUrls.length; i++) { saveURL(uploadUrls[i], uploadfileNames[i]); } } function getFileName(keyName) { var fileName = ''; if(keyName && keyName.length > 0) { fileName = keyName.substring(keyName.lastIndexOf(':') + 1); } console.log('++ fileName: ' + fileName); return fileName; } function saveURL(fileUrl, fileName) { console.log('++ fileURL: ' + fileUrl); console.log('++ fileKey: ' + fileName); try { fileName = "/" + fileName; console.log('++ ' + fileName); straatos.ajax({ url: 'https://api.dropboxapi.com/2/files/save_url', method: 'POST', headers: {'Content-Type': 'application/json' , 'Authorization':'Bearer<your api token>', "Dropbox-API-Select-User": teamMemberId, "Dropbox-API-Path-Root": JSON.stringify({".tag": "namespace_id", "namespace_id": Namespaces}) }, data: JSON.stringify({"path": fileName, "url": fileUrl}) }).done(function (dataString) { var resp = JSON.parse(dataString); console.log('++ resp: ' + JSON.stringify(resp)); }).fail(function (jqXHR, error) { console.log('+++ Error:' + error); straatos.setError('Error: ' + error); }); } catch(err) { console.log('+++++++++ Error: ' + err); } }
Test the Export
Once the above sections have been completed, test the export with the Straatos task created earlier. The documents should now be exported to the directory in Dropbox:
.png?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kemY4dnF2MjRlcWhnLmNsb3VkZnJvbnQubmV0L3VzZXJmaWxlcy8zMzg1LzUwNDYvY2tmaW5kZXIvaW1hZ2VzL2ltYWdlKDg2KS5wbmciLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE3NjgzOTU0MDZ9fX1dfQ__&Signature=dJx3q-B8gxBDhAVJ0Z18CxYWFFWmMmBa1PgIT2QCuSafWhjlBzpQuUgizsu9Zy0KXhauOfuB1FcAuIPeQla2al3mAFkl0Z3hQlaIqAGIeBeY0VTMj9fisJi9PnSmpXVys7xija5HBMPlm~muWbbHc8cD2wnXgH-mc5uzvFmAaJHLKnGcfd5raQLrwdeHTjWMIHrFZXzLwlaa8rO4Wtvhd1DWQJaTnFgU3h-soumL-9MP0Gh-qixrIcycwNT0PFW38z8B5pSK2o9wJ1JTtRXAyow8VLfJNvJNjglWwMgJSr6AlNZ-cFLDvtvTd-hG8Q0tgy1mQQh0EsILoHagWIAZIA__&Key-Pair-Id=K2TK3EG287XSFC)