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
,您使用一个包含所有自定义屏幕字段的框创建了该子屏幕
要隐藏自定义屏幕字段,必须:
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.