Mass Importing Attachments
Importing an Attachment into Salesforce with SQLForce can be done with a short script, but what about importing a lot of Attachments at once? This article will show you how to import many Attachments at one time.
The Basics
The script to import a single Attachment into Salesforce is below:
import SQLForce
from SQLForce import AttachmentWriter
session = SQLForce.Session(“MyConnectionParameters”)
salesforceParentId = ‘001A0000014fia3’ # The unique id of the Salesforce object to own the attachment
filename = “/mydir/salesforcecast.docx” # The file to add as an attachment.
attachmentId = AttachmentWriter( session, salesforceParentId, filename )
That’s it — the part is determining the filenames of the Attachments and their associated parent Ids.
A More Complex Example
Suppose we have a TAB delimited spreadsheet where:
- Column 1 contains the Salesforce Id of the Attachment’s parent record.
- Column 2 contains the name of the file.
- Column 3 contains a description which should be associated with the Attachment.
The following script will import Attachments from the spreadsheet — the most complicated functionality beyond the example above is the processing of the spreadsheet:
import SQLForce
import csv
from SQLForce import AttachmentWriter
##
## Store a reference to each attachment to process in an AttachmentRef instance
##
class AttachmentRef:
def __init__(self, parentId, filename, description=None ):
self.parentId = parentId
self.filename = filename
self.description = description
”’
Read the list of files to attach from a spreadsheet where:
+ Column 1 contains the Salesforce ID of the record to own the attachment.
+ Column 2 is the name of a file.
+ Column 3 is a description to store with the attachment.
Return a list of AttachmentRefs
”’
def loadAttachmentRefsFromFile( filename ):
attachmentRefs = [] with open( filename, ‘r’) as fd:
reader = csv.reader(fd, delimiter=”\t”)
for row in reader:
attachmentRefs.append( AttachmentRef( row[0], row[1], row[2]))
return attachmentRefs
”’
Load a list of attachments into Salesforce.
Return a list of attachments for each recorded uploaded to Salesforce.
”’
def attachFilesToSalesforce( session, attachmentRefs ):
attachmentIds = [] for ref in attachmentRefs:
attachmentId = AttachmentWriter.attachFile(session, ref.parentId, ref.filename, description=ref.description)
attachmentIds.append( attachmentId )
print( ref.parentId + ” : ” + ref.filename + ” : attached as ” + attachmentId)
return attachmentIds
”’
Here’s the main() program
”’
attachmentRefs = loadAttachmentRefsFromFile(“ImportAttachments.txt”)
session = SQLForce.Session(‘SQLForceExample’)
attachmentIds = attachFilesToSalesforce( session, attachmentRefs )
session.delete(‘Attachment’, attachmentIds)