1

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

截图 Tcode MIRO

供参考:

  • 我必须显示消息类型 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.

有任何想法吗?提前致谢。

4

1 回答 1

1

这不可能。无法从 BAdI 访问屏幕字段,因此您应该使用语句增强标准 PBO 代码CHAIN...ENDCHAIN或查找另一个用户出口/BAdI。

就个人而言,我建议您不要过度思考和过于复杂,只需使用:

MESSAGE 'Your Message' TYPE 'W' DISPLAY LIKE 'E'.

它将显示通常的错误消息,使屏幕字段可以自由输入。无论如何,在所有屏幕字段都有效之前,无论是否禁用它们, 发票都不会被保存。


PS 为什么不使用I_RBKPVMRM_HEADER_CHECK 提供的标准接口,如下所示:

IF i_rbkpv-xblnr = lwa_bkpf-xblnr AND sy-tcode = 'MIRO'.
 ...
ENDIF.

通过字段符号直接访问内存是不安全的,不应在不必要的地方使用。

于 2016-12-11T18:03:58.300 回答