[英]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.