利用 CRM 中间件 Middleware 从 ERP 下载 Customer Material 的常见错误
使用事务码 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
这个错误是试图从 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
通过调试 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 里找不到对应的配置项:
可以在 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
错误消息由于表 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 端的匹配项.
错误消息在第 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
原因: 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 相关内容。
要获取更多 Jerry 的原创技术文章,请关注公众号"汪子熙":
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/f838282c4982d20add39e1bc9】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论