是否有一种方法可以使用任何编程语言从Salesforce下载内容文档?



我试图找到一种方法来下载与Account对象相关的所有内容文档,并将下载的文档放在相应的Account Name下。我试过使用Tab Save和类似的chrome扩展来下载文档,但它们不能帮助我在各自的帐户文件夹中组织文件。

非常感谢你的帮助!

https://pypi.org/project/simple-salesforce/是流行的选择。阅读各种登录选项,包括如何进入沙盒。

你需要先尝试正确的查询,像这样的东西应该是一个很好的开始

select id, name,
(select contentdocument.LatestPublishedVersion.Title, 
contentdocument.LatestPublishedVersion.FileExtension, 
contentdocument.LatestPublishedVersion.VersionData
from contentdocumentlinks)
from account
where id = '0017000000Lg8WgAAJ'

在我的开发人员版本中通过REST API调用时,它返回帐户+ 3个附件

[
{
"attributes": {
"type": "Account",
"url": "/services/data/v56.0/sobjects/Account/0017000000Lg8WgAAJ"
},
"Id": "0017000000Lg8WgAAJ",
"Name": "University of Arizona",
"ContentDocumentLinks": {
"totalSize": 3,
"done": true,
"records": [
{
"attributes": {
"type": "ContentDocumentLink",
"url": "/services/data/v56.0/sobjects/ContentDocumentLink/06A4u00000jMtEHEA0"
},
"ContentDocument": {
"attributes": {
"type": "ContentDocument",
"url": "/services/data/v56.0/sobjects/ContentDocument/0694u00000VJqPmAAL"
},
"LatestPublishedVersion": {
"attributes": {
"type": "ContentVersion",
"url": "/services/data/v56.0/sobjects/ContentVersion/0684u00000WWgsIAAT"
},
"Title": "apex-07L3a00001NVoMZEA1",
"FileExtension": "log",
"VersionData": "/services/data/v56.0/sobjects/ContentVersion/0684u00000WWgsIAAT/VersionData"
}
}
},
{
"attributes": {
"type": "ContentDocumentLink",
"url": "/services/data/v56.0/sobjects/ContentDocumentLink/06A4u00000jMtFrEAK"
},
"ContentDocument": {
"attributes": {
"type": "ContentDocument",
"url": "/services/data/v56.0/sobjects/ContentDocument/0694u00000VJqQjAAL"
},
"LatestPublishedVersion": {
"attributes": {
"type": "ContentVersion",
"url": "/services/data/v56.0/sobjects/ContentVersion/0684u00000WWgtKAAT"
},
"Title": "combinepdf",
"FileExtension": "pdf",
"VersionData": "/services/data/v56.0/sobjects/ContentVersion/0684u00000WWgtKAAT/VersionData"
}
}
},
{
"attributes": {
"type": "ContentDocumentLink",
"url": "/services/data/v56.0/sobjects/ContentDocumentLink/06A4u00000jMtGkEAK"
},
"ContentDocument": {
"attributes": {
"type": "ContentDocument",
"url": "/services/data/v56.0/sobjects/ContentDocument/0694u00000VJqRhAAL"
},
"LatestPublishedVersion": {
"attributes": {
"type": "ContentVersion",
"url": "/services/data/v56.0/sobjects/ContentVersion/0684u00000WWguFAAT"
},
"Title": "Capture",
"FileExtension": "png",
"VersionData": "/services/data/v56.0/sobjects/ContentVersion/0684u00000WWguFAAT/VersionData"
}
}
}
]
}
}
]

这应该是足够的信息来创建文件夹名称和每个文件-确定文件名+扩展名。唯一剩下的问题是实际的有效载荷,您可以看到VersionData只是一些url,而不是base64编码的有效载荷。请参阅我的另一个答案https://stackoverflow.com/a/60284736/313628以获得解释。https://salesforce.stackexchange.com/q/300845/799也很简洁

无论如何-迭代JSON获取原始负载,创建文件…

类似这样的东西(我确信它很幼稚,没有null检查,我不是很精通python)

from simple_salesforce import Salesforce
sf = Salesforce(username='user@example.com', password='hunter2', security_token='')
data = sf.query("""select id, name,
(select contentdocument.LatestPublishedVersion.Title, 
contentdocument.LatestPublishedVersion.FileExtension, 
contentdocument.LatestPublishedVersion.VersionData
from contentdocumentlinks)
from account
where id = '0017000000Lg8WgAAJ'""")
#print(results)
for row in data['records']:
print(row['Name'])
for doc in row['ContentDocumentLinks']['records']:
d = doc['ContentDocument']['LatestPublishedVersion']
print("   " + d['Title'] + "." + d['FileExtension'])
response = sf._call_salesforce(method='GET', url = sf.base_url + d['VersionData'].split(".0/")[1])
print(response)
#print(response.content)

输出
University of Arizona
apex-07L3a00001NVoMZEA1.log
<Response [200]>
combinepdf.pdf
<Response [200]>
Capture.png
<Response [200]>

最新更新