●目的●
通过客制化自开发本地件功能平台来调用MD01跑MRP时,界面上用户出口码和用户出口参数想默认一个值,并且不能修改。
●步骤●
看到这个需求,我们很明确的是,屏幕不可编辑,那是需要在PBO里进行控制的,包括赋值亦如此。但是,我们要考虑一个问题,就是只有在MD01被平台调用的这个时候才赋值并且不可编辑,其他正常情况使用MD01时,是可编辑的。基于此,我这边提供几种办法来处理。
01
第一种
使用系统参数SY-CALLD来判断MD01是被调用的还是独立运行的(为X时代表被调用,空值是独立运行)。找到MD01的屏幕,在PBO里,随便找个合适的位置就可以编写4代增强了。
本示例中我们选择在第一个Module下的Subroutine form:READ_T450N中进行增强
虽然这种方法能解决,但是有一个缺陷。那么是什么缺陷呢,大家想想,既然我自开发平台能来调用MD01,那系统标准的程序有没有来调用的?万一有呢,那这个赋值不是就影响了标准程序的运算结果?针对以上这种思考,我想了另外两种办法。
02
第二种
通过Export/Import Memory给标识的方式来判定。在我们调用的程序里Export一个标识到Memory中,然后在被调用程序(MD01)中Import这个标识,有值就走赋值和不可编辑逻辑,否则什么都不操作。
03
第三种
我们对MD01进行tcode包装,创建一个ZMD01的tcode。
在调用程序里,调用ZMD01这个tcode,在被调用程序中通过tcode来判断。
但是通过上图,我们发现一个问题,即使外层包装了新tcode,但是sy-tcode的值还是MD01,怎么破?
其实是有个办法获取到原始的tcode,程序中可以使用此代码获取
CALL 'GET_PARAM_TCOD' ID 'PTCOD' FIELD lv_tcode.
这种办法做出来增强之后,即使不通过平台调用,ZMD01也可以单独使用,还能跟MD01区分开。
END
图文来源:成旭平
图文编辑:Esther