我们正在通过Talend导入Salesforce上的数据,并且我们有多个具有相同内部ID的项目。
由于upforce在Salesforce中的工作方式,导入失败并显示错误“指定了重复的外部ID”。目前,我们通过将tSalesforceOutput的提交大小设置为1来解决这个问题,但这仅适用于少量数据,否则会耗尽Salesforce API限制。
Talend中有一种已知的方法吗?例如,要确保具有相同外部ID的项目在tSalesforceOutput的不同“提交”中结束?
答案 0 :(得分:1)
您的意思是您在输入中有两次或更多次相同的记录(例如同一帐户)吗?如果是这样,您是否可以尝试消除重复记录并仅保留您需要的记录推送到Salesforce?另外,如果每条记录都有特定的信息(因此您需要所有输入记录在Salesforce中都有一个完整的记录),请考虑合并之前将结果推送到Salesforce中。
最后,如果你不能做到这一点,那么在临时空间推动双倍数,将记录但双重数据推送到Salesforce并重复其他过程直到没有更多的双重数据。
就个人而言,如果可以的话#39;只是消除了双重问题,我更喜欢第二种方法,因为它是解决方案,可以减少Salesforce API调用。
希望这有帮助。
TRF
答案 1 :(得分:1)
(Boolean)globalMap.get("finish") == false
为结束条件启动while循环。if (((Integer)globalMap.get("tUniqRow_1_NB_DUPLICATES")) == 0) globalMap.put("finish", true);
使用以下样本数据进行说明:
第1行
第2行
第3行
第2行
第4行
第2行
第5行
第3行
在第一次迭代中,5个唯一记录被推入tLogRow,3个重复记录被推送到文件A中,并且“完成”不会因为重复而被更改。
在第二次迭代中,重复2个唯一记录和1个重复的操作
在第3次迭代中,操作重复1次唯一,并且由于没有重复,“finish”设置为true并且循环自动完成。
您还可以决定使用其他全局变量来设置salesforce提交级别(使用语法(Integer)globalMap.get("commitLevel")
)。默认情况下,此变量将设置为200,如果有任何重复,则设置为tJava中的1。同时,将“finish”设置为true(不测试重复次数),第一次迭代的提交级别为200,第二次迭代的提交级别为1(并且不需要超过2次迭代)。登记/>
您可以根据潜在重复项的数量来决定更好的选择,但是您可以注意到,您可以完成对作业设计的任何更改。
我认为它应该可以解决你的问题。让我知道。
的问候,
TRF