コンテンツフレーム起動

プログラム命令によるデータの受渡 文書を SAP ライブラリストラクチャに組み込む

インタラクティブイベント中に、個々の出力項目または追加情報を行から該当する処理ブロックに転送するには、以下の命令を使用します。

        HIDE

HIDE 命令は、インタラクティブレポートのための主要な命令の 1 つです。HIDE 命令は、基本一覧を作成するときに使用します。この命令では、後続の詳細一覧に転送される情報が定義されます。

        READ LINE

命令 READ LINE および READ CURRENT LINE は、既存の一覧レベルの行からデータを読み込むために使用します。これらの命令は、HIDE 命令と緊密にリンクされています。

        GET CURSOR

命令 GET CURSOR FIELD および GET CURSOR LINE は、インタラクティブイベント時にカーソルが置かれた出力項目または出力行を ABAP プログラムに転送するために使用します。

        DESCRIBE LIST

DESCRIBE LIST 命令では、行数やページ数などの特定の一覧属性をプログラム変数に読み込むことができます。

以下のセクションでは、これらの命令について詳しく説明します。

HIDE 命令

一覧レベルの作成時に HIDE 命令を使用して、行固有の情報を後で使用するために保存します。これには、HIDE 命令を以下のように使用します。

HIDE <f>.

この命令では、現在の出力行の変数 <f> のコンテンツ ( システム項目 SY-LINNO) HIDE エリアに置かれます。変数 <f> が現在の行に表示されるとは限りません。

プログラムを読みやすくするために、HIDE 命令は、常に変数 <f> の出力命令の直後か、現在行の最後の出力命令の後に置くようにしてください。

HIDE 項目を保管した行をユーザが選択すると、保管した値がプログラムの変数にただちに書き込まれます。行は以下のように選択されます。

        インタラクティブイベントによる選択

それぞれのインタラクティブイベントごとに、イベント中にカーソルが置かれた行の HIDE 項目に、保管された値が書き込まれます。

        READ LINE 命令による選択

HIDE エリアは、テーブルの 1 つであると見なすことができます。このエリアでは、各一覧と行番号ごとに、すべての HIDE 項目の名称と値が保管されます。必要に応じて、このテーブルから値がただちに読み込まれます。

以下の例は、インタラクティブレポートの主な機能をいくつか示しています。基本一覧には要約された情報が含まれます。HIDE 命令を使用して、各詳細一覧にはより詳しい情報を含めることができます。

例

以下のプログラムは、論理データベース F1S にリンクされています。

REPORT demo_list_hide NO STANDARD PAGE HEADING.

TABLES: spfli, sbook.

DATA: num TYPE i,
      dat TYPE d.

START-OF-SELECTION.
   num = 0.
  SET PF-STATUS 'FLIGHT'.

GET spfli.
   num = num + 1.
  WRITE: / spfli-carrid, spfli-connid,
           spfli-cityfrom, spfli-cityto.

   HIDE:    spfli-carrid, spfli-connid, num.

END-OF-SELECTION.
   CLEAR num.

TOP-OF-PAGE.
   WRITE 'List of Flights'.
   ULINE.
   WRITE 'CA  CONN FROM                 TO'.
   ULINE.

TOP-OF-PAGE DURING LINE-SELECTION.
   CASE sy-pfkey.
     WHEN 'BOOKING'.
       WRITE sy-lisel.
       ULINE.
     WHEN 'WIND'.
       WRITE:  'Booking', sbook-bookid,
           /  'Date   ', sbook-fldate.

       ULINE.
   ENDCASE.

