!--a11y-->

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_COLUMN のテーブルで、このテーブルには列の属性が格納されます。コンポーネントCXTAB_CONTROL-COLS-SCREEN はシステムテーブル SCREEN と同じデータ型のフラット構造で、この構造には個々の Dynpro エレメントの属性が格納されます。
コンポーネント CURRENT_LINE までは、ABAP プログラムの構造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 行、または複数行を表す 0 、1 、2 を選択することができます。スクリーンペインタから転送されます。ABAP プログラムで変更することができます。 |
行選択 |
|
COL_SEL_MODE |
I |
列選択モード: なし、1 列、または複数列を表す 0 、1 、2 を選択することができます。スクリーンペインタから転送されます。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 にはヘッダ行はなく、以下の列があります。
|
コンポーネント |
データ型 ( 長さ) |
意味 |
|
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-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 を使用すると、カーソルがテーブルコントロールの行に置かれているかどうかをチェックすることができます。