在更改时动态填充选择屏幕参数

时间:2014-04-08 16:09:19

标签: sap abap

假设我有一个带有两个参数的选择屏幕块。我想根据用户在第一个参数中输入的内容动态填充第二个参数,例如通过查询表来查找参数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.

2 个答案:

答案 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 - 可能与您在选择屏幕事件中完全相同。然后,您将调用屏幕###< - 您的屏幕编号,以在屏幕上显示数据。没有任何代码可以解决这些问题,我可以提供帮助。