AT USER-COMMAND.
   CASE sy-ucomm.
     WHEN 'SELE'.
       IF num NE 0.
        SET PF-STATUS 'BOOKING'.

         CLEAR dat.
         SELECT * FROM sbook WHERE carrid = spfli-carrid
                            AND   connid = spfli-connid.

           IF sbook-fldate NE dat.
             dat = sbook-fldate.
             SKIP.
             WRITE / sbook-fldate.
             POSITION 16.
          ELSE.

             NEW-LINE.
             POSITION 16.
          ENDIF.

           WRITE sbook-bookid.
           HIDE: sbook-bookid, sbook-fldate, sbook-custtype,
                sbook-smoker, sbook-luggweight, sbook-class.
        ENDSELECT.

         IF sy-subrc NE 0.
          WRITE / 'No bookings for this flight'.

         ENDIF.
         num = 0.
        CLEAR sbook-bookid.

       ENDIF.
     WHEN 'INFO'.
       IF NOT sbook-bookid IS INITIAL.
         SET PF-STATUS 'WIND'.
         SET TITLEBAR 'BKI'.
         WINDOW STARTING AT 30 5 ENDING AT  60 10.
        WRITE: 'Customer type   :', sbook-custtype,
             / 'Smoker          :', sbook-smoker,
             / 'Luggage weight :', sbook-luggweight UNIT 'KG',
             / 'Class           :', sbook-class.
      ENDIF.

   ENDCASE.

イベント START-OF-SELECTION で、基本一覧にステータス FLIGHT が設定されます。ステータス FLIGHT で、機能コード SELE ( テキスト SELECT) が機能キー F2 とボタンに割り当てられます。このため、ユーザがダブルクリックするか、F2 を押す、またはボタン選択を押すと、イベント AT USER-COMMAND がトリガされます。

SPFLI-CARRIDSPFLI-CONNIDNUM 3 つの項目は、基本一覧の登録時に HIDE エリアに保管されます。行を選択した後で、機能コード SELE AT USER-COMMAND イベントに定義された詳細一覧が表示されます。AT USER-COMMAND イベントで、HIDE エリアに保管された選択行のすべての項目に再書込みが行われます。NUM を使用して、ユーザが有効な一覧から行を選択したかどうかをチェックします。詳細一覧のステータスは BOOKING で、 F2 が機能コード INFO ( テキスト: Booking Information) に割り当てられます。詳細一覧には、基本一覧の HIDE 項目を使用してプログラムによって選択されたデータが表示されます。表示される一覧行ごとに、追加情報が HIDE エリアに保管されます。

ユーザ詳細一覧の行を選択すると、ダイアログボックスにステータス WIND " 非表示" 情報が表示されます。このステータスのタイプはダイアログボックスで、一覧ステータスに提案される機能が含まれます。プログラムでは SBOOK-BOOKID を使用して、ユーザが有効な行を選択したかどうかがチェックされます。

プログラムに、すべてのページヘッダおよびダイアログボックスの表題が設定されます。

一覧からの行の読込

単一のプログラムで生成された一覧はすべて、内部的に保管されます。このため、同じ画面に生成され、一覧の下位レベルに戻ることで削除されていない一覧にプログラムからアクセスすることができます。行の読込には、命令 READ LINE READ CURRENT LINE を使用します。

インタラクティブ一覧イベントの後で一覧から行を読み込むには、以下のように READ LINE 命令を使用します。

READ LINE <lin> [INDEX <idx>]
        [FIELD VALUE <f1> [INTO <g1>] ...<fn> [INTO <gn>]]
        [OF CURRENT PAGE|OF PAGE <p>].

どのオプションも持たない命令は、イベントがトリガされた一覧 ( 索引 SY-LILLI) の行 <lin> のコンテンツを SY-LISEL システム項目に保管し、この行に保管されたすべての HIDE 情報を該当する項目に戻して保管します。SY-LISEL および HIDE エリアに関する限り、READ LINE の影響は、インタラクティブ行選択の場合と同じです。

選択された行 <lin> が存在する場合、SY-SUBRC 0 に設定されます。それ以外の場合は 4 に設定されます。

オプションには以下の効果があります。

        INDEX <idx>

レベル <idx> の一覧の行 <lin> の情報が読み込まれます。

        FIELD VALUE <f 1> [INTO <g 1>] ...<fn> [INTO <gn>]

<lin> の変数 <f i> の出力値が文字列として解釈され、この値が同じ項目 <f i> に置かれます。INTO を使用する場合は、この値は項目 <g i> におかれます。項目の再書込み時には、変換ルールが適用されます。

行に表示されない項目は対象項目に影響を与えません。項目が行内に複数回表示される場合、最初の項目だけが採用されます。

項目のコンテンツは、出力書式を使用して転送されます。したがって、書式設定文字もすべて含まれます。これにより、編集文字を小数や他の互換性のない文字に変換する場合などに問題が発生することがあります。

