问题背景
前几天遇到客户提出的一个需求,HCM创建员工自动生成员工供应商且需要在供应商角色下面控制TAB页签,自动填充贸易伙伴编号的字段,贸易伙伴是处理公司内关联交易用的,对于HR的员工主数据没有相关此字段,所以从标准业务角度考虑,系统应该不会提供相关配置,所以出发点就要改成增强。下图是需要填充的字段值位置。
在原来项目做过把HR的身份证ID传到BP中,当时DEBUG标准程序/SHCM/RH_SYNC_BUPA_EMPL_SINGLE,此程序有个异步函数/SHCM/TRIGGER_BUPA_SYNC,只要在这个函数内打个外部断点,保存信息类型0002、0006、0009等相关信息类型就会进入。所以我们切入点就是这个函数开始,从这下面去定位找标准是否有标准的增强点。
/SHCM/CL_EMPLOYEE_INBOUND此类是HCM同步到BP的主要类,下图的340行是系统提供的标准增强点,找到增强点就是关心增强点的输入和输出参数,因为是供应商试图,所以关键字就要看vender。
因为上来就找关键字vender,所以没有在下图红色的里面写代码,直接是IF_FITV_VENDOR_SYNC~MODIFY_VENDOR_GENERAL_DATAModify vendor central data (LFA1),但是发现一直都不生效,在此处耽误很多时间,最后没办法只有去跟踪代码,看看什么时候把我的代码写的值给清空,此处关键类是CL_MD_BP_MAINTAIN,有兴趣的小伙伴可以去研究下。
后来才发现更新主数据主要是IF_FITV_VENDOR_SYNC~MODIFY_COMPLETE_DATAModify the complete table中完成,但是在此处又有两个坑,一个是如果需要更新某个字段,需要DATAX结构下需要更新的字段标记成X,这个估计做过bapi增强的人应该都知道,但是第二个就是更新这个供应商字段,同时需要更新四个字段才能同步到BP中,开始只是更新上面两个字段,后来debug发现还需要更新下面标记红色的两个字段。具体的代码可以参考下图:
PARTNER-FINSERV_DATA-COMMON-DATA-FSBP_CENTRL-VBUND
PARTNER-FINSERV_DATA-COMMON-DATAX-FSBP_CENTRL-VBUND
VENDOR-CENTRAL_DATA-CENTRAL-DATA-VBUND
VENDOR-CENTRAL_DATA-CENTRAL-DATAX-VBUND
下面是在debug过程中的一些记录,此处也可以看出,HCM同步到BP的主数据,代码基本都是写死的,没有可以配置映射字段关系的,BP后台的新逻辑非常复杂,所以此处的代码的结构都是结构套用结构,所以可以多看此处的代码,了解SAP对嵌套结构处理,可以学到很多ABAP基础功能。
备注:如果需要DEBUG一定设置外部断点,因为创建BP是个异步操作,所以内部断点无法进行。