通过对话屏幕动态更新行内容
Dynamically update row contents via dialog screen
我需要一些帮助来解决以下问题。我目前有一个对话框屏幕,其中包含一个用户可以在其中键入数字的字段。这个数字对应于我创建的数据库 table 中的一个 ID 字段(使用 se/11)。我想在第二个屏幕上显示具有相应 ID 的所有字段的内容(因此只有 table 的一行)。用户还应该能够编辑字段中的信息,保存后,这些更改应该在 table 本身中可见。归结为我想通过对话框屏幕动态更改返回行的内容。我知道我必须使用 Table 控件,但除此之外我不知所措(我对 ABAP 很陌生)。
这是table
屏幕 1,用户可以在 table
中输入对应于 SEQNR
的数字
当在第一屏按F8时,我想转到第二屏SEQNR = 1
的人的信息,换句话说,应该只出现这一行:
用户应该可以编辑此行中的信息。当他点击“保存”时,编辑的信息应该在 table 本身中更新。
到目前为止,我只制作了一个标准的第二个屏幕,其中我在 Screen Painter 中为上面的 table 添加了一个 Table 控件。我将此控件添加到我的 DIALOG_TOP:
PROGRAM TAAK1.
DATA: OK_CODE TYPE sy-ucomm,
ls_table TYPE TABEL1,
SEQNR_TEXTFIELD TYPE i,
TXT_STATUS(25) TYPE c,
it_table LIKE TABEL1 OCCURS 0 WITH HEADER LINE.
TABLES: TABEL1.
CONTROLS: TABLE_CONTROL TYPE TABLEVIEW USING SCREEN 200.
除了标准的 PBO 和 PAI 模块,我没有屏幕 2 的代码。
屏幕 1 的代码如下所示。
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'CHECKID'.
SELECT SINGLE * FROM TABEL1 WHERE SEQNR EQ SEQNR_TEXTFIELD.
IF sy-subrc EQ 0.
TXT_STATUS = 'ID BESTAAT'.
ELSE.
TXT_STATUS = 'ID BESTAAT NIET'.
ENDIF.
IF TXT_STATUS = 'ID BESTAAT'.
SELECT * FROM TABEL1 INTO ls_table WHERE SEQNR EQ SEQNR_TEXTFIELD.
ENDSELECT.
ENDIF.
WHEN 'EXEC'.
CLEAR OK_CODE.
SET SCREEN 200.
LEAVE SCREEN.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
我主要检查 table 中是否存在 Seqnr。如果是这样,我将相应的行存储在我在 DIALOG_TOP.
中定义的本地结构中
使用 SM30 视图可能更容易、更省时。您可以创建自定义事务来维护正确的授权。此外,您可以根据自己的喜好调整屏幕(参见生成的函数组的代码)。
更多信息在这里:
我需要一些帮助来解决以下问题。我目前有一个对话框屏幕,其中包含一个用户可以在其中键入数字的字段。这个数字对应于我创建的数据库 table 中的一个 ID 字段(使用 se/11)。我想在第二个屏幕上显示具有相应 ID 的所有字段的内容(因此只有 table 的一行)。用户还应该能够编辑字段中的信息,保存后,这些更改应该在 table 本身中可见。归结为我想通过对话框屏幕动态更改返回行的内容。我知道我必须使用 Table 控件,但除此之外我不知所措(我对 ABAP 很陌生)。
这是table
屏幕 1,用户可以在 table
中输入对应于SEQNR
的数字
当在第一屏按F8时,我想转到第二屏SEQNR = 1
的人的信息,换句话说,应该只出现这一行:
用户应该可以编辑此行中的信息。当他点击“保存”时,编辑的信息应该在 table 本身中更新。
到目前为止,我只制作了一个标准的第二个屏幕,其中我在 Screen Painter 中为上面的 table 添加了一个 Table 控件。我将此控件添加到我的 DIALOG_TOP:
PROGRAM TAAK1.
DATA: OK_CODE TYPE sy-ucomm,
ls_table TYPE TABEL1,
SEQNR_TEXTFIELD TYPE i,
TXT_STATUS(25) TYPE c,
it_table LIKE TABEL1 OCCURS 0 WITH HEADER LINE.
TABLES: TABEL1.
CONTROLS: TABLE_CONTROL TYPE TABLEVIEW USING SCREEN 200.
除了标准的 PBO 和 PAI 模块,我没有屏幕 2 的代码。 屏幕 1 的代码如下所示。
MODULE USER_COMMAND_0100 INPUT.
CASE OK_CODE.
WHEN 'CHECKID'.
SELECT SINGLE * FROM TABEL1 WHERE SEQNR EQ SEQNR_TEXTFIELD.
IF sy-subrc EQ 0.
TXT_STATUS = 'ID BESTAAT'.
ELSE.
TXT_STATUS = 'ID BESTAAT NIET'.
ENDIF.
IF TXT_STATUS = 'ID BESTAAT'.
SELECT * FROM TABEL1 INTO ls_table WHERE SEQNR EQ SEQNR_TEXTFIELD.
ENDSELECT.
ENDIF.
WHEN 'EXEC'.
CLEAR OK_CODE.
SET SCREEN 200.
LEAVE SCREEN.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
我主要检查 table 中是否存在 Seqnr。如果是这样,我将相应的行存储在我在 DIALOG_TOP.
中定义的本地结构中使用 SM30 视图可能更容易、更省时。您可以创建自定义事务来维护正确的授权。此外,您可以根据自己的喜好调整屏幕(参见生成的函数组的代码)。
更多信息在这里: