SAP HCM 逻辑数据 动态加载INFOTYPES

NFOTYPES如何与$rinfo关联关系$!!!

 前几天在群里面看到讨论"请教大家,一般使用逻辑数据库pnp 的程序,需要读取的infotype 在程序中用关键字infotypes 声明,但是我发现有些程序读取infotype 居然可以是动态的,大家知道这个额外控制的机理是什么吗?"周末有找到一个查找CODE_SCANNER程序可以找变量在那个包下面引用,就随便尝试找下$rinfo$内表在什么地方赋值。

 

1 找到变量的位置,但是无法找到什么地方给内表rinfo赋值。双击变量rinfo都找不到变量被引用的位置。所以开始就陷入无法推进的过程。

图片

2 既然这个地方有值,那肯定就是逻辑数据库的时候就会赋值,所以后来掉头去研究PNP逻辑数据库,后来发现这个判断是错误的。于是就换个思路,从中国核算工资的驱动程序开始。一直F6,不进入源代码分析,先看看整个代码流程。

图片

图片

图片

3 当代码进入如下位置的时候,只要这个infotypes执行一次,内表rinfo就会增加一条,原来内表rinfo的赋值是这个关键字赋值的,然后我就一直debug看,内表有72条数据,也就是有72个信息类型,那就是代码中infotypes固定有72个,不是动态的。

图片

图片

图片

图片

图片

图片

图片

图片

4 那这个动态的概念是如何而来的呢,后来发现,代码先用inftypes枚举出所有需要的信息类型,然后有个配置表是读取schema里面的信息类型集合,然后去匹配,如果没找到mode就是N,举例说明下:例如函数P0416,默认在inftypes中已经申明,所以rinfo就存在0416的数据,但是我schema中注释P0416的函数,那么内表infty就不会存在,循环rinfo内表的时候如果在infty内表找到数据,那么rinfo-mode=y,否则就是N,这就是系统的动态的逻辑。

图片

图片

5 那现在来分析分析infty这个内表数据的来源,先在SCHEMA中注释P0416

图片

图片

图片

图片

发现SAP有个RP-imp-c2-ps的宏,这里面包含inftype的内表,可以通过程序RPCLSTPS查询簇表里面的具体值。

图片

图片

没有注释P0416的时候

图片

注释P0416以后

图片

所以这就是所谓的动态加载信息类型的具体逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值