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以后
所以这就是所谓的动态加载信息类型的具体逻辑。
标签:逻辑,动态,内表,P0416,rinfo,赋值,SAP,INFOTYPES,HCM From: https://blog.csdn.net/wl8511/article/details/137412484