この場合、HIDE 命令を使用することができないため、このオプションは主に入力可能な一覧項目のユーザエントリを処理するために使用します。

        OF CURRENT PAGE

このオプションでは、<lin> は一覧の行の番号ではなく、指定された一覧の現在表示されているページの行の番号です。システム項目SY-CPAGE には対応するページ番号が保管されます。

        OF PAGE <p>

このオプションでは、<lin> は一覧の行の番号ではなく、指定された一覧のページ <p> の行の番号です。

この命令は、行を連続して 2 度読み込みます。これには、以下のようにプログラムに READ CURRENT LINE 命令を使用します。

READ CURRENT LINE [FIELD VALUE <f1> [INTO <g1>] ...].

この命令は、インタラクティブイベント ( F2) または READ LINE によって以前読み込まれた行を読み込みます。FIELD VALUE オプションは、READ LINE の場合と同じです。

これにより、プログラムの値を使用して同じ行の項目を書き込むことができます。

例

以下のプログラムは、論理データベース F1S にリンクされています。

REPORT demo_list_read_line NO STANDARD PAGE HEADING.

TABLES: sflight.

DATA: box(1) TYPE c, lines TYPE i, free TYPE i.

START-OF-SELECTION.
   SET PF-STATUS 'CHECK'.

GET sflight.
   WRITE: box AS CHECKBOX, sflight-fldate.
   HIDE: sflight-fldate, sflight-carrid, sflight-connid,
        sflight-seatsmax, sflight-seatsocc.

END-OF-SELECTION.
   lines = sy-linno - 1.

TOP-OF-PAGE.
   WRITE: 'List of flight dates'.
   ULINE.

TOP-OF-PAGE DURING LINE-SELECTION.
   WRITE:  'Date:', sflight-fldate.
   ULINE.

AT USER-COMMAND.
   CASE sy-ucomm.
     WHEN 'READ'.
       box = space.
       SET PF-STATUS 'CHECK' EXCLUDING 'READ'.
       DO lines TIMES.
         READ LINE sy-index FIELD VALUE box.
         IF box = 'X'.
           free = sflight-seatsmax - sflight-seatsocc.
           IF free > 0.
            NEW-PAGE.

             WRITE: 'Company:', sflight-carrid,
                   'Connection: ',sflight-connid,
                 / 'Number of free seats:', free.

           ENDIF.
         ENDIF.
       ENDDO.
   ENDCASE.

選択画面の処理が終了したら、基本一覧が表示されます。ユーザはこの基本一覧でチェックボックスを選択することができます。基本一覧のユーザ定義ページヘッダには、パラメータ CITY_FR CITY_TO が使用されます。これらのパラメータは、論理データベース F1S に定義されています。

プログラムにステータス CHECK が使用されます。ここでは、ユーザ定義機能コード READ ( テキスト Read Lines) が機能キー F5 およびアプリケーションツールバーのボタンに割り当てられます。対応するユーザアクションによって AT USER-COMMAND イベントがトリガされます。DO ループに READ LINE を使用して、基本一覧のすべての行が読込可能になっています。各行ごとに、HIDE エリアに以前保管したすべての値が、対応する項目に書き込まれます。FIELD VALUE オプションを使用して、さらにチェックボックス BOX が読み込まれます。まだ空席がある場合、会社、接続、および空席数が、チェックボックスがマークされている詳細一覧の各行に書き込まれます。

各出力ごとに個々のページヘッダを含む新規ページが開始されます。詳細一覧で、機能コード READ SET PF-STATUS 命令の EXCLUDING オプションを使用して無効化されます。

詳細一覧から元の画面に戻ると、チェックボックスは書き込まれたままになります。

カーソル位置での行の読込

インタラクティブイベントにおける現在のカーソル位置に関する情報を検索するためには、GET CURSOR 命令を使用します。現在項目または現在行に関する情報を検索することができます。

項目情報の場合、次の構文を使用します。

GET CURSOR FIELD <f> [OFFSET <off>] [LINE <lin>]
           [VALUE <val>] [LENGTH <len>].

この命令では、ユーザアクションでカーソルが置かれている項目の名称を変数 <f> に転送します。カーソルが項目に置かれている場合、SY-SUBRC 0 に設定され、それ以外の場合は 4 に設定されます。

