コンテンツフレーム起動

ABAP プログラムにおけるテーブルコントロール 文書を SAP ライブラリストラクチャに組み込む

ABAP プログラムでテーブルコントロールを処理するには、次の命令を使用して、プログラムの宣言部分で各テーブルコントロールのコントロールを宣言する必要があります。

CONTROLS <ctrl> TYPE TABLEVIEW USING SCREEN <scr>.

<ctrl> は、ABAP プログラムにおけるDynpro のテーブルコントロールの名称です。このコントロールを使用すると、ABAP プログラムでテーブルコントロールの属性を読み込んだり、コントロールに影響を及ぼしたりすることができます。また、この命令によって<ctrl> という名称の他の構造を含んだデータタイプが宣言されます。構造のデータ型は、ABAP ディクショナリのデータ型グループ CXTAB に定義されているデータ型CXTAB_CONTROL にあたります。

実行時に、構造のコンポーネントにテーブルコントロールの属性が格納されます。初期値のいくつかは、スクリーンペインタで指定されています。コントロール <ctrl> の初期値は、オプションUSING によって指定される Dynpro から取得されます。

命令

REFRESH CONTROL <ctrl> FROM SCREEN <scr>.

を記述した場合、Dynpro <scr> の初期値を使用して、いつでもテーブルコントロールを初期化することができます。スクリーンペインタの設定から取得されない値は、PAI でテーブルコントロールの現在のステータスに設定されます。

構造 CXTAB_CONTROL

他の構造を含んだデータタイプ CXTAB_CONTROL には、最上位レベルのテーブルコントロールの一般属性が格納されます。コンポーネント CXTAB_CONTROL は構造 CXTAB_COLUMN のテーブルで、このテーブルには列の属性が格納されます。コンポーネントCXTAB_CONTROL-COLS-SCREEN はシステムテーブル SCREEN と同じデータ型のフラット構造で、この構造には個々の Dynpro エレメントの属性が格納されます。

このグラフィックは添付のテキストに説明されています

コンポーネント CURRENT_LINE までは、ABAP プログラムの構造CXTAB_CONTROL のすべての属性を、画面上のテーブルコントロールの表示を変更するように設定することができます。

CXTAB_CONTROL のコンポーネント

構造 CXTAB_CONTROL には、以下のコンポーネントがあります。

コンポーネント

データ型 ( 長さ)

意味

スクリーンペインタの属性

FIXED_COLS

I

固定列の数。スクリーンペインタから転送されます。ABAP プログラムで変更することができます。

固定列

LINES

I

テーブルコントロールのスクロールバーを制御します。内部テーブルを含まない LOOP では、LINES の初期値はゼロなので、スクロールバーを使用できるようにプログラムで設定する必要があります。LOOP AT <itab> では、テーブルコントロールが最初に処理される際に、このコンポーネントは内部テーブルの行数に設定されます。テーブルコントロールの初期化イベントは、個々に確認されるわけではありません。このイベントで該当する内部テーブルの一部が生成されなかった場合、LINES 変数に正確な値が書き込まれません。LOOP ループ内の LINES が内部テーブルの行数に比べて小さい場合、テーブルコントロールの下部の行は空白になります。

したがって、LINES コンポーネントは必ず、ABAP プログラムの LOOP AT <itab> などで明示的に設定する必要があります。そのようにすることで、垂直スクロールバーのサイズを完全に制御し、入力可能な行数を制御することができます。初期化は通常、テーブルコントロールの LOOP 命令の直前に PBO で行う必要があります。

 

TOP_LINE

I

次の PBO の先頭行。垂直スライダボックスの位置によって PAI で設定されます。ABAP プログラムで変更することができます。

 

CURRENT_LINE

I

ループ内の現在の行。LOOP ループで自動的に値 SY-STEPL + (TOP_LINE - 1) に設定されます。ABAP プログラムで変更することはできません

 

LEFT_COL

I

固定列の後に最初に表示される、水平方向にスクロール可能な列。水平スライダボックスの位置によって PAI で設定されます。LEFT_COL には、ユーザによる列の移動に関係なく、列の絶対番号が格納されます。ABAP プログラムで変更することができます。

 

LINE_SEL_MODE

I

行選択モード: なし、1 行、または複数行を表す 012 を選択することができます。スクリーンペインタから転送されます。ABAP プログラムで変更することができます。

行選択

COL_SEL_MODE

I

列選択モード: なし、1 列、または複数列を表す 012 を選択することができます。スクリーンペインタから転送されます。ABAP プログラムで変更することができます。

列選択

LINE_SELECTOR

C(1)

選択列を表すフラグ (X または空白) 。スクリーンペインタから転送されます。ABAP プログラムで変更することができます。

選択列

H_GRID

C(1)

水平セパレータを表すフラグ (X または空白) 。スクリーンペインタから転送されます。ABAP プログラムで変更することができます。

セパレータ

V_GRID

C(1)

