選択画面について

選択画面について

 選択画面はプログラム実行時に実行ユーザーが条件を入れたりする画面。
 例えばプログラムを起動→実行条件を指定(会社コードなど)→プログラムを実行→実行結果の表示
 この実行条件を指定する画面のこと。
 こういった画面は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. とした場合

PARAMETERSのみ

 ・ULINE
   横に線を引く

ULINE

   SELECTION-SCREEN ULINE.
 ・SKIP
   空白行を作る
   SELECTION-SCREEN SKIP 2.(2行分作る)

SKIP

 ・COMMENT
   テキストを出力する
   SELECTION-SCREEN COMMENT 1(10) TEXT-テキストエレメント名.
   どこからはじめるか、長さは何文字かは必ず指定する。
   またTEXT-の後ろのテキストエレメントは事前に定義する必要がある。
   (ダブルクリックすることでテキストエレメント登録画面に移動可能)

COMMENT

 ・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.

PUSHBUTTON

 ・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 LINE ~ END OF LINE

 ・BEGIN OF BLOCK~END OF BLOCK
   BEGIN~ENDの間を枠で囲うことができる 

   WITH FRAME TITLEの後ろに指定したテキストエレメントやデータオブジェクトで選択画面に表示するテキストを指定することが可能。
SELECTION-SCREEN BEGIN OF BLOCK ブロック名
                        WITH FRAME TITLE テキストエレメントなど.

SELECTION-SCREEN END OF BLOCK ブロック名.

BEGIN OF BLOCK~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ブロックでタブの名称 = ‘テキスト’で指定することが可能だ。

BEGIN OF TABBED BLOCK~END OF TABBED BLOCK

 ・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.

FUNCTION KEY

コメント

タイトルとURLをコピーしました