!--a11y-->

ABAP ディクショナリでは、グローバルなデータ型を定義することができます。ABAP 命令の TYPE オプションを適切に使用し、任意の ABAP プログラムでグローバルデータ型を参照することができます。
ABAP
ディクショナリ
を使用して定義します。
データ型には、以下の入力項目が関係します。
第一画面には 3 つのグループがあります。
ABAP
ディクショナリ
の最も重要なタスクの 1
つは、R/3
データベースのデータベーステーブルを管理することです。
ABAP
ディクショナリには、データベーステーブルのメタ情報が格納されています。これらのメタ情報を使用し、データベースに物理テーブルを作成します。ビューとは、1
テーブル以上の項目で構成されている "
仮想テーブル"
です。
データベーステーブルの定義では、テーブル行が単一項目または単一列で構成されています。各列に基本データ型を割り当てる必要があります。ABAP ディクショナリの基本データ型はデータエレメントです。ABAP プログラムのデータオブジェクトと同様に、データベーステーブルとビューは、属性としてデータ型を所有します。データベーステーブルの行のデータ型、またはビューのデータ型は フラット構造であり、個別データエレメントで構成されています。
ABAP プログラムでは、データベーステーブルまたはビューのデータ型を TYPE オプションで使用することができます。構造全体または個別コンポーネントを参照することができます。
... TYPE <dbtab> ...
これにより、構造の複合データ型を参照します。
... TYPE <dbtab>-<ci> ...
これにより、コンポーネント <ci> の基本データ型を参照します。
以下の TYPE オプションを使用して、複合データ型<t> を定義するとします。
TYPES <t> TYPE <dbtab>.
この場合、データ型 <t> のコンポーネントは、データベーステーブルまたはビューのコンポーネント名を継承します。プログラムでは、<t>-<ci> を使用して、これらのコンポーネントをアドレスすることができます。
以前のリリースと互換性を保つために、クラス内を除き、LIKE オプションを引き続き使用してデータベーステーブルまたはビューを参照することができます。これは、以前のリリースでは、ディクショナリにメタ情報とデータ型のみが格納されている場合でも、データベーステーブルの物理的な存在がオブジェクトとして強調されていたためです。
データベーステーブルおよびビューを参照してプログラムローカルなデータ型を定義することは、ABAP でデータベーステーブルのデータを処理するために不可欠な手法の 1 つです。この方法で定義するデータオブジェクトには、関連データベーステーブルからのデータの格納に適したデータ型が、常に割り当てられます。ABAP オープン SQL により、単一項目、項目範囲、データベーステーブル全体、またはビュー全体を、内部テーブルに読み込むことができます。

