Talend避免使用Salesforce输出重复外部ID

时间:2017-09-05 08:13:18

标签: salesforce talend

我们正在通过Talend导入Salesforce上的数据,并且我们有多个具有相同内部ID的项目。

由于upforce在Salesforce中的工作方式,导入失败并显示错误“指定了重复的外部ID”。目前,我们通过将tSalesforceOutput的提交大小设置为1来解决这个问题,但这仅适用于少量数据,否则会耗尽Salesforce API限制。

Talend中有一种已知的方法吗?例如,要确保具有相同外部ID的项目在tSalesforceOutput的不同“提交”中结束?

2 个答案:

答案 0 :(得分:1)

您的意思是您在输入中有两次或更多次相同的记录(例如同一帐户)吗?如果是这样,您是否可以尝试消除重复记录并仅保留您需要的记录推送到Salesforce?另外,如果每条记录都有特定的信息(因此您需要所有输入记录在Salesforce中都有一个完整的记录),请考虑合并之前将结果推送到Salesforce中。
最后,如果你不能做到这一点,那么在临时空间推动双倍数,将记录但双重数据推送到Salesforce并重复其他过程直到没有更多的双重数据。
就个人而言,如果可以的话#39;只是消除了双重问题,我更喜欢第二种方法,因为它是解决方案,可以减少Salesforce API调用。

希望这有帮助。
TRF

答案 1 :(得分:1)

以下是我想提出的解决方案的设计: enter image description here

  • tSetGlobalVar用于将变量“finish”初始化为false。
  • tLoop以(Boolean)globalMap.get("finish") == false为结束条件启动while循环。
  • tFileCopy用于将初始文件(例如A)复制到新文件(B)。
  • tFileInputDelimited读取文件B.
  • tUniqRow消除了重复。 uniques记录转到tLogRow,您必须用tSalesforceOutput替换。重复记录,如果有任何转到tFileOutputDelimited,名为A(与原始文件同名),并选中“如果文件已存在则抛出错误”未选中。
  • OnComponent OK在tUniqRow激活tJava后,使用以下代码设置全局结束的新值:
    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并且循环自动完成。

这是最终结果:
enter image description here

您还可以决定使用其他全局变量来设置salesforce提交级别(使用语法(Integer)globalMap.get("commitLevel"))。默认情况下,此变量将设置为200,如果有任何重复,则设置为tJava中的1。同时,将“finish”设置为true(不测试重复次数),第一次迭代的提交级别为200,第二次迭代的提交级别为1(并且不需要超过2次迭代)。登记/> 您可以根据潜在重复项的数量来决定更好的选择,但是您可以注意到,您可以完成对作业设计的任何更改。

我认为它应该可以解决你的问题。让我知道。

的问候,
TRF