我正在通过BADI MRM_HEADER_CHECK在tx中开发一个验证,当字段"reference“已经被使用时,我会显示一条消息。消息的类型为E,这将禁用屏幕上的每个字段,因此用户无法返回到该字段来修复其值。

FYI:
SY-DINNR等于6000。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.有什么想法吗?提前谢谢。
发布于 2016-12-11 18:03:58
这是不可能的。无法从BAdI访问屏幕字段,因此您应该使用CHAIN...ENDCHAIN语句增强标准PBO代码,或者找到另一个用户exit/BAdI。
就我个人而言,我建议你不要想得太多,不要过于复杂,而只是简单地使用:
MESSAGE 'Your Message' TYPE 'W' DISPLAY LIKE 'E'.它将显示通常的错误信息,留下屏幕字段自由输入。无论如何,发票将不会保存,直到所有的屏幕字段将是有效的,无论他们是否禁用。
为什么不使用由I_RBKPV提供的标准接口MRM_HEADER_CHECK:
IF i_rbkpv-xblnr = lwa_bkpf-xblnr AND sy-tcode = 'MIRO'.
...
ENDIF.通过字段符号直接访问内存是不安全的,不应该在没有必要的地方使用。
https://stackoverflow.com/questions/41081575
复制相似问题