!--a11y-->

ユーザと Dynpro とのインタラクションのあとに、アクションが行われたときのカーソルの位置を判別する必要がある場合があります。これは、ユーザが選択機能 (F2 またはマウスのダブルクリック) を選択した場合に特に重要です。
カーソルの位置を検出するには、次の命令を使用します。
GET CURSOR FIELD <f> [OFFSET <off>]
[LINE <lin>]
[VALUE <val>]
[LENGTH <len>].
この命令では、ユーザのアクション時にカーソルが置かれていた Dynpro エレメントの名称が移送されます。カーソルがいずれかの項目に置かれていた場合は SY-SUBRC が 0 に設定され、それ以外の場合は 4 に設定されます。
GET CURSOR 命令のオプションには、次の機能があります。
キ OFFSET を指定した場合、Dynpro エレメント内のカーソル位置が変数 <off> に書き込まれます。
キ LINE では、カーソルがテーブルコントロールに置かれている場合に、テーブルの行番号が変数 <lin> に書き込まれます。カーソルがテーブルコントロールに置かれていなかい場合、<lin> はゼロに設定されます。
キ VALUE では、Dynpro 項目の内容が表示形式で ( つまりそのすべての書式設定文字と共に) 文字列として変数<val> に書き込まれます。
キ LENGTH では、Dynpro 項目の表示長が変数 <len> に書き込まれます。

Dynpro 上のカーソル位置
PROGRAM DEMO_DYNPRO_GET_CURSOR.
DATA: OK_CODE LIKE SY-UCOMM,
SAVE_OK LIKE OK_CODE.
DATA: INPUT_OUTPUT(20) TYPE C,
FLD(20) TYPE C,
OFF TYPE I,
VAL(20) TYPE C,
LEN TYPE
I.
CALL SCREEN 100.
MODULE INIT_SCREEN_0100 OUTPUT.
SET
PF-STATUS 'STATUS_100'.
ENDMODULE.
MODULE USER_COMMAND_0100 INPUT.
SAVE_OK =
OK_CODE.
CLEAR
OK_CODE.
CASE
SAVE_OK.
WHEN
'CANCEL'.
LEAVE
PROGRAM.
WHEN
'SELE'.
GET CURSOR
FIELD FLD OFFSET OFF VALUE VAL LENGTH LEN.
ENDCASE.
ENDMODULE.
Dynpro 100 の次画面 ( 静的定義) は同じ Dynpro です。このレイアウトは次のようなものです。
エレメント一覧の該当の部分は次のとおりです。
|
名称 |
型 |
書式 |
テキスト |
機能コード |
|
TEXT1 |
テキスト |
|
入力 |
|
|
INPUT_OUTPUT |
入出力 |
CHAR |
|
|
|
TEXT2 |
テキスト |
|
名称 |
|
|
FLD |
入出力 |
CHAR |
|
|
|
TEXT3 |
テキスト |
|
オフセット |
|
|
OFF |
入出力 |
INT4 |
|
|
|
TEXT4 |
テキスト |
|
内容 |
|
|
VAL |
入出力 |
CHAR |
|
|
|
TEXT5 |
テキスト |
|
長さ |
|
|
LEN |
入出力 |
INT4 |
|
|
|
EXIT_BUTTTON |
押 |
|
取消 |
CANCEL |
|
OK_CODE |
OK |
OK |
|
|
入出力項目の入力属性は、INPUT_OUTPUT 項目以外はすべて無効に設定されています。
この Dynpro 制御ロジックは次のとおりです。
PROCESS BEFORE OUTPUT.
MODULE
INIT_SCREEN_0100.
PROCESS AFTER INPUT.
MODULE
USER_COMMAND_0100.
モジュール
INIT_SCREEN_100
では、PBO
イベント時に GUI
ステータス STATUS_100
が設定されます。このステータスでは、取消アイコン
(F12)
が機能コード CANCEL
で有効に設定され、機能キー F2
が機能コード SELE
で有効になっています。
プログラムを実行すると、ユーザは任意の Dynpro エレメントをダブルクリックによって選択するか、または機能コード SELE に接続された任意の Dynpro エレメントを使用することができます。Dynpro 上の出力項目にはカーソルの位置が戻ります。