Abap 如何在屏幕退出中有条件地隐藏自定义字段?(CMOD)

Abap 如何在屏幕退出中有条件地隐藏自定义字段?(CMOD),abap,dynpro,Abap,Dynpro,我的任务是定制ME33K交易的标题详细信息屏幕,目标是添加一个包含新字段的框,只有当协议类型是我使用交易SPRO定义的协议类型时,才会出现新字段(例如:协议类型ABC) 我开始使用CMOD事务对该屏幕进行增强,我创建了一个带有硬编码输入值的虚拟框和字段,它工作正常 我的下一步是,仅当协议类型为ABC时,才显示这些新字段,但我找不到正确的方法 我尝试过做一些屏幕循环编程,并停用框和/或字段,但唯一停用的是已经存在的标准框和/或字段,我添加的增强功能不受影响 编辑: 我使用的增强功能是“MM06E

我的任务是定制
ME33K
交易的标题详细信息屏幕,目标是添加一个包含新字段的框,只有当协议类型是我使用交易
SPRO
定义的协议类型时,才会出现新字段(例如:协议类型
ABC

我开始使用
CMOD
事务对该屏幕进行增强,我创建了一个带有硬编码输入值的虚拟框和字段,它工作正常

我的下一步是,仅当协议类型为ABC时,才显示这些新字段,但我找不到正确的方法

我尝试过做一些屏幕循环编程,并停用框和/或字段,但唯一停用的是已经存在的标准框和/或字段,我添加的增强功能不受影响

编辑:

  • 我使用的增强功能是“MM06E005”
  • 我在“EXIT_SAPMM06E_006”用户出口中提供的include中编写了以下屏幕循环代码:
    loop at screen.
      if screen-name = 'CUSTOM_FIELDS'.
        screen-active = 0.
        modify screen.
      endif.
    endloop.
    

增强功能
MM06E005
指的是子屏幕
SAPLXM06 0101
,您使用一个包含所有自定义屏幕字段的框创建了该子屏幕

要隐藏自定义屏幕字段,必须:

  • 调用PBO(输出前处理)模块,在子屏幕(包含屏幕字段的子屏幕)的流逻辑中完成:
  • 在include
    LXM06O01
    (首选)中,执行以下操作:

  • 请在你的问题中添加空格,以便人们更容易理解-我是为你做的。请提供您使用的标准增强的名称,您为“屏幕循环”执行的确切代码,以及您在何处执行的代码。遗憾的是,我已经完成了这些步骤,并尝试在自定义屏幕的PBO中输入该代码,但什么都没有发生。它不可能不起作用。除非您的条件总是错误的,并且修改屏幕从未完成(通过调试很容易看到)。为了测试它,我已更改为代码以完全隐藏屏幕中的所有内容,代码现在看起来如下:
    在屏幕上循环。屏幕活动=0。修改屏幕。endloop。
    问题是,屏幕中的所有元素都消失了,除了通过增强添加的元素。这意味着您是在标准dynpro的流逻辑中完成的,而不是在自定义dynpro的流逻辑中完成的(仅包含自定义屏幕字段的流逻辑)。看看我说的:“在你子屏幕的流程逻辑中完成”。我想问一下在哪里可以找到它,因为我认为我写的是我自定义屏幕的那个。
    PROCESS BEFORE OUTPUT.
      ...
      MODULE modify_screen_field_attributes.
      ...
    PROCESS AFTER INPUT.
      ...
    
    MODULE modify_screen_field_attributes OUTPUT.
      LOOP AT SCREEN.
        IF screen-name = 'CUSTOM_FIELDS'. " name of one screen field
          screen-active = 0.              " hide the screen field
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.
    ENDMODULE.