4

我正在使用 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) + "'")

我也尝试了文档对象,但仍然没有成功。我感谢您的帮助。

4

2 回答 2

1

您可以在任何 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'])

查询应该是一行,因为如果存在“Body”字段,则输出限制为一行。

B) 如果REST API(simple-salesforce包)用于相同的查询,Body或字段的值是可以通过 GET 请求下载VersionData的表单的 URL 。'/services/data/v40.0/sobjects/Attachment/<object_id>/Body'

C)使用django-salesforce获取 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 ...
于 2017-08-12T22:33:31.567 回答
0
att_body = att_result["records"][0]["Body"]
att_url = base_url + attachment_body
att_text_result = requests.get(url, headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer %s' % session_id })

请参阅此 session_id:https ://github.com/simple-salesforce/simple-salesforce

于 2019-01-16T08:05:42.293 回答