如何使用中间件将 Sales BOM 数据从 ERP 系统同步到 CRM 系统
在ERP使用事务码CS01创建一个BOM,类型选择5 - Sales BOM:
BOM的抬头维护material 1419,在BOM的component部分维护另外两个material 1421和1422。
保存BOM,会自动生成ID 2974,可以通过表MAST的字段STLAN查询。
在CRM创建一个下载请求:
成功下载到CRM之后,在CRM UI里打开ERP BOM抬头的product1419,能在assignment block"Set Components"里看到ERP里BOM的包含的另外两个material:
通过事务码SMW01能通过查看BDOC DNL_MAT_BOMS观察到具体下载到CRM的三个product的ID。
BOM下载的更多细节参考帮助文档.
我有如下一个CDS view, 这个view的数据来自CRMD_ORDERADM_H, 定义了一个名称为_statushelp的association, 指向了另一个CDS view Z_C_Status_Valuehelp.该view暴露了两个字段STATUS_KEY和STATUS_TEXT.
现在我的需求是:在ABAP代码里只需要一次读操作,既能读出主view里的guid字段,又能读出association view Z_C_Status_Valuehelp暴露出的两个字段STATUS_KEY和STATUS_TEXT。
解决方案
(1) 创建一个新的数据类型,里面包含了两个view的总共3个待读取字段。
(2) 使用如下代码读取数据:
DATA: lt_data TYPE tt_Data. SELECT guid, \_STATUSHELP-STATUS_KEY AS STATUS_KEY , \_STATUSHELP-STATUS_TEXT AS STATUS_TEXT FROM ZORDER_SYS_STATUS WHERE ZORDER_SYS_STATUS~GUID = 'FA163E8EAB031EE6A99F824537D112A4' AND ZORDER_SYS_STATUS~STAT = 'I1002' AND \_STATUSHELP-STATUS_KEY IS NOT NULL INTO TABLE @lt_data.
如果要获得一个function module的Where Used List,我们通常用的办法是使用ABAP workbench里提供的功能。
where used list显示结果如下:
但我接到一个任务,在结果列表里还需要显示出使用了指定的function module的代码所属的Package, Application Component和Software Component。
如下图所示:
因此我只能自己开发一个工具ZCL_CRM_PROD_API_WHERE_USED。执行class的run方法:
输入要查询的function module名称,执行即得结果。
工具类的源代码在我github上。
比如下图这个ABAP development studi里创建的角色是为了实现CDS view DEMO_CDS_AUTH_LIT_PFCG的权限控制,里面使用到了权限对象S_CARRID.
假设现在我有一个需求:我想知道用户名WANGJER是否具有该权限对象的字段s_carrid的显示(03)权限?
在事务码SU01里,我只能查看WANGJER这个用户到底被赋予了哪些PFCG角色。权限对象不是直接分配给用户的,而是通过PFCG角色作为一个中间层。
可以通过查表AGR_USERS得到一个指定的用户分配了哪些PFCG角色。
所以题目开头的需求就转化为这个问题:哪个PFCG角色分配了权限对象S_CARRID?
使用事务码SUIM根据权限对象查询PFCG角色:
下列14个PFCG角色都分配了权限对象S_CARRID:
选择其中一个双击,比如SAP_QAP_DEVELOPER:
上图意味着如果一个用户被分配了PFCG角色SAP_QAP_DEVELOPER,这个用户就拥有了权限对象S_CARRID上定义的Create,Change和Display的权限:
- 点赞
- 收藏
- 关注作者
评论(0)