選択画面について
選択画面はプログラム実行時に実行ユーザーが条件を入れたりする画面。
例えばプログラムを起動→実行条件を指定(会社コードなど)→プログラムを実行→実行結果の表示
この実行条件を指定する画面のこと。
こういった画面はDynproと呼ばれたりする。
Dynproを使用できるプログラムタイプは「実行可能プログラム」「モジュールプールプログラム」「汎用グループ」の3つだ。
Dynproは複数使用することも可能。
Dynproは直接書くことも可能だが、一部のABAP Keywordを使用すると裏で自動的に作ってくれる。
自動的に作ってくれるのは主に以下のKeyword。
・選択画面を作成
PARAMETERS
SELECT-OPTIONS
・結果画面を作成
WRITE
PARAMETERS
PARAMETERSは「DATA」などと同じようにデータオブジェクトを作ることができるABAP Keywordだ。
「DATA」などとの違いは、データオブジェクトを作ると同時に、選択画面まで作れるという点だ。
このPARAMETERSで作れる選択画面の入力項目は基本的に単一入力のものとなる。
主な使い方は次の通り。
PARAMETERS データオブジェクト名 TYPE データ型.
PARAMETERSを使うときは以下のような点を覚えておこう。
・作成するデータオブジェクトの名称は最長8文字まで。
・TYPEで型を指定しない場合、TYPE C,長さ1となる。
・入力フィールドは最長で45。それ以上はスクロールすることで見えるようになり、設定できないわけではない。
・フィールドラベル(実行画面で表示するテキスト)は最大30。
・TYPEの後ろをABAPディクショナリに登録されているデータ型を使用することでそのデータ型のF4ヘルプを使用することが可能。
・TYPEではなくLIKE データオブジェクト名とすることで指定したデータオブジェクトのデータ型などを参照することが可能。
・LIKE ( 名称 )とすることで、動的に名称に指定したものを参照することが可能。例えば、データオブジェクトAを事前に作成し、データオブジェクトAが「テーブルA-商品名」という値の場合、LIKE ( データオブジェクトA )とすると「テーブルA-商品名」と同じデータ型になる。
◇オプションについて
PARAMETERSには以下のようなオプションが存在する。
使用方法は、基本的にどれもデータ型の後ろにそのまま書けばよいので簡単だ。
・AS CHECKBOX
選択項目をチェックボックスにすることが可能。
デフォルトでチェックを入れた状態にしたい場合は後ろに「DEFAULT ‘X’」と書くことで可能。
・RADIOBUTTON GROUP
選択項目をラジオボタンにすることが可能。
またそのラジオボタンのグループ分けもこれで行うことが可能だ。
デフォルトでチェックを入れたい場合、CHECKBOXと同様に「DEFAULT X」と書くことで可能。
使い方は次の通り。
PARAMETERS: データオブジェクト名 RADIOBUTTON GROUP ラジオボタングループ名,
データオブジェクト名 RADIOBUTTON GROUP ラジオボタングループ名.
・OBLIGATORY
選択項目を必須入力にすることが可能。
・NO-DISPLAY
選択項目を選択画面に表示しない。
SUBMITなどを使用してプログラムを呼び出す際に使用することがある。
・VISIBLE LENGTH N.(Nは任意の数値)
選択項目の表示する長さを変更できる。
Nで指定した数値の長さで表示することが可能だが、45より大きい数字の場合などは無効となる。
・AS LISTBOX
選択項目をドロップダウンのリストにすることが可能。
SELECT-OPTIONS
SELECT-OPTIONSはPARAMETERSと同様に選択画面を自動で作成することが可能だが、こちらは複数入力可能な入力項目を作ることが可能だ。
また、PARAMETERSがデータオブジェクトを作成するのに対し、こちらはRange Tableという少し特殊な内部テーブルを作成する。
☆SELECT-OPTIONSはヘッダ付きの内部テーブルという特殊な形で作成される。
プログラム中で利用する際(データの存在チェックやテーブルごと値渡しする場合など)は変数名の後ろに [] を必ずつけるようにしよう。
(この[]はヘッダではなく中身の部分を参照するという意味。)
Range Table
Range Tableは「Sign」「Option」「Low」「High」の4つのフィールドで構成される内部テーブル。
それぞれのフィールドは次のような特徴がある。
・Sign
データ型:C
長さ :1
格納される値:I or E
Iの場合は含む、Eの場合は含まないとなる
・Option
データ型:C
長さ :2
格納される値:各種演算子(EQ(等しい)やNE(等しくない)、NP(パターン外)など)
よく使用されるのは「EQ」「NE」「CP」「BT」
・Low
データ型:作成時に指定するものによって異なる
長さ :作成時に指定するものによって異なる
格納される値:選択画面で入力された値
・High
データ型:作成時に指定するものによって異なる
長さ :作成時に指定するものによって異なる
格納される値:選択画面で入力された値
それぞれについては以下のようなイメージ。
それぞれ以下のような中身となっている。
・Range Table A→100
・Range Table B→50以外
・Range Table C→1*
・Range Table D→100から500の間
プログラム中でどのように使用するかは次の通り。
SELECTなどで条件を指定する際、データオブジェクトであれば
WHERE コンポーネント名 = 条件にするデータオブジェクト.
となるが、Range Tableの場合は
WHERE コンポーネント名 IN 条件にするRange Table.
となる。
このような内部テーブルがあった場合に、それぞれRange Tableを使用してSELECTすると次のようになる。
・Range Table A
SELECT 商品名
値段
FROM 内部テーブルA
INTO TABLE 内部テーブルB
WHERE 値段 IN Range Table A.
→内部テーブルBには商品名:コーラ、値段:100のレコードのみが入る。
・Range Table B
SELECT 商品名
値段
FROM 内部テーブルA
INTO TABLE 内部テーブルB
WHERE 値段 IN Range Table B.
→内部テーブルBには内部テーブルAの全レコードが入る。
・Range Table C
SELECT 商品名
値段
FROM 内部テーブルA
INTO TABLE 内部テーブルB
WHERE 値段 IN Range Table C.
→内部テーブルBには商品名:ポテト、値段:150のレコードと商品名:コーラ、値段:100のレコードが入る。
・Range Table D
SELECT 商品名
値段
FROM 内部テーブルA
INTO TABLE 内部テーブルB
WHERE 値段 IN Range Table D.
→内部テーブルBには内部テーブルAの全レコードが入る。
SELECT-OPTIONSを使用して複数レコードRange Tableに値を入れたり、Optionの値を変更したい場合は、入力項目の右側にある→ボタンを押すことで表示されるポップアップより入力することが可能だ。
SELECTION-SCREEN
SELECTION-SCREENにはいくつか種類が存在するが、どれも画面のレイアウトを変更できるものだ。
PARAMETERSのみで作ると次のような選択画面が自動で作られる。
PARAMETERS PARA_A TYPE C. とした場合
・ULINE
横に線を引く
SELECTION-SCREEN ULINE.
・SKIP
空白行を作る
SELECTION-SCREEN SKIP 2.(2行分作る)
・COMMENT
テキストを出力する
SELECTION-SCREEN COMMENT 1(10) TEXT-テキストエレメント名.
どこからはじめるか、長さは何文字かは必ず指定する。
またTEXT-の後ろのテキストエレメントは事前に定義する必要がある。
(ダブルクリックすることでテキストエレメント登録画面に移動可能)
・PUSHBUTTON
押ボタンを作る
最初にREPORT ~の下に
TABLES sscrfields.
と書いておこう。
SELECTION-SCREEN PUSHBUTTON 2(5) データオブジェクト名 USER-COMMAND 押したときに格納する値.
PUSHBUTTONを押すと指定した値がsscrfields-ucommに格納される。
次のようにCASEなどを使用して押したときの処理を決めることが可能だ。
AT SELECTION-SCREEN.
CASE sscrfields-ucomm,
WHEN USER-COMMANDの後ろの値.
ENDCASE.
・BEGIN OF LINE~END OF LINE
BEGIN~ENDの間に書いたものを1行で表示する
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(10) TEXT-テキストエレメント名.
PARAMETERS データオブジェクト名 TYPE データ型.
SELECTION-SCREEN END OF LINE.
このように書くと、
COMMENT
PARAMETERS
となるのではなく、COMMENTの値がPARAMETERSの選択画面に表示されるテキストとなる。
・BEGIN OF BLOCK~END OF BLOCK
BEGIN~ENDの間を枠で囲うことができる
WITH FRAME TITLEの後ろに指定したテキストエレメントやデータオブジェクトで選択画面に表示するテキストを指定することが可能。
SELECTION-SCREEN BEGIN OF BLOCK ブロック名
WITH FRAME TITLE テキストエレメントなど.
SELECTION-SCREEN END OF BLOCK ブロック名.
PARAMETERS: データオブジェクト名 TYPE データ型,
・BEGIN OF TABBED BLOCK~END OF TABBED BLOCK
タブ付きのブロック(タブを切り替えられる小さい画面)を作ることができる。
まずはSUBSCREENを作る。
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
PARAMETERS データオブジェクト名 TYPE データ型,
SELECTION-SCREEN END OF SCREEN 100.
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
PARAMETERS データオブジェクト名 TYPE データ型,
SELECTION-SCREEN END OF SCREEN 200.
タブ付きのブロック部分を作る
SELECTION-SCREEN: BEGIN OF TABBED BLOCK タブ付きブロックの名前 FOR 行数 LINES,
TAB (10) タブの名前 USER-COMMAND 押したときに格納する値,
TAB (10) タブの名前 USER-COMMAND 押したときに格納する値,
END OF BLOCK タブ付きブロックの名前.
TABの後ろの()はタブの長さ 任意の数値を入れることが可能だ。
PUSHBUTTONと同様にUSER-COMMANDの後ろは押したときにsscrfields-ucommに格納される値だ。
また、選択画面で表示されるタブのテキストはINITALIZATIONブロックでタブの名称 = ‘テキスト’で指定することが可能だ。
・FUNCTION KEY
実行ボタンなどがある場所にボタンを作ることが可能。このボタンはショートカットキーで実行することも可能だ。
使い方は次の通り。
SELECTION-SCREEN FUNCTION KEY 1.とかくと実行ボタンの横にボタンが作られる。
このボタンが押されるとsscrfields-ucommに「FC01」という値が格納されるので、その値を使って分岐を作ることが可能だ。
ボタンを増やしたいときはFUNCTION KEY 2 (FC02)、
FUNCTION KEY 3 (FC03)…というように増やしていくことが可能だ。
selection-screen function key 1.
CASE sscrfields-ucomm.
WHEN ‘FC01’.
ENDCASE.
コメント