グローバル変数、定数、項目シンボル、サブルーチンの参照パラメータのいずれかの名称が転送されます。リテラル、ローカル項目、サブルーチンの VALUE パラメータの場合、SY-SUBRC 0 に設定されますが、SPACE が名称として転送されます。

オプションには以下の効果があります。

        OFFSET <off>

項目 <off> には項目内のカーソルの位置が含まれます。カーソルが最初の列にある場合、<off> の値は 0 になります。

        LINE <lin>

項目 <lin> にはカーソルが置かれている一覧行の番号が含まれます (SY-LILLI)

        VALUE <val>

項目 <val> にはカーソルが置かれている項目の文字列出力表示が含まれます。表示内容には書式設定文字も含まれます。

        LENGTH <len>

項目 <len> にはカーソルが置かれている項目の出力長が含まれます。

項目情報の場合、次の構文を使用します。

GET CURSOR LINE <lin> [OFFSET <off>] [VALUE <val>] [LENGTH <len>].

この命令では、ユーザアクションでカーソルが置かれている行の番号を変数 <lin> に転送します。カーソルが一覧行に置かれている場合、SY-SUBRC 0 に設定され、それ以外の場合は 4 に設定されます。この命令を使用して、ユーザが無効な行を選択しないように制御することができます。

オプションには以下の効果があります。

        OFFSET <off>

項目 <off> には一覧行内のカーソルの位置が含まれます。カーソルが最初の列にある場合、<off> の値は 0 になります。

        VALUE <val>

項目 <val> にはカーソルが置かれている行の文字列出力表示が含まれます。表示内容には書式設定文字も含まれます。

        LENGTH <len>

項目 <len> にはカーソルが置かれている行の出力長が含まれます。

例

REPORT SAPMZTST NO STANDARD PAGE HEADING LINE-SIZE 40.

DATA: HOTSPOT(10) VALUE 'Click me!',
      F(10), OFF TYPE I, LIN TYPE I, VAL(40), LEN TYPE I.

FIELD-SYMBOLS <FS>.
ASSIGN HOTSPOT TO <FS>.
WRITE 'Demonstration of GET CURSOR statement'.
SKIP TO LINE 4.
POSITION 20.
WRITE <FS> HOTSPOT COLOR 5 INVERSE ON.

AT LINE-SELECTION.
   WINDOW STARTING AT 5 6 ENDING AT 45 20.
  GET CURSOR FIELD F OFFSET OFF
             LINE LIN VALUE VAL LENGTH LEN.

   WRITE: 'Result of GET CURSOR FIELD: '.
   ULINE AT /(28).
   WRITE: / 'Field: ', F,
         / 'Offset:', OFF,
         / 'Line:  ', LIN,
         / 'Value: ', (10) VAL,
         / 'Length:', LEN.

   SKIP.
   GET CURSOR LINE LIN OFFSET OFF VALUE VAL LENGTH LEN.
   WRITE: 'Result of GET CURSOR LINE: '.
   ULINE AT /(27).
   WRITE: / 'Offset:', OFF,
         / 'Value: ', VAL,
         / 'Length:', LEN.

このプログラムでは、HOTSPOT 項目が項目シンボル <FS> に割り当てられ、出力画面でホットスポットとして表示されます。ユーザが一覧行にカーソルを置いてその行を選択すると、AT LINE-SELECTION イベントの GET CURSOR 命令の結果を含むダイアログボックスが表示されます。

GET CURSOR FIELD の後で、項目シンボル <FS> に割り当てられた項目の名称が、項目シンボル名ではなく、F として保管されることに留意してください。

一覧属性の識別

システム変数に保管されない一覧レベルの属性を知る必要がある場合、DESCRIBE LIST 命令を使用することができます。 

一覧の行数またはページ数を検索するには、以下のように指定します。

DESCRIBE LIST NUMBER OF LINES|PAGES <n> [INDEX <idx>].

この命令では、一覧レベル <idx> の行数またはページ数を変数 <n> に書き込みます。索引<idx> のある一覧が存在しない場合、SY-SUBRC 0 以外に設定され、存在する場合は 0 に設定されます。

特定の行番号のページ番号を検索するには、以下のように指定します。

DESCRIBE LIST LINE <lin> PAGE <pag> [INDEX <idx>].

