【问题标题】:How to get files from Salesforce using Python如何使用 Python 从 Salesforce 获取文件
【发布时间】:2016-12-01 00:32:26
【问题描述】:

我正在使用 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,但在您检索附件的最后一行中,doc_result,如果您使用附件的 ID,那么您会使用str(att_result[0].Id) 而不是str(query_result[0].Id)
  • 我猜您正在寻找:ContentDocument 而不是 AttachedContentDocument。至少在我的“案例”中它有效
  • Utm,要访问内容文档,我们如何与案例及其文档链接。是 case.ID = ParentID.ContentDocument 吗?这就是我所缺少的。

标签: python salesforce simple-salesforce beatbox django-salesforce


【解决方案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 包)用于相同的查询,则BodyVersionData 字段的值是'/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 ...

【讨论】:

    【解决方案2】:
    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 })
    

    请参阅此会话 ID:https://github.com/simple-salesforce/simple-salesforce

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      相关资源
      最近更新 更多