Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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 ) {
}
}
@bolaurent
Copy link

bolaurent commented Dec 20, 2019

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