[英]How to get metadata of Salesforce Objects using Python if the object name is dynamic?
[英]How to get files from Salesforce using Python
我正在使用 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):獲取附件作為普通長 base64encoded 字段。
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
字段的值是形式為'/services/data/v40.0/sobjects/Attachment/<object_id>/Body'
可以通過 GET 請求下載。
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 ...
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.