利用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

- 错误消息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相关内容。


要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:


利用CRM中间件Middleware从ERP下载Customer Material的常见错误的更多相关文章
- 利用Django中间件middleware解决用户未登录问题(转)
add by zhj: Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middlewar ...
- python-selenium实现的简易下载器,并常见错误解决
简易下载器的实现 支持代理.失败重试.确保包含指定ID元素(可根据需求自定义修改) # coding: utf-8 from Utils import logging from bs4 import ...
- JAVA环境下利用solrj二次开发SOlR搜索的环境部署常见错误
问题一:出现控制台坏的响应错误一Bad request 控制台出现错误如下: Bad Request request: http://hostIP:8983/solr/update?wt=javabi ...
- 如何从ERP下载Sales BOM到CRM
在ERP使用事务码CS01创建一个BOM,类型选择5 - Sales BOM: BOM的抬头维护material 1419,在BOM的component部分维护另外两个material 1421和14 ...
- 给用过SAP CRM中间件的老哥老姐们讲讲SAP CPI
最近Jerry由于项目需要,又得学习一个新工具:SAP Cloud Platform Integration,简称CPI,以前又叫做HCI - HANA Cloud Platform Integrat ...
- 一秒钟看懂SaaS、CRM、OA、ERP、HR、进销存
自2014年以来,SaaS.CRM.OA.ERP.HR.APM.进销存.财务系统等,这些名词大量出现在微信朋友圈.电视楼宇广告和千百万融资资讯中.它们到底是什么意思?相互之间又有什么区别?在这个飞速发 ...
- C# Owin 创建与测试自己的中间件Middleware(二)
本文纯属介绍怎么简单地创建自己的Owin.还没有理解owin概念的请看上一篇文章:http://www.cnblogs.com/alunchen/p/7049307.html 目录 1.创建项目 2. ...
- .NET Core 自定义中间件 Middleware
引言 很多看了上一章的朋友私信博主,问如何自定义,自己的中间件(Middleware),毕竟在实际的项目中,大家会有很多需求要用到中间件,比如防盗链.缓存.日志等等功能,于是博主这边就简单讲解一下框架 ...
- ASP.NET Core 开发-中间件(Middleware)
ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...
随机推荐
- 建立ionic3的环境
看了好些例子,关于如何搭建ionic3的环境的,结果因为代理服务器的原因,弄好久才成功.前面的步骤网上随意可以找到的了,关键是ionic设置代理的地方,如果你的公司也需要代理才能到外网的话.... 1 ...
- Mac上Node环境配置
公司配备Mac笔记本,以前没用过mac开发项目,一开始依然是从node官网下载安装包,后来领导说最好是用brew安装软件,这样比较方便,安装和卸载,只要在命令行输入相应的 install 和 unin ...
- 授权过期后AJAX操作跳转到登录页的一种全局处理方式
前两天园友JustRun分享了一篇 <菜鸟程序员之Asp.net MVC Session过期异常的处理>博文,正好自己前段时间被安排处理过这个问题,发现JustRun的方法有一点点可优化的 ...
- oracle 基础知识(二)-表空间
一,表空间 01,表空间? Oracle数据库是通过表空间来存储物理表的,一个数据库实例可以有N个表空间,一个表空间下可以有N张表.有了数据库,就可以创建表空间.表空间(tablespace)是数据库 ...
- Java基础24-文档注释
格式: /** .......*/ /** 此类是对数组进行取最大值 @author 深海溺心 @version 1.0 */ public class Compare{ private Compar ...
- MYSQL系列-Mysql存储引擎选择
MYSQL系列-Mysql存储引擎选择 //查看当前数据库支持的存储引擎 show engines \G; 创建表的时候可以通过engine=MyISAM指定存储引擎 MyISAM: .MYISAM不 ...
- javascript中for in与in的用法
1.For...In 声明用于对数组或者对象的属性进行循环/迭代操作. 对于数组 ,迭代出来的是数组元 素,对于对象 ,迭代出来的是对象的属性: var x var mycars = new Arra ...
- C++程序设计基础(7)位运算
注:读<程序员面试笔记>笔记总结 1.知识点 运算 符号 说明 与 & 有0为0,都1为1 或 | 由1为1,都0为0 非(取反) ~ 0变1,1变0 异或 ^ 同为0,异为1 左 ...
- MVC中提交表单的4种方式
一,MVC HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm ...
- pycharm激活码------2017.11.之前有效
BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...






