2016-12-01 62 views
1

我正在使用Python/Beatbox访问Salesforce案例。如何使用Python从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) + "'") 

到目前为止,效果都不错。现在我想下载上传到案例的文件。 我的查询应该是什么?我试着下面及其总是empty..But我敢肯定的情况下有文件,以及附件..

doc_result = service.query("SELECT Id, ContentDocumentId, Title FROM AttachedContentDocument WHERE Id= '" + str(query_result[0].Id) + "'") 

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

+0

我不熟悉的Salesforce的API,但在你的你在哪里检索附件最后一行,'doc_result',你应该使用的ID (s),所以你可以使用'str(att_result [0] .Id)'而不是'str(query_result [0] .Id)''。 –

+0

我想你正在寻找:ContentDocument而不是AttachedContentDocument。至少在我的'案例'它的工作 – utm

+0

Utm,要访问contentdocument我们如何链接案件及其文件。它是case.ID = ParentID.ContentDocument?这是我缺少的。 – user7233710

回答

0

您可以通过任何Salesforce API中的一个请求获取不超过一个附件。要确保你不这样做的附件,先拿到Attachment.Id,然后通过一个循环

SELECT Id FROM Attachment WHERE ParentId = '...' 
for ... 
    SELECT Body FROM Attachment WHERE Id = '...'" 

A)SOAP API(节奏口技)得到身体:获取附件作为一个正常的长base64encoded领域。

import base64 
ret = service.query("SELECT Id, Body FROM Attachment WHERE Id = '...'") 
blob = base64.b64decode(ret)[0]['Body']) 

查询应该期待一行,因为如果“Body”字段存在,则输出限制为一行。如果REST API被使用(simple-salesforce封装)与相同的查询

B),BodyVersionData字段的值是形式'/services/data/v40.0/sobjects/Attachment/<object_id>/Body'其可以通过GET请求被下载的URL。

C)Fetch Salesforce Attachment content with django-salesforce


为二进制大对象的对象有用的是附件,文献和ContentVersion。 这些有用的查询允许通过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 ... 
相关问题