我正在通过BADI MRM_HEADER_CHECK在tx MIRO中开发一个验证,当已经使用了“引用”字段时,会显示一条消息。该消息的类型为E,这会禁用屏幕上的每个字段,因此用户无法返回该字段以固定其值。
FYI:
我必须显示消息类型E,因为我想阻止除以红色圈起来的两个字段以外的所有字段。我看到人们的建议使用此:
如果我将断点SY-DINNR
等于6000。
在我的BADI代码LOOP AT SCREEN
中看不到我要禁用的字段名称。
MESSAGE <msg> TYPE 'S' DISPLAY LIKE 'E'
也不起作用
我无法修改超出我BADI代码的代码,例如在PAI和PBO模块中:
CHAIN.
fields: f1,f2,f3.
MODULE <mod name>.
ENDCHAIN.
这是我的BADI代码:
*This field symbol have the values of inputs.
ASSIGN ('(SAPLMR1M)RBKPV') TO <fs_rbkpv>.
IF <fs_rbkpv>-XBLNR = lwa_bkpf-xblnr.
MESSAGE lc_message TYPE 'E'.
ENDIF.
有什么想法吗?预先感谢。
不可能。无法从BAdI访问屏幕字段,因此,您应该使用CHAIN...ENDCHAIN
语句enhance标准PBO代码,或找到另一个用户出口/ BAdI。
我个人建议您不要过度思考和过于复杂,而只需使用:
MESSAGE 'Your Message' TYPE 'W' DISPLAY LIKE 'E'.
它将显示通常的错误消息,使屏幕字段可以自由输入。无论如何,除非all屏幕字段有效,否则无论发票是否被禁用,发票都不会被保存。附言为什么不像这样使用MRM_HEADER_CHECK提供的标准接口I_RBKPV
:
IF i_rbkpv-xblnr = lwa_bkpf-xblnr AND sy-tcode = 'MIRO'.
...
ENDIF.
通过字段符号直接访问内存是不安全的,不应在不需要时使用。