我遇到过很多客户报这样的问题:他们发现在ECC的外向队列中经常会出现队列名为R3AD_CUSTOME*或者R3AD_BUPA*或者R3AD_*等,而且状态是“停止(STOP)”的条目,如下图所示。

其实这个条目在执行初始传输(initial load)或需求传输(request load)的时候出现在这里是正确的现象。
在这篇博文中,我就来和大家详细解释一下这个条目出现的原因及意义。
刚才也说了,这个条目在执行initial load或者request load的时候出现,目的就是为了阻止在其过程中有新的增量传输(delta load)发生。试想,如果没有这个条目将增量传输的队列堵住,对数据的delta change将会在initial load或者request load结束之前传到目标系统,而initial load或者request load结束之后又会将刚才的delta change覆盖掉,因而也就会导致两边数据的不一致。由此可见,这个条目的添加对于保证数据的同步性还是相当重要的。大家也可以放心,当initial load或者request load传输成功之后,这个条目将会在ECC的外向队列自行消失,并不会影响数据后续的传输。
同时,我也遇到客户报过一些特殊情况,客户发现即使initial load或者request load已经传输成功了,但是这个R3AD_*条目依然存在,并没有自行消失。这个时候大家可以去检查一下CRM的表SMOFDSTAT及 SMOFRSTAT中状态为“R (Running)”的条目,其中的条目有可能会阻止R3AD_*条目的自动删除。比如,对象CUSTOMER_MAIN的initial load已经顺利完成了,但是表SMOFRSTAT中,你发现有一条对于编号为123的customer的request load由于某种原因还在进行当中,这样的话,状态为STOP的R3AD_*就不会消失。如果遇到这样的情况,大家可以手动将表SMOFDSTAT及 SMOFRSTAT中“R”的条目重设为“D (Done)”,然后将ECC外向队列中的R3AD_*条目手动删除即可。
另外还有一点我想在这个博文中说明,在对customer,BP或者其他对象做initial load或者request load的时候,其实添加的条目名字是包含了具体的object的,比如R3AD_CUSTOME*,R3AD_BUPA* 等等。

唯独在传输MATERIAL的时候,一个整体的R3AD_*的条目会被添加,也就是所有的delta队列都会被堵住。于是有的客户就会问这个的原因。这是因为很多其他的对象都和MATERIAL有一定的关联,所以在传MATERIAL的时候,需要停止任何其他的delta change,为的就是更好的保证数据的一致性。这样的设计也是有道理的。
如果大家想要改变这个状况,只希望独立的R3AD_MATERIA*产生,可以进行下面的步骤来进行配置:
1. 在ECC系统中执行事务代码SM30
2. 输入表名CRMQNAMES 然后进入编辑模式
3.找到下面的条目:
Object Name:MATERIAL
Sorting:1
Name of BAPI structure:BAPIMATMRA
Field of BAPI structure:COMPETITOR
将“MATERIA” 添加到 field CRMOBJPART中
4. 保存更改
如上步骤在SAP note 966758 中也有提及,这样一来,当对MATERIAL执行initial load或者request load 的时候,在ECC的外向队列中将不再产生一个总体的R3AD_*条目,取而代之,产生的将会是独立的R3AD_MATERIA*条目。
希望这篇博文能解答大家对ECC外向队列中R3AD_*这种条目的疑惑,也希望可以帮助大家更好地理解这一标准设计的原因。