TYPES: city type
spfli-cityfrom,
spfli_type TYPE STANDARD TABLE OF spfli
WITH DEFAULT KEY.
DATA:
wa_city TYPE city,
wa_spfli TYPE spfli_type.
...
SELECT SINGLE cityfrom
FROM spfli
INTO wa_city
WHERE carrid = 'LH' AND connid = '400'.
...
SELECT * FROM spfli INTO TABLE wa_spfli.
...
この例では、データベーステーブル SPFLI の単一項目を参照する基本データ型 CITY と、行タイプがデータベーステーブルの構造と同じである内部テーブル SPFLI_TYPE を定義しています。SELECT 命令で、データベースのデータを該当するデータオブジェクトに読み込みます。
データ型とは、ABAP ディクショナリにおける実際の型定義です。データ型では、システム内でグローバルに参照可能な、基本タイプ、参照タイプ、複合タイプを定義することができます。データベーステーブルのデータ型は、使用可能なすべての型のサブセット、つまりフラット構造です。グローバルオブジェクトタイプ ( クラスとインタフェース) は ABAP ディクショナリには保存されず、クラスライブラリに保存されます。グローバルオブジェクトタイプの作成には、クラスビルダを使用します。
データ型とその定義の追加情報については、ABAP
ディクショナリ文書の
型セクションを参照してください。以下には、ABAP
プログラムから型を参照する方法を含め、型について簡単に説明されています。
ABAP ディクショナリのデータエレメントでは、個別項目を記述します。データエレメントは、下記複合タイプの不可分な最小単位であり、データベースの列タイプの指定に使用します。データエレメントは、基本タイプまたは参照タイプにすることができます。
キ 基本タイプ
基本タイプは、ABAP ディクショナリの項目に関する二重レベルのドメインコンセプトを構成します。基本タイプは、テキスト、値テーブル、文書などの意味的属性とデータ型を所有します。データ型の指定方法には、以下の 2 種類があります。
。 ABAP ディクショナリ型による直接割当
組込 ABAP ディクショナリ型と文字数を基本タイプに割り当てることができます。ABAP ディクショナリには、ABAP プログラミング言語よりもきわめて多くの組込型があります。ここでの文字数はバイト単位の項目長ではなく、書式設定文字を除く有効な文字の数です。ABAP ディクショナリの組込データ型では、R/3 システムがサポートするデータベーステーブルの外部データ型と互換をとらなければならないので、さまざまなデータ型があります。
ABAP プログラムで ABAP ディクショナリのデータ型を参照するとき、組込ディクショナリ型は、以下のように ABAP 型へ変換されます。
|
ディクショナリ型 |
意味 |
最大長 n |
ABAP 型 |
|
DEC |
計算項目/ 金額項目 |
1 〜31 、テーブル内 1 〜17 |
P((n+1)/2) |
|
INT1 |
1 バイト整数 |
3 |
内部のみ |
|
INT2 |
2 バイト整数 |
5 |
内部のみ |
|
INT4 |
4 バイト整数 |
10 |
I |
|
CURR |
通貨項目 |
1 〜17 |
P((n+1)/2) |
|
CUKY |
通貨コード |
5 |
C(5) |
|
QUAN |
数量 |
1 〜17 |
P((n+1)/2) |
|
UNIT |
単位 |
2 〜3 |
C(n) |
|
PREC |
精度 |
16 |
内部のみ |
|
FLTP |
浮動小数点形式の値 |
16 |
F(8) |
|
NUMC |
数値テキスト |
1 〜255 |
N(n) |
|
CHAR |
文字 |
1 〜255 |
C(n) |
|
LCHR |
文字 ( 長) |
256 〜最大値 |
C(n) |
|
STRING |
可変長の文字列 |
1 〜最大値 |
STRING |
|
RAWSTRING |
可変長のバイト列 |
1 〜最大値 |
XSTRING |
|
DATS |
日付 |
8 |
D |
|
ACCP |
会計期間 YYYYMM |
6 |
N(6) |
|
TIMS |
時刻 HHMMSS |
6 |
T |
|
RAW |
バイト列 |
1 〜255 |
X(n) |
|
LRAW |
バイト列 ( 長) |
256 〜最大値 |
X(n) |
|
CLNT |
クライアント |
3 |
C(3) |
|
LANG |
言語 |
内部 1 、外部 2 |
C(1) |
(LCHR および LRAW の " 最大" は、先行する INT2 項目の値です。LANG 項目の " 内部" 長は、ディクショナリ内にあり、" 外部" 長は画面上の表示に関係します。)
。 ドメインの割当
技術属性はドメインから継承されます。ドメインは、ABAP ディクショナリのスタンドアロンリポジトリオブジェクトです。ドメインにより、データエレメントの技術属性を指定することができます。1 つのドメインを任意の数のデータエレメントで使用することができます。ドメインを登録するときは、ディクショナリデータ型 ( 上記の表を参照) と文字数を指定する必要があります。
キ 参照タイプ
参照タイプでは、ABAP クラスライブラリのグローバルクラスおよびインタフェースに対する参照を格納可能な単一項目を記述します。
ABAP プログラムでは、TYPE オプションを使用して、データエレメントを直接参照することができます。これにより、ドメインの組込ディクショナリデータ型は、該当する ABAP 型に変換されます。
以下のように、プログラムでデータエレメントを参照してローカルデータ型を定義するとします。
TYPES <t> TYPE <data element>.
この場合、データエレメントの意味的属性は継承されて、たとえば、画面上で型 <t> のデータオブジェクトを照会するときに使用されます。ABAP ディクショナリのデータ型はすべてデータエレメントにもとづくので、それらすべてに、対応する意味的属性があります。

