Skip to content

Instantly share code, notes, and snippets.

@douglascayers
Last active February 1, 2023 20:03
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save douglascayers/fb011b94db9e97b52c4b60cd06d2172c to your computer and use it in GitHub Desktop.
Example code to convert GoogleDoc into ContentVersion (external file reference)
public class GoogleDocToFilesBatchable implements Database.Batchable<SObject>, Database.Stateful {
private ID externalDataSourceId { get; set; }
public GoogleDocToFilesBatchable( ID externalDataSourceId ) {
this.externalDataSourceId = externalDataSourceId;
}
public Database.QueryLocator start( Database.BatchableContext context ) {
return Database.getQueryLocator([
SELECT
id, name, url, ownerId, parentId,
createdById, createdDate, lastModifiedById, lastModifiedDate
FROM
GoogleDoc
ORDER BY
parentId
]);
}
public void execute( Database.BatchableContext context, List<GoogleDoc> googleDocs ) {
List<ContentVersion> filesToInsert = new List<ContentVersion>();
for ( GoogleDoc gd : googleDocs ) {
String gdocId = gd.url.substringAfter( '/d/' ).substringBefore( '/' );
filesToInsert.add( new ContentVersion(
contentLocation = 'E',
origin = 'H',
ownerId = gd.ownerId,
title = gd.name,
pathOnClient = gd.name,
externalDataSourceId = this.externalDataSourceId,
externalDocumentInfo1 = gd.url,
externalDocumentInfo2 = gdocId,
firstPublishLocationId = gd.parentId,
// Enable "Create Audit Fields" in Setup then you can
// preserve the original create/update values and owner if original owner is inactive
// https://help.salesforce.com/articleView?id=Enable-Create-Audit-Fields&language=en_US&type=1
createdById = gd.createdById,
createdDate = gd.createdDate,
lastModifiedById = gd.lastModifiedById,
lastModifiedDate = gd.lastModifiedDate
));
}
insert filesToInsert;
// optionally, can delete the GoogleDoc bookmarks since now redundant of Files
// delete googleDocs;
}
public void finish( Database.BatchableContext context ) {
}
}
@dstewart-nxstage
Copy link

We're considering moving our Salesforce google docs to Files (or somewhere :( ...), but it's not clear to me how to execute this batch.
At the moment, I know that we have Notes & Attachments under Google Docs, Notes & Attachments, but I'd like to figure out the scope of the google docs that may be out there, and what would be involved with a conversion if we no longer use Google.
Where do I look to get the externalDataSourceId of the google drive? Using the REST Explorer in Workbench under /services/data/v43.0/connect, I do not have a link to /content-hub, much less /content-hub/repositories.

@bolaurent
Copy link

This was very useful for me. I ended up writing a python script, migrate-google-docs.py . It is a lot more flexible about parsing urls to get google drive ids.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment