假设我有一个带有两个参数的选择屏幕块。我想根据用户在第一个参数中输入的内容动态填充第二个参数,例如通过查询表来查找参数1中关键字段的预期值。
作为一个例子,假设我有一个程序为订单号(p_aufnr
)和WBS元素(p_wbs
)的组合做了一些事情。我可以从AUFK表上的PSPEL字段中确定其中一个,而不是要求用户提供两者。但是,我仍然希望在输入订单号后向用户显示此字段,以便他可以验证WBS元素是否正确。
我已设法通过使用AT SELECTION SCREEN ON p_aufnr
事件为p_wbs
分配值来实现此目的。用户按Enter键时将处理此事件。但是,我只能让它工作一次。因此,如果用户输入订单号,从检索到的WBS元素中意识到他犯了错误并更改了它,则第二个参数永远不会改变。即使在调试器中处理AT SELECTION SCREEN
事件,也不会更新参数。
我不应该在我的场景中使用此事件吗?如果是这样,我将如何实现这种动态选择屏幕?
忘记添加代码示例。以下报告说明了我的问题:在p_netw
中输入值并按Enter后,p_wbs将填充值1.但是,如果再次按Enter键,则会处理AT SELECTION-SCREEN ON
例程但p_wbs的值未更新,而lv_count
是。
DATA: lv_count TYPE i.
SELECTION-SCREEN BEGIN OF BLOCK main.
PARAMETERS: p_netw TYPE aufnr OBLIGATORY MODIF ID auf.
PARAMETERS: p_wbs TYPE i MODIF ID psp.
SELECTION-SCREEN END OF BLOCK main.
AT SELECTION-SCREEN ON p_netw.
ADD 1 TO lv_count.
p_wbs = lv_count.
START-OF-SELECTION.
PERFORM main.
FORM main.
WRITE: 'The value reached ', lv_count.
ENDFORM.
答案 0 :(得分:3)
如果更新字段特定块中的字段,显然数据不会写回屏幕。如果您将字段更新从AT SELECTION-SCREEN ON p_netw
移至全局AT SELECTION-SCREEN
事件,则可以正常运行。不要问我为什么 - 这似乎是一个无证的系统行为......
DATA: lv_count TYPE i.
SELECTION-SCREEN BEGIN OF BLOCK main.
PARAMETERS: p_netw TYPE aufnr OBLIGATORY MODIF ID auf.
PARAMETERS: p_wbs TYPE i MODIF ID psp.
SELECTION-SCREEN END OF BLOCK main.
AT SELECTION-SCREEN ON p_netw.
ADD 1 TO lv_count.
AT SELECTION-SCREEN.
p_wbs = lv_count.
答案 1 :(得分:0)
您需要在屏幕上使用PAI(输入后处理)模块,然后获取新的p_aufnr并找到相应的p_wbs - 可能与您在选择屏幕事件中完全相同。然后,您将调用屏幕###< - 您的屏幕编号,以在屏幕上显示数据。没有任何代码可以解决这些问题,我可以提供帮助。