2016-12-01 57 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 ... 
相關問題