TYPES company TYPE s_carr_id.
DATA wa_company TYPE company.
wa_company = 'UA '.
WRITE: 'Company:', wa_company.
この例では、データエレメントS_CARR_ID を参照するローカルデータ型 COMPANY を定義しています。このデータエレメントは、名称がまったく同一のドメイン S_CARR_ID とリンクしています。このドメインでは、長さ 3 のデータ型 CHAR として技術属性を定義しています。したがって、プログラム内のローカルデータ型 COMPANY は、ABAP 型 C(3) を所有します。COMAPNY では、データエレメントの意味的属性も採用されます。上記の例では、データオブジェクト WA_COMPANY をこの型で宣言し、一覧に表示します。ユーザが出力項目に関する F1 ヘルプを選択すると、ABAP ディクショナリに保存されたヘルプテキストが、ダイアログボックスに表示されます。
構造とは、ABAP ディクショナリの任意の他のデータ型、つまりデータエレメント、構造、テーブルデータ型、またはデータベーステーブルの配列です。ABAP ディクショナリで構造を作成するとき、各コンポーネントに名称とデータ型が必要です。
ABAP プログラムでは、TYPE オプションを使用して構造を直接参照することができます。
以下のように、プログラムで構造を参照してローカルデータ型を定義するとします。
TYPES <t> TYPE <structure>.
この場合、構造の設計により、プログラムでローカル構造<t> が作成されます。構造内のデータエレメントで使用される、ドメインの組込ディクショナリデータ型は、該当する ABAP 型に変換されます。データエレメントの意味的属性は、プログラムで構造の該当コンポーネントに使用されます。ローカル構造<t> のコンポーネント名は、ABAP ディクショナリの構造名と同じです。
以前のリリースと互換性を保つために、ABAP プログラムで LIKE オプションを引き続き使用して、ABAP ディクショナリの構造を参照することができます ( クラス内を除く) 。

ABAP ディクショナリで、以下のように構造 STRUCT が定義されているとします。
|
項目名 |
型名 |
内容説明 |
|
COL1 |
CHAR01 |
長さ 1 の文字項目 |
|
COL2 |
CHAR08 |
長さ 8 の文字項目 |
|
COL3 |
CHAR10 |
長さ 10 の文字項目 |
CHAR01 から CHAR10 の型は、対応するドメインがあるデータエレメントです。この構造を ABAP で以下のように参照することができます。
TYPES struct_type TYPE struct.
DATA wa TYPE struct_type.
wa-col1 = '1'.
wa-col2 = '12345678'.
wa-col3 = '1234567890'.
このプログラムでは、ローカル構造 STRUCT_TYPE と関連のデータオブジェクト WA を作成しています。元構造のコンポーネント名を使用して、このデータオブジェクトのコンポーネントをアドレスすることができます。
テーブルデータ型とは、ABAP ディクショナリに保存されている内部テーブルの設計図です。ABAP ディクショナリでテーブルデータ型を作成するとき、行データ型、アクセスタイプ、およびキーを指定します。行データ型は、ABAP ディクショナリの任意のデータ型、つまりデータエレメント、構造、テーブルデータ型、またはデータベーステーブルの型にすることができます。ドメインの場合と同様に、組込ディクショナリ型を行データ型として入力することもできます。
ABAP プログラムでは、TYPE オプションを使用してテーブルデータ型を直接参照することができます。
以下のように、プログラムでテーブルデータ型を参照してローカルデータ型を定義するとします。
TYPES <t> TYPE <table>.
この場合、テーブルデータ型の設計を使用して、プログラムでローカル内部テーブル <t> が作成されます。構造内のデータエレメントで使用されるドメインの組込ディクショナリデータ型は、該当する ABAP 型に変換されます。データエレメントの意味的属性は、プログラムで内部テーブルの該当コンポーネントに使用されます。

