How do you upload a file to an external data source (e.g. Sharepoint, Google Drive, etc) in Salesforce via Files Connect? Is this even possible. I've read the Salesforce articles, I've watched a number of videos (from Laurent Kubaski). And they end up just being a way view files stored on the external data source with no way to upload or even edit.
TL;DR;
I'm hoping to be able to upload a file to Sharepoint/GoogleDocs/etc via Salesforce (from an Upload button on the Files tab/page or the RestAPI or even Apex) so that the file gets inserted/uploaded into the external system and a ContentVersion record gets created from that process, linked to that newly created external document.
The closest I've seen to anyone doing this is in this post (Sharepoint Files Connect identifiers in Content Version Object) where he says:
After uploading a Sharepoint file via Salesforce Files Connect, i see a record gets created in Content Version object.
But he doesn't mention how he did it.
The only other articles that even come close are similar to this article (Convert GoogleDoc records to Salesforce Files) where he's adding ContentVersion
records linking to existing file in Google Docs but he's doing this because of an apparent change in the Google API:
After April 2015, […] Salesforce changed the integration citing changes to Google’s API. You can now only create bookmarks to the URLs of Google Drive files this way.
So, is it even possible to upload a file in Salesforce that goes directly into an external data source, without:
- having two copies of the file data/content (one in Salesforce and the other in the external system)
- having to manually insert the file into the external system via a RestAPI call (whatever) and then querying the info of newly inserted file, from the external system, just to add a link in Salesforce.
I've tried to use the Salesforce Rest API to insert (POST) a file into the external data source but it fails with Required fields are missing: [ExternalDocumentInfo2]
which is the ID of the file in the external system.
{
"ExternalDataSourceId": "<ExternalDataSourceId>",
"ContentLocation": "E",
"Origin": "H",
"FirstPublishLocationId": "<linkedEntityId>",
"Title": "peter_griffin_face1.jpeg",
"PathOnClient": "peter_griffin_face1.jpeg",
"VersionData": "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"
}
Great, it's the chicken and the egg paradox. But seriously, it looks as though what I'm trying to accomplish isn't possible (unless @learningmode has any magical insight into what I'm doing wrong).
I'm hoping to be able to upload a file to Sharepoint/GoogleDocs/etc via Salesforce (from an Upload button on the Files tab/page or the RestAPI or even Apex) so that the file gets inserted/uploaded into the external system and a ContentVersion record gets created from that process, linked to that newly created external document.
Any help would be greatly appreciated.
Best Answer
This question is taken from the Salesforce Integration Architecture Designer Exam. The answer is allegedly B:
NO.55 Universal Containers (UC) is a large printing company that sells advertisement banners. The company works with third-party agents on banner initial design concepts. The design files are stored in an on-premise file store that can be accessed by UC internal users and the third party agencies. UC would like to collaborate with the 3rd party agencies on the design files and allow them to be able to view the design files in the community. The conceptual design files size is 2.5 GB. Which solution should an integration architect recommend?