次の問題を解決するには、何か助けが必要です。私は現在、ユーザーが番号を入力できるフィールドを持つ1つのダイアログ画面を持っています。この番号は、私が作成したデータベーステーブルのIDフィールド(se/11を使用)に対応しています。私は2番目の画面に対応するIDを持つすべてのフィールドの内容を表示したい(テーブルの1行だけなので)。また、ユーザーはフィールド内の情報を編集できる必要があります。保存した後は、変更内容を表自体に表示する必要があります。それは私が動的に返された行の内容をダイアログ画面を通して変更したいということです。私はテーブルコントロールを使用する必要があることを知っていますが、それを離れて私は損失に苦しんでいます(私はABAPにとってかなり新しいです)。ダイアログ画面で行の内容を動的に更新する
- Here's the table
- Screen 1 where a user can input a number that corresponds to "Seqnr" in the table。画面1にF8キーを押すと
、私はSeqnr = 1の人の情報と第2のスクリーンに行きたい、言い換えれば、これだけの行が表示されます:link。ユーザーはこの行の情報を編集できる必要があります。 「保存」をクリックすると、編集した情報をテーブル自体で更新する必要があります。
これまでのところ、私はScreen Painterで上記の表の表コントロールを追加した標準的な第2画面のみを作成しました。私は私の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.
基本的には、Seqnrがテーブルに存在するかどうかを確認します。もしそうなら、私はDIALOG_TOPで定義したローカル構造体に対応する行を格納します。
いくつかの関連するコードを表示してください。使用する用語の中には、さまざまな意味で異なる意味を持っているものがあります。 –
あなたの質問にその画像を埋め込むことができます。データベーステーブル、内部テーブル、テーブルコントロールなどの用語を使用して質問を言い換えて、コードを表示してください。 –
@GerdCastan申し訳ありません、そのコメントを削除するのを忘れました。私は自分の投稿を編集し、いくつかのコードを提供しました。 – RobVH