Dataloader与External Id

某日,又见某童鞋双手合十,指尖杵在下巴上,做福尔摩斯状。
忍不住凑了过去 。
此童鞋用眼角瞄到有人过来了,嘴角抽动了一下,欲言又止。

“别难为自己了,说说吧。”团结才是力量,对不对。
“好吧。。。”他长长的吐了一口气,手也放了下来。“事情是这样的,我有一张表叫做order。这个order有个字段叫product,会去lookup一个叫product的表。”。说着,他打开了SObject的详细页面。“现在我需要导入历史订单数据,量很大。”

我点了点头,示意他继续,因为目前为止听起来没什么。
“问题是原始数据的product字段并不是product的id,而是product的code。这样的话我没法直接导入系统。” 在我开口之前他赶紧抢先又说道,“product的种类和order的数据量都实在太大了,实在没办法用vlookup处理。已经死机好几次了。”

我弹开了他的手,接过鼠标打开了product表的定义页面。在自定义字段中找寻那个叫code的字段。唔。。。。External Id勾选了,Unique勾选了。不禁扬起了嘴角。

“看,Product的code是external Id。”我指着屏幕。
“可是我们要导入数据的是Order啊,不是Product。”
“那你先说说看,External Id在Dataloader里怎么用?”
“就是Upsert的时候,可以指定External Id,如果匹配上了就update,没匹配上就insert。”他自信的回答道。
“没错。但是还有一种用法。”
“啊?”

众所周知,lookup字段实际储存的值为ID。这也就意味着,在insert或者update数据的时候,我们要将Id写在lookup字段上。如果写的不是Id,或者Id不存在,Dataloader会告诉我们数据写入失败。
一般的情况下,如果我们只有被lookup的表中一个字段的值(Product Code),就不得不先根据这个值(Product的Code)去查出被lookup表的id(Product的Id),然后放在待更新数据的lookup字段上(Order的Product字段),才能继续执行下去(Order)。

不过,老天关上了你的门,一定会打开你的窗,毕竟你才是你生活的主角,所以有主角光环。

事实上,如果你拥有的值(Product Code)是被Lookup表的External Id(Product的Code),那么在插入数据时,可以让Dataloader根据External Id自动的将lookup字段填入对应的Id。这样就不用人工的去查找替换了。

做法如下。
1. 首先,一如往常,准备好csv,点insert,输入账号密码,选择Order,选择csv路径,下一步。
2. 然后,Create or Edit a Map, Auto-Match Fields to Columns。
3. 接下来就不一样了。在匹配完字段时候,点击Save Mapping。选择路径,填入文件名。保存sdl文件。
4. 找到刚刚保存的sdl文件,用文本编辑器打开。修改如下。保存。

#Mapping values
#Wed Apr 24 19:13:21 CST 2019
# Old 
#PRODUCT__C=product__c
# New 
PRODUCT__C=product__r\:code__c
.........

5. 回到Datalaoder,关掉Mapping Dialog窗口,这次点击Choose an Exsiting Map,选择刚刚保存的sdl文件。
6. 一路next。
7. 恭喜插入成功。(如果Product Code存在的话)

“看,你与成功之间只差一个\:”。我拍了拍了他的肩旁。
“恩人慢走”。

总结:
1. 被lookup表需要有External ID。
2. 在SDL文件中,将lookup字段的__c变成__r(标准字段去掉Id),加上“\:”,加上External Id的API Name。insert或者update的时候使用此sdl。
3. 必须仅且只仅匹配到一条记录才可以成功写入。

参考官方文档:
https://help.salesforce.com/articleView?id=000002783&type=1

后记:
有人问我说,唉,明明写的技术相关的内容,文风为什么这么不正经?
其实原因不外乎两个。第一个是想看正八经儿的说明文就应该去看官方文档,而不是等着官方文档的翻译。Salesforce的文档和知识库是很强大和全面的。第二个是每一篇文章的灵感来源都是真实被提出过的问题,我觉得自古以来,最好的承载知识的方式就是带入情景,讲故事。官方文档似的说明文是告诉你怎么一步一步的用锤子钉钉子,而我是想用故事告诉你可以用锤子来解决钉钉子的问题。
总之,想要一个工具速查手册的话,应该去看官方文档知识库才对。