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

Abap 更改时动态填充选择屏幕参数,abap,sap-selection-screens,Abap,Sap Selection Screens,假设我有一个带有两个参数的选择屏幕块。我希望根据用户在第一个参数中输入的内容动态填充第二个参数,例如通过查询表来查找参数1中键字段的期望值 例如,假设我有一个程序,它对订单号(p_aufnr)和WBS元素(p_WBS)的组合执行某些操作。我可以从AUFK表上的PSPEL字段中确定其中一个,而不是要求用户提供这两个选项。但是,在用户输入订单号后,我仍然希望向用户显示此字段,以便用户可以验证WBS元素是否正确 我通过使用p_aufnr事件上的选择屏幕上的为p_wbs分配一个值来实现这一点。当用户按e

假设我有一个带有两个参数的选择屏幕块。我希望根据用户在第一个参数中输入的内容动态填充第二个参数,例如通过查询表来查找参数1中键字段的期望值

例如,假设我有一个程序,它对订单号(
p_aufnr
)和WBS元素(
p_WBS
)的组合执行某些操作。我可以从AUFK表上的PSPEL字段中确定其中一个,而不是要求用户提供这两个选项。但是,在用户输入订单号后,我仍然希望向用户显示此字段,以便用户可以验证WBS元素是否正确

我通过使用p_aufnr事件上的选择屏幕上的
为p_wbs
分配一个值来实现这一点。当用户按enter键时,将处理此事件。然而,我只能让它工作一次。因此,如果用户输入订单号,从检索到的WBS元素中意识到他犯了错误并对其进行了更改,则第二个参数永远不会更改。即使在调试器中处理了选择屏幕上的
事件,参数也不会更新

我不应该在我的场景中使用此事件吗?如果是这样,我将如何实现这种动态选择屏幕

忘记添加代码示例。以下报告说明了我的问题:在
p_netw
中输入一个值并按enter键后,p_wbs将填充值1。但是,如果再次按enter键,则会处理
例程上的选择屏幕上的
,但p_wbs的值不会更新,而
lv_计数
会更新

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.

您需要在屏幕上使用PAI(输入后处理)模块,该模块随后接受新的p_aufnr并找到适当的p_wbs-可能与您的at选择屏幕事件完全相同。然后,您将调用SCREEN####您需要在屏幕上使用PAI(输入后处理)模块,该模块随后接受新的p#U aufnr并找到适当的p#U wbs-可能与您的at选择屏幕事件完全相同。然后,您将调用SCREEN####显然,如果您更新字段特定块中的字段,数据不会写回屏幕。如果将字段更新从p_netw上的选择屏幕上的
移动到全局
选择屏幕上的
事件,它将起作用。不过,不要问我为什么-这似乎是一个未记录的系统行为案例

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.

显然,如果更新字段特定块中的字段,数据不会写回屏幕。如果将字段更新从p_netw上的选择屏幕上的
移动到全局
选择屏幕上的
事件,它将起作用。不过,不要问我为什么-这似乎是一个未记录的系统行为案例

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.

请您添加一个演示该问题的最小工作示例,好吗?这将使您更容易理解所面临的问题并提供答案。添加了示例,我希望这充分说明了问题。您能否添加一个演示该问题的最小工作示例?这将使您更容易理解所面临的问题并提供答案。添加了示例,我希望这充分说明了问题。我猜x上的
事件不适用于此用例。不幸的是,这并没有像您所说的那样被记录下来。我想x上的
事件并不适用于这个用例。不幸的是,这并没有像你说的那样被记录下来。