この命令では、一覧レベル <idx> で、一覧行番号 <lin> が存在するページ番号を変数 <pag> に書き込みます。SY-SUBRC は次のように設定されます。索引 <idx> を持つ一覧がない場合、値は 8 になります。番号 <line> を持つ行がない場合、値は 4 になります。それ以外の場合は 0 になります。

特定のページの属性を検索するには、以下のように指定します。

DESCRIBE LIST PAGE <pag> [INDEX <idx>] [<options>]

この命令では、一覧レベル <idx> で、ページ <pag> <options> に指定されている属性を検索します。SY-SUBRC は次のように設定されます。索引 <idx> を持つ一覧がない場合、値は 8 になります。番号 <pag> を持つページがない場合、値は 4 になります。それ以外の場合は 0 になります。

この命令の<options> は以下のとおりです。

        LINE-SIZE <col>

ページ幅を変数 <col> に書き込みます。

        LINE-COUNT <len>

ページ長を変数 <len> に書き込みます。

        LINES <lin>

表示された行数を <lin> に書き込みます。

        FIRST-LINE <lin1>

最初の行の絶対数を変数 <lin1> に書き込みます。

        TOP-LINES <top>

ページヘッダ行の数を変数 <top> に書き込みます。

        TITLE-LINES <ttl>

標準ページヘッダの一覧ヘッダ行の数を変数 <ttl> に書き込みます。

        HEAD-LINES <head>

標準ページヘッダの列ヘッダ行の数を <head> に書き込みます。

        END-LINES <end>

ページフッタ行の数を変数 <end> に書き込みます。

DESCRIBE LIST は、完成した一覧専用に使用します。これは、作成中の一覧 ( 索引: SY-LSIND) の場合、属性によっては最新ではないものがあるためです。

例

REPORT demo_list_describe_list NO STANDARD PAGE HEADING
                               LINE-SIZE 40 LINE-COUNT 5(1).

DATA: lin TYPE i, pag TYPE i,
      col TYPE i, len TYPE i, lin1 TYPE i,
      top TYPE i, tit TYPE i, head TYPE i, end TYPE i.

DO 4 TIMES.
   WRITE / sy-index.
ENDDO.

TOP-OF-PAGE.
   WRITE 'Demonstration of DESCRIBE LIST statement'.
   ULINE.

END-OF-PAGE.
   ULINE.

AT LINE-SELECTION.
   NEW-PAGE LINE-COUNT 0.
  WINDOW STARTING AT 1 13 ENDING AT 40 25.
  DESCRIBE LIST: NUMBER OF LINES lin INDEX 0,
                 NUMBER OF PAGES pag INDEX 0.
  WRITE: 'Results of DESCRIBE LIST: '.

   ULINE AT /(25).
   WRITE: / 'Lines: ', lin,
         / 'Pages: ', pag.

   SKIP.
   DESCRIBE LIST LINE sy-lilli PAGE pag INDEX 0.
  WRITE: / 'Line', (1) sy-lilli, 'is on page', (1) pag.

   SKIP.
   DESCRIBE LIST PAGE pag INDEX 0 LINE-SIZE   col
                                 LINE-COUNT  len
                                 LINES       lin
                                 FIRST-LINE  lin1
                                 TOP-LINES   top
                                 TITLE-LINES tit
                                 HEAD-LINES  head
                                 END-LINES   end.

   WRITE: 'Properties of Page', (1) pag, ':',
       / 'Width:       ',  col,
       / 'Length:      ',  len,
       / 'Lines:       ',  lin,
       / 'First Line:  ',  lin1,
       / 'Page Header: ',  top,
       / 'Title Lines: ',  tit,
       / 'Header Lines:',  head,
       / 'Footer Lines:',  end.

このプログラムでは各ページに 5 行を含む 2 ページから成る一覧が生成されます。2 行はユーザ定義ページヘッダに使用され、1 行はページフッタに使用されます。ユーザが 1 行を選択すると、一覧属性を含むダイアログボックスが表示されます。

二次一覧の作成時に、DESCRIBE LIST 命令のすべての変数が基本一覧に適用されます。ダイアログボックスに結果が表示されます。定義する行とページは、SY-LILLI を使用して動的に指定されます。

 

 

コンテンツフレーム終了