在MIRO中使用BADI在错误消息之后激活字段DYNPRO

时间:2016-12-10 23:55:06

标签: sap abap

我正在通过BADI MRM_HEADER_CHECK在tx MIRO中开发验证,当已经使用字段“reference”时,我会显示一条消息。消息是“E”类型,这会禁用屏幕上的每个字段,但我无法恢复活动此字段,因为用户可以修复它。

documentation

仅供参考:

  • 我必须显示消息类型“E”,因为我想要阻止除了带有红色标签(imagen)的两个字段之外的每个字段。我看到人们的建议使用了这个:

  • 当我设置断点时,值LOOP AT SCREEN等于6000.

  • 在我的BADI代码CHAIN. fields: f1,f2,f3. MODULE <mod name>. ENDCHAIN. 中找不到我要禁用的字段名称。

    MESSAGE&lt;&gt;类型'''显示像'E'。

与标准程序类似,我无法修改BADI代码之外的代码。是关于PAI和PBO模块:

*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代码。

if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('swRoot.js').then(() => {
        console.log('registered');

        System.import('react');
        System.import('react-dom');
        System.import('a').then(({ a }) => console.log('value from a', a));
    }, err => console.log(err));
}

有什么想法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

我个人建议你不要过度思考和过度复杂化,只需使用:

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

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


附:为什么不使用MRM_HEADER_CHECK提供的标准接口I_RBKPV,如下所示:

IF i_rbkpv-xblnr = lwa_bkpf-xblnr AND SY-TCODE = 'MIRO'.
 ...
ENDIF.

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