前述の例の行データ型 STRUCT で、テーブルデータ型STRUCT_TABLE がディクショナリに定義されているとします。ABAP では、このデータ型を以下のように参照することができます。
TYPES table_type TYPE struct_table.
DATA: table_wa TYPE
table_type,
line_wa LIKE LINE OF
table_wa.
...
LOOP AT table_wa INTO
line_wa.
...
WRITE: line_wa-col1, line_wa-col1, line_wa-col1.
...
ENDLOOP.
このプログラムでは、内部テーブルデータ型 TABLE_TYPE を定義しています。これをもとに、データオブジェクト TABLE_WA および LINE_WA を定義します。LINE_WA はディクショナリのテーブルデータ型の行データ型と一致するので、構造 STRUCT と互換性があります。
4.5A より前のリリースでは、ABAP プログラムで TYPE オプションによって参照可能なスタンドアロン型を、ABAP ディクショナリで定義することはできませんでした。フラット構造の参照のみが可能でした。プログラム内の構造は、データベーステーブルの構造または ABAP ディクショナリの構造と一致していました。ABAP プログラムでは、LIKE を使用して、データベーステーブルと ABAP ディクショナリの構造だけを参照することができました。ただし、ディクショナリ型の各コンポーネントを参照することは可能でした。内部テーブルや他の構造を含んだデータタイプなどの複合ローカルデータ型には、ABAP ディクショナリ内に対応するデータ型がありませんでした。リリース 3.0 以降、この解決策としてデータ型グループが使用されました。データ型グループはインクルード手法にもとづいており、TYPES 命令によってデータ型グループを定義して、任意の型定義をグローバルにディクショナリへ保存することが可能でした。
データ型グループの定義は、ABAP エディタに入力可能なABAP コードのフラグメントです。データ型グループが <pool> の場合、最初の命令は常に以下になります。
TYPE-POOL <pool>.
この命令の後、プログラムのローカルデータ型に記載されているとおり、TYPES 命令を使用してデータ型を定義しました。 CONSTANTS 命令によってグローバル定数を定義することも可能でした。これらのデータ型名および定数名は、すべてデータ型グループ名とアンダースコアで始める必要があります。
ABAP プログラムでは、データ型グループを使用する前に、以下のようにデータ型グループを宣言しておく必要があります。
TYPE-POOLS <pool>.
この命令により、データ型グループ <pool> で定義されているすべてのデータ型および定数を、プログラムで使用することが可能になります。複数のデータ型グループを同じプログラムで使用することができます。

ABAP ディクショナリで、データ型グループ HKTST を以下のように作成するとします。
TYPE-POOL hktst.
TYPES: BEGIN OF
hktst_typ1,
col1(10)
TYPE c,
col2
TYPE i,
END OF hktst_typ1.
TYPES hktst_typ2 TYPE p DECIMALS 2.
CONSTANTS hktst_eleven TYPE i VALUE 11.
このデータ型グループでは、2 つのデータ型 HKTST_TYP1 と HKTST_TYP2 に加えて、値が 11 である定数 HKTST_ELEVEN も定義しています。
どの ABAP プログラムでも、以下のように TYPE-POOLS 命令によってこの定義を使用することができます。
TYPE-POOLS hktst.
DATA: dat1 TYPE
hktst_typ1,
dat2 TYPE hktst_typ2 VALUE
'1.23'.
WRITE: dat2, / hktst_eleven.
以下が出力されます。
1,23
11
データ型グループで定義されたデータ型を使用して、DATA 命令でデータオブジェクトを宣言します。出力に示されているとおり、定数の値はプログラム内で明らかになっています。
