关于 CRM 和 ERP 系统的主数据在中间件系统中的映射关系
在如下的配置里可以维护CRM和ERP的Sales Organization的映射关系。
例如,ERP的编号为0001的销售组织映射到CRM的编号为O 50040102的销售组织:
这种映射关系存储在表HRV1222A里,可以通过字段R3_SA_ORG查询:
其中CRM的Sales Organization的编号存储在字段OBJID里:
也可以在代码里通过CL_CRM_ORGMAN_SERVICES=>MAP_R3_SALES_ORG_TO_HROBJECT来基于ERP的Sales Organization编号获得CRM对应的编号。
CRM WebClient UI上也能看到该映射关系:
在使用中间件从ERP下载对象时,正常情况下应该看到如下提示消息:
然而有时遇到的是黄色的警告消息:Object is in status Wait.
如何自己排错呢?在函数SMOF0_INIT_DNL_START里设置断点。
使用SMOF0_READ_SMOFPARSFA查询系统参数MAX_PARALLEL_PROCESSES,在我使用的系统上配置为5,意味着最大只允许有5个工作进程用于中间件下载。
下列代码107到115行负责计算还剩余多少可用的工作进程用于中间件下载。计算结果存储于第115行的变量gv_open_processes.
在我上述的例子里,可用工作进程的数目gv_open_processes为5 - 5 = 0, 因此抛出文章题目的警告消息。
解决方案:要么停掉长时间处于running状态的其他下载任务以释放出占用的工作进程。
要么在表SMOFPARSFA里为参数MAX_PARALLEL_PROCESSES配置更大的数值。
使用事务码VD51和VD52创建和修改Customer Material。
下图是我在ERP创建的Material,为其维护了一个Customer Material AOP。
当下载到CRM后,在WebClient UI上显示如下:
下载Customer Material的主要配置:
-
- 通过表KNMT的字段KUNNR指定待下载的Customer ID:
-
- 将ERP的Material 1427先下载到CRM
常见错误
-
- 错误消息Number not in interval XXX - XXX when downloading a customer from ERP
- 错误消息Number not in interval XXX - XXX when downloading a customer from ERP
这个错误是试图从ERP下载上图编号为3471的Customer。
错误消息:
为什么错误消息里提到的interval是0000300000 - 0000399999?
当ERP的Customer被下载到CRM时,会创建一个对应的Business Partner的实例。
在这个例子里,通过调试方式得知CRM创建Business Partner时使用的Partner group为0002:
查看0002对应的number range设置为07:
而07对应的interval即为错误消息里提到的范围:
解决方案:把0002对应的number range改为03
-
- 错误消息Form of address 0001 not designated for organization
- 错误消息Form of address 0001 not designated for organization
通过调试CRM_BUPA_MAIN_VAL,发现错误消息在第34行抛出:
虽然这个Customer实例被判定成一个Organization(因为category字段为2),但是PERSON的字段被置位,而不是ORGANIZATN字段,因此出现这个错误消息。
解决方案:
在ERP事务码SM30里,打开view V_TSAD3,把0003标记为Organization:
然后把Customer 3471的title从Ms改成Company:
之后即可成功下载。
-
- Customer classification 06 does not exist
通过调试发现该错误信息是下图第22行抛出的,因为在表crmc_classif里找不到对应的配置项:
- Customer classification 06 does not exist
可以在Define Customer Class里维护这个配置表:
在我的系统里,没有06这个classification对应的配置项。
首先要搞清楚代码里的这个06从哪里来的?
在BAPI_CRM_SAVE里设置断点,在调试器里把变量BAPISTRUCTURES的内容下载到本地,用excel打开,搜索关键字06,发现06出现在结构BSS_S040:
然后对这个结构使用"where used list",发现classification的数据来自KUKLA.
classification是在ERP Customer维护界面的Marketing项维护的:
在Define Customer Classification维护:
解决方案:要么像上图所示在CRM里维护06对应的classification,要么将ERP里对应的字段设置为空。
-
- Tax number category does not exist
- Tax number category does not exist
错误消息由于表tfktaxnumtype中没有查到US5对应的配置项,所以在第32行报了错误消息:
下一步需要搞清楚为什么US5会被查询到。通过调试,发现US5和JERRY都是从ERP传过来的:
解决方案:要么在CRM里为US5维护对应的Tax category,要么清掉ERP的Tax number 5这个字段.
-
- Distribution channel is not allowed for sales organization
通过调试发现错误消息在CRM_PR_SALES_CHECK_DISTR_CHAIN里抛出,原因是因为CRM Sales organization O 50040102和distribution chain 01没有找到对应的ERP端的匹配项.
- Distribution channel is not allowed for sales organization
错误消息在第71行抛出:
当我查看内表st_distr_chains时,发现O 50040102只有Channel 10的组合,而缺少01的组合。
解决方案:使用事务码PPOMA_CRM添加缺少的distribution channel 01组合以及所有的division 00, 01和07:
然后执行HRBCI_ATTRIBUTES_BUFFER_UPDATE来更新表CRMD_ORGMAN_TEMP:
确保缓存表里能看到期望的O 50040102拥有的distribution channel和division的组合。错误消息得以解决。
-
- Parent not O.K.: BUPA_MAIN
- Parent not O.K.: BUPA_MAIN
原因: CUST_MAT_INFO这个下载对象有三个父下载对象。
如果这三个对象有一个下载失败,则无法进行CUST_MAT_INFO的下载。技术上说,就是这三个parent对象在表SMOFDSTAT的对应记录的列DNL_STATUS必须为内容D-done。
在我的例子里,Material对象的状态为A-aborted.因此必须先修复Material下载的错误。
-
- sales area is not assigned for the header product
错误在CRM的COM_IL_PRDSCP_CHECK抛出:
因为这个product是从ERP下载的,我们不能在CRM端手动为其维护Distribution Chain:
回到ERP,检查表MVKE,发现其实Sales Organization 0001和渠道01已经正确地维护到了这个product上。
再回到CRM,检查ERP的Sales organization和渠道的组合0001-01是否在CRM端维护有对应的映射关系。 当我使用事务码PPOMA_CRM维护了缺失的映射关系后,
重新进行一次下载,此时能观察到Sales Area这一次被成功下载了:
之后也能在CRM UI上看到成功下载的Sales Area相关内容。
从事务码SMW01里能观察到一个BDOC可能被发送往不止一个目的site去,比如下图所示的5个site都会收到该site,而高亮显示的SMOF_ERPSITE代表ERP系统QI3的client 504会接收到这个BDOC。
所以上图列表里的site是从哪里读取出来的?
以BDOCPRODUCT_MAT为例,在视图SMW3FDBDOC里维护回调函数:
第一个回调SMOH_REPLICATION_WRAPPER_MSG负责决定需要从CRM将该BDOC发送到哪些site去。
这个回调是自动生成的:
在我的系统里,一共决定出了有6个site需要接收:
上图的ABAP代码里使用了guid A17123B82C2DD5118BC8080006277F8D来查询表smohsubsit,那么这个guid到底指什么东西?
可以在表SMOHPUBL里查询到guid对应的对象描述:Product Materials(MESG)
到这里我们发现它就是我们熟悉的在事务码SMOEAC里为某个site订阅它希望监听的众多对象之一。如下图,QI3/504的site注册了"Product Materials(MESG)"的发布,意味着一旦CRM的Product发生了修改,对应的BDOC就会发送到QI3/504.
前提条件:必须先确保三个对象ATTRIBUTE, CLASS和OBJCL成功下载。可以到事物码R3AM1里查看,确保状态全部为Done。
(1) 在事物码MM02里,切换到视图classification,将class 023_03分配给Material:
在warehouse management视图中,确保Batch management处于选中状态。
(2) 将该material下载到CRM。在下载的BDOC里能观察到BATCH_DEDICATED已经置为true了。
ERP里分配的class已经成功下载到CRM:
- 点赞
- 收藏
- 关注作者
评论(0)