批量上传文件到特定联系人 Salesforce

Eth*_*han 1 csv salesforce apex-data-loader

我需要向 Salesforce 中的特定用户上传大约 2000 个文档。我有一个 csv 文件,其中包含 Salesforce 分配的 ContactID,以及我桌面上文件的直接路径。每个联系人的特定文件 url 已包含在 csv 中。如何将它们全部上传,尤其是上传到正确的联系人?

eye*_*eam 5

您在评论/聊天中指出您希望将其作为“文件”。

“文件”对象比附件复杂一点,您需要分 2-3 个步骤来完成。您看到的文件(您可能会在文档中将其称为 Chatter Files 或 Salesforce Content)实际上是几个表。有

  • ContentDocument 它可以是一种文件头(标题、描述、语言、标签、与 SF 中许多其他区域的链接 - 因为它可以是独立的,它可以上传到某些 SF 内容库,它可以链接到帐户、联系人、 $_GOD 知道还有什么)
  • ContentVersion好吧,实际有效载荷。开箱即用仅显示最新版本,但如果您确实需要,可以回到过去
  • 和更多

废话部分是你不能ContentDocument直接插入(操作列表中没有 create() 调用)。


理论

所以你需要:

  1. 插入 ContentVersion(v1 会自动为你创建父 ContentDocuments ......它听起来有点笨拙,但它确实有效)。完成此操作后,您将加载一堆独立文档,但未链接到任何联系人
  2. 了解其父 ContentDocuments 的 ID
  3. 插入ContentDocumentLink将连接联系人及其 PDF 的记录

实践

这是我的 C:\stacktest 文件夹。它包含一些 SF 备忘单 PDF。

在此处输入图片说明

这是我的第 1 部分加载文件

Title   PathOnClient    VersionData
"Lightning Components CheatSheet"   "C:\stacktest\SF_LightningComponents_cheatsheet_web.pdf"    "C:\stacktest\SF_LightningComponents_cheatsheet_web.pdf"
"Process Automation CheatSheet" "C:\stacktest\SF_Process_Automation_cheatsheet_web.pdf" "C:\stacktest\SF_Process_Automation_cheatsheet_web.pdf"
"Admin CheatSheet"  "C:\stacktest\SF_S1-Admin_cheatsheet_web.pdf"   "C:\stacktest\SF_S1-Admin_cheatsheet_web.pdf"
"S1 CheatSheet" "C:\stacktest\SF_S1-Developer_cheatsheet_web.pdf"   "C:\stacktest\SF_S1-Developer_cheatsheet_web.pdf"
Run Code Online (Sandbox Code Playgroud)

Fire Data Loader,选择插入,选择显示所有 Salesforce 对象。查找内容版本。加载应该很简单(如果您遇到内存问题,请将批处理大小设置为较低的值,如果确实需要,甚至一次设置 1 条记录)。

你会得到一个“成功文件”,它没用。我们不需要生成的内容版本的 ID,我们需要它们的父级...在数据加载器中触发“导出”,再次选择所有对象,选择 ContentDocument。使用类似这样的查询:

Select Id, Title, FileType, FileExtension
FROM ContentDocument
WHERE CreatedDate = TODAY AND CreatedBy.FirstName = 'Ethan'
Run Code Online (Sandbox Code Playgroud)

您应该会看到如下内容:

"ID","TITLE","FILETYPE","FILEEXTENSION"
"0690g0000048G2MAAU","Lightning Components CheatSheet","PDF","pdf"
"0690g0000048G2NAAU","Process Automation CheatSheet","PDF","pdf"
"0690g0000048G2OAAU","Admin CheatSheet","PDF","pdf"
"0690g0000048G2PAAU","S1 CheatSheet","PDF","pdf"
Run Code Online (Sandbox Code Playgroud)

使用 Excel 和 VLOOKUP 的魔法或其他类似的东西将它们按标题链接回联系人。您写道,您已经有一个包含联系人 ID 和标题的文件,因此有希望...创建一个这样的文件:

ContentDocumentId   LinkedEntityId  ShareType   Visibility 
0690g0000048G2MAAU  0037000000TWREI V   InternalUsers
0690g0000048G2NAAU  0030g000027rQ3z V   InternalUsers
0690g0000048G2OAAU  0030g000027rQ3a V   InternalUsers
0690g0000048G2PAAU  0030g000027rPz4 V   InternalUsers
Run Code Online (Sandbox Code Playgroud)

第一列是文件 ID,然后是联系 ID,然后是一些黑魔法,如果需要,您可以在ContentDocumentLink文档中阅读和更改。

将其加载为插入(再次显示所有对象)ContentDocumentLink。

呜呼!啤酒时间。

在此处输入图片说明

在此处输入图片说明