我正在写一个报告,其中有两个“选项卡”组的单选按钮。根据它们的值,我必须将某些屏幕字段设置为不显示,否则,请正确显示它们。
我可以通过使用事件at selection-screen output.
使它完美地工作,但是在使用at selection-screen on radiobutton group tab
时它却无法工作-要测试一个,我要注释掉另一个。
两者中的代码完全相同,所以有人可以帮助我了解这两个事件的区别,以便我理解为什么只有一个起作用吗?
以下事件,只有第二个有效。
at selection-screen on radiobutton group tab.
go_controller->modify_screen( ).
at selection-screen output.
go_controller->modify_screen( ).
它们都调用相同的方法
method modify_screen.
loop at screen.
case screen-group1.
when 'TAB'.
if use_otab = abap_false.
screen-invisible = 1.
screen-active = 0.
screen-input = 0.
p_int = abap_false.
p_nat = abap_false.
free p_table[].
else.
screen-active = 1.
screen-invisible = 0.
screen-input = 1.
endif.
modify screen.
endcase.
endloop.
endmethod.
通过调试,我看到两个事件都可以正确到达,但是,只有第二个事件有效。
答案 0 :(得分:2)
因为它的设计如下:AT SELECTION-SCREEN ON...
是一个“输入后处理”(PAI)事件。 PAI旨在对用户操作做出反应。在PAI结束时,确定下一个dynpro(即使可能与实际的相同),然后处理dynpro的“输出前处理”(PBO)。这是为用户准备的屏幕元素。仅在PBO中,OpenCvSharp
表的修改会影响屏幕元素的可见性或可编辑性。
因此,在报告中,您应该使用SCREEN
影响参数和选择选项的可见性或可编辑性。