我正在使用 Python/Beatbox 访问 Salesforce 个案。
service = beatbox.PythonClient() # instantiate the object
service.login(...) # login using your sf credentials
query_result = service.query("SELECT Id, AccountId, CaseNumber FROM Case WHERE Id='xyz' ")
我对特定案例感兴趣:
print query_result[0].Id
获取附件...
att_result = service.query("SELECT Id, ContentType, Name FROM Attachment WHERE ParentId= '" + str(query_result[0].Id) + "'")
到目前为止,结果还不错。现在我想下载上传到案例中的文件。 我的查询应该是什么?我尝试关注它,但它始终是空的。但我确定这个箱子有文件和附件。
doc_result = service.query("SELECT Id, ContentDocumentId, Title FROM AttachedContentDocument WHERE Id= '" + str(query_result[0].Id) + "'")
我也尝试了文档对象,但仍然没有成功。感谢您的帮助。
最佳答案
在任何 Salesforce API 中,您只能通过一个请求获取多个附件。为确保您没有附件,请先获取 Attachment.Id,然后通过循环获取正文
SELECT Id FROM Attachment WHERE ParentId = '...'
for ...
SELECT Body FROM Attachment WHERE Id = '...'"
A) SOAP API (Beatbox):将附件作为普通的长 base64 编码字段获取。
import base64
ret = service.query("SELECT Id, Body FROM Attachment WHERE Id = '...'")
blob = base64.b64decode(ret)[0]['Body'])
查询应为一行,因为如果存在“正文”字段,则输出仅限于一行。
B) 如果 REST API(simple-salesforce 包)用于相同的查询,Body
的值或 VersionData
fields 是形式为 '/services/data/v40.0/sobjects/Attachment/<object_id>/Body'
的 URL可以通过GET请求下载。
C) Fetch Salesforce Attachment content with django-salesforce
对二进制大型对象有用的对象是附件、文档和内容版本。
这些有用的查询允许通过 SOAP API (Beatbox) 获取二进制大对象(附件或文档)作为普通长字段。 ContentVersion
对象允许存储相同数据的多个版本。 Attachment
有一个父对象。 Document
没有任何父对象。有用的查询:(通过上面的 API 读取限制)
SELECT Id, Body FROM Attachment WHERE ParentId = '...'
SELECT Id, Body FROM Document WHERE ParentId = '...'
SELECT Id, VersionData FROM ContentVersion WHERE ...
关于python - 如何使用 Python 从 Salesforce 获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40900697/