垂直セパレータを表すフラグ (X または空白) 。スクリーンペインタから転送されます。ABAP プログラムで変更することができます。

セパレータ

COLS

CXTAB_COLUMN

単一列の制御テーブル ( 下記を参照)

 

INVISIBLE

C(1)

テーブルコントロール全体の可視性を表すフラグ (X または空白)

 

内部テーブル CXTAB_COLUMN は、構造CXTAB_CONTROL のコンポーネントです。

CXTAB_COLUMN のコンポーネント

テーブルコントロールの各列は、テーブル CXTAB_COLUMN の行にあたります。内部テーブル CXTAB_COLUMN にはヘッダ行はなく、以下の列があります。

コンポーネント

データ型 ( 長さ)

意味

SCREEN

SCREEN

列の Dynpro エレメントの属性の構造 ( 下記を参照)

INDEX

I

テーブルコントロール内の列の現在の位置。スクリーンペインタから初期値を使用して転送されます。PAI では、テーブルコントロールの現在の列設定が取り消されます。ABAP プログラムで変更することができます。

SELECTED

C(1)

列が選択されているかどうかを表すフラグ (X または空白)PAI では、テーブルコントロールの現在のステータスが取り消されます。ABAP プログラムで変更することができます。

VISLENGTH

I

列の表示長。スクリーンペインタから転送されます。ABAP プログラムで変更することができます。

INVISIBLE

C(1)

列が表示されるかどうかを表すフラグ (X または空白) 。スクリーンペインタから転送されます。ABAP プログラムで変更することができます。

構造 SCREEN は、テーブルCXTAB_COLUMN の列です。

SCREEN のコンポーネント

構造 SCREEN には、システムテーブル SCREEN と同じコンポーネントが格納されます。コンポーネント SCREEN-NAME は、列を生成するDynpro エレメントの名称です。残りのコンポーネントの初期値は、スクリーンペインタの Dynpro エレメントの属性に対応します。属性は、ここから初期値を使用して転送されます。これらは、ABAP プログラムで直接変更することができます。直接設定された値は、ループ LOOP AT SCREEN 内で MODIFY SCREEN を使用してこれらの属性を変更することで、上書きすることができる点に注意してください。

さらに、構造 SCREEN の属性は空白文字や X を使用して設定されるのではなく、システムテーブル SCREEN と同様に 0 および 1 を使用して設定される点に注意してください。

テーブルコントロールでのスクロール

スクロールバーによるスクロールはテーブルコントロールとともに自動的に実装され、システムによって管理されます。ただし、テーブルコントロールを編集するには、コンポーネント<ctrl>-LINES を必要な行数に設定しておく必要があります。これは、内部テーブルを使用した並行ループを伴うテーブルコントロールにも、そうでないテーブルコントロールにも該当します。コンポーネント LINES は、内部テーブルを使用した並行ループを伴うテーブルコントロールについては黙示的に設定されますが、適切な値が設定されるとは限りません ( 上の表を参照) 。したがって、どちらの場合にも、コンポーネント LINES ABAP プログラムの内部テーブル内の行数に明示的に設定することをお奨めします。この数は、命令 DESCRIBE TABLE から特定することができます ( 次の例を参照)

スクロールバーによるスクロール時には、空の機能コードを含むイベント PAI がトリガされます。PAI および PBO でのループが実行される際、PBO の前に構造 CXTAB_CONTROL のコンポーネント TOP_LINE が設定されるので、ループパスで適切な行が編集されます。

構造 CXTAB_CONTROL のコンポーネントを使用すると、プログラム制御の垂直スクロール ( 行ごと、ページごと、またはページへジャンプ) を簡単に実装することができます。基本的に、コンポーネント TOP_LINE には値を指定する必要があります。ページごとのスクロールについては、ループパス時にスクロールされる行数をシステム項目 SY-LOOPC から取得することができます。SY-LOOPC には現在表示されている行数が格納されますが、構造CXTAB_CONTROL のコンポーネント LINES にはテーブルコントロール内のすべての行数が格納されます。

テーブルコントロール上のカーソル位置

PBO で、テーブルコントロールの特定の行の特定の項目にカーソルを設定することができます。

SET CURSOR FIELD <f> LINE <lin> [OFFSET <off>].

省略可能なオプション OFFSET を使用すると、カーソル位置の設定で説明したように項目内のカーソルのオフセットを指定することができます。

PAI では、現在のカーソル位置を読み込むことができます。

GET CURSOR FIELD <f> LINE <lin> ...

カーソル位置の確認に記載されている情報に加えて、項目 <lin> には、カーソルが現在置かれているテーブルコントロールの行に関する情報が格納されます。また、次の命令を使用することもできます。

GET CURSOR LINE <lin>.

この場合は、テーブルコントロールの行が確認されるだけです。SY'-SUBRC を使用すると、カーソルがテーブルコントロールの行に置かれているかどうかをチェックすることができます。

 

 

 

コンテンツフレーム終了