Salesforce的Add Campaign Member

// 更新 2018-10-12
该Issue已经被解决。

// 最下有更新 2018-05-08

最近发现了一个好玩的现象。
作为Salesforce Marketing核心功能之一,标准功能Campaign的出镜率非常高。

这次的问题就出在向Campaign添加Campaign Member上。

除了使用DataLoader与Data Import Wizard等数据导入工具以外,Salesforce在标准画面上提供了三个添加Campaign Member的渠道。
第一种为最为常见的方式,通过Campaign详细画面下方Campaign Member关联列表上的Manage Members按钮进行添加。

第二种方式,通过Contact/Lead的ListView画面上的Add to Campaign按钮。

第三种方式,通过Report上的Add to Campaign按钮。

不过以上三种方式,只支持向单个Campaign添加Members。

问题是这样的,
假如我有一个Campaign叫做TestCampaign,有500个Contact叫做TestContact000~Test499。
如果没有任何意外发生,三种方式的行为是一致的,结果均是成功将500条Contact做成了Campaign Member。

接下来我们做实验。
首先,在Contact上添加一个Text字段,叫testValidation__c。
然后在Campaign Member上添加一个Validation Rule,拦截条件为Contact.testValidation__c等于“E”。
之后将TestContact000的testValidation__c设置为”E”。

分别使用三种方式,将TestContact001~500添加到TestCampaign。

结果,行为出现了偏差。
对于第二种和第三种方式,

由于有一条“错误”数据,导致整个导入Campaign Member动作失败。

而最常见的第一种方式,却出现了不同的结果。

首先,错误信息与其他两种方式一致,并且没有进行画面跳转。


但是,如果我们进入Existing Members画面,就会赫然发现,里面居然进去了99条。

观察数据编号,发现进去的数据为TestContact001到TestContact099。就是说,除了“错误”的TestContact000,前100条的剩余数据都成功做成,100条以后的全都被放弃了。

这样的话,我猜想Add Member功能的机制是这样的———————选完数据,开始执行之后,后台会将数据按顺序分为100条一个批次,加入某个批次出现了错误数据,则其余数据插入,处理终止。

为了证实这个猜想,我又实验了将TestContact101设定为“错误”数据的情况,果然如我所料,进入了199条数据,为TestContact000~TestContact100及TestContact102~TestContact199。

对于同样一个功能,不同入口却出现了不同的行为模式与处理方式,实在是无法理解。
关于100条一个批次的问题,我猜应该是一个Salesforce的历史遗留问题,因为曾经Trigger虽然最多一起处理200条数据,但曾经后台还是按100一批处理的,导致有一些代码写法会莫名的只对前100条生效。

也许,又是一个Bug。

// 2018-05-08 Update

SFDC承认了这是一个Bug。Agent还贴心的提了一个Known Issue。
https://success.salesforce.com/issues_view?id=a1p3A000000nXgTQAU
遇到相同问题的同学请mark一发。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据