データ型
SE11ではデータエレメント、構造、テーブル型などさまざまなデータ型を作成することが可能だ。
データエレメント
データエレメントは基本データ型または参照データ型を表す。技術属性と意味属性の両方を維持することが可能だ。
意味属性はそのデータエレメントを参照する画面項目に対して重要だ。
例えば、画面項目は入力ヘルプをデータエレメントから自動的にインポートすることが可能。
基本データ型の場合、技術仕様はドメインから派生するかデータエレメントで管理される。
参照データ型の場合、グローバルクラスまたはインターフェイスへの参照を保持することも、定義済みの型への参照を保持することもできる。
データエレメントに設定できる項目には次のものがある。
・内容説明→データエレメントの説明テキスト
・文書→F1ヘルプ押すと出てくるようなやつ
・補足文書→補足の文書 照会するとエクスポートされる
・検索ヘルプ
名称→検索ヘルプのID
パラメータ→検索ヘルプで使用すパラメータ
・パラメータID→メモリIDに使用?
・デフォルトコンポーネント名→このデータエレメントを使用する構造/テーブル項目の命名についての提案値。
・文書変更→変更履歴を保持するか?チェックボックス。
・入力履歴なし→Dynproなどで入力履歴を保持するか。チェックボックス。
・双方向オプション
基本方向をLTRに設定済み→画面項目を左から右に入力 チェックボックス
BIDIフィルタなし→双方向フォントの書字方向に影響するユニコード書式設定文字がGUIとABAP間でデータ転送される場合にフィルタで除外するかどうかのチェックボックス。
また、テキストは短、中、長、ヘッダの4種類登録することも可能だ。
構造
構造には基本データ型、参照型、ボックス型、テーブル型などが存在する。
構造に構造をネストしていくことも可能。
作成方法はDBテーブルの作成方法とほとんど同じだ。
・基本データ型
基本データ型は、技術属性と意味属性を取得できるデータエレメントを参照するか、データ型、長さ、および小数点が手動で割り当てられる定義済みの型を参照することによって定義することが可能だ。
・参照型
参照型は、データ参照またはオブジェクト参照のいずれかとして定義できる。データ参照は、データ参照を定義するデータエレメントを使用するか、事前定義された ABAP データディクショナリのタイプ、長さ、および小数点を使用して指定できる。
オブジェクト参照は、グローバル クラスまたはインターフェイス参照を持つ データエレメントを使用して指定することが可能だ。
・ボックス型
ボックス型は、SAP NetWeaver 7.0 EHP 2以降の構造で定義することが可能。この型はABAPプログラムのメモリフットプリントを削減し、パフォーマンスを向上させるのに役立つ。ボックス型を使用している場合、システムは初期メモリを割り当てない。メモリは1つの構造体に割り当てられ、同様のタイプのすべてのデータはそのタイプの各データオブジェクトが独自の初期メモリ空間を占有する基本タイプの構造体とは異なり、そのメモリを指す。これは初期値共有と呼ばれる。メモリは、このタイプを使用する複数のデータオブジェクト間で共有されるぞ。
参照型は初期メモリ領域をまったく使用しないため、ボックス型は基本型と参照型の間のどこかにある。つまり、ボックス化された型の初期メモリは、基本型よりはるかに低くなるが、参照型よりは大きくなる。
現在、静的ボックスのみがサポートされている。静的型は、コンポーネントが静的に知られているボックス化されたコンポーネント。ボックス化として定義できるのは、構造のサブ構造、またはクラスやインターフェースの属性のみ。ボックス型は、TYPESステートメントにBOXEDを追加することによってプログラムで定義することが可能だ。
TYPES : BEGIN OF ty_box
box TYPE bkpf BOXED,
END OF ty_box.
ボックス型の効率は、類似したデータのすべての出現が同じ初期メモリを参照する初期値共有によるもの。ただし、次の状況では、初期値の共有が取り消されてしまう。
静的ボックスまたはそのコンポーネントへの書き込みアクセスが行われる。
静的ボックスまたはそのコンポーネントは、フィールドシンボルに割り当てられる。
静的ボックスまたはそのコンポーネントは、データ参照を使用してアドレス指定される。
静的ボックスまたはそのコンポーネントは、プロシージャの実際のパラメータとして使用される。
初期値の共有が取り消されると、内部参照は構造体のインスタンスを参照する。
ボックス型は、複数回使用される構造体のメモリ要件を軽減する。たとえば、内部テーブルにサブ構造がある場合、行が初期であっても、各行はメモリストアをインクリメントする。部分構造がボックス型として定義されている場合、読み取りアクセスのみが許可されている限り、各行が同じ初期メモリを指すことができるため、複数のメモリストアは必要ない。
ボックス型のメモリフットプリントは通常の型よりもはるかに小さくなる。ボックス型はディープ構造、つまりテーブル型を含む構造だ。
・テーブルデータ型
テーブルデータ型は、内部テーブルの構造と機能属性を記述することができる。
ABAPデータディクショナリの[ディクショナリ:テーブルデータ型の変更]画面の[行データ型]タブでは、テーブルデータ型の行データ型を設定可能。行データ型は、テーブルデータ型のコンポーネントを定義する。このテーブルデータ型を参照する内部テーブルには、テーブルデータ型の行データ型によって定義された型になる。
テーブルデータ型の行データ型を定義するオプションは複数ある。
・行データ型
このフィールドには、データエレメント、構造、テーブルデータ型、テーブル、ビューなどの既存の型を入力可能だ。次に、そのプロパティがテーブル行のプロパティとしてコピーされる。
・事前定義済データ型
このオプションを選択して、ABAPデータディクショナリのタイプ、長さ、および小数を手動で入力できる。
・参照タデータ型
このオプションを使用すると、オブジェクト参照(クラスまたはインターフェース)またはデータ参照(基本データ型)を指定可能だ。
[初期化とアクセス]タブでは、テーブルのタイプや初期サイズなどの属性を設定できる。使用可能なオプションは次の通りだ。
・初期行数
この値は、テーブルの初期サイズを割り当てるための内部メモリ管理に使用される。これは、内部テーブルを定義するときにABAPプログラムでINITIAL SIZEオプションを使用するのと似ている。
・アクセス
データオブジェクトがこのテーブルデータ型を参照するときに定義されるテーブルの種類を選択できる。次のオプションは、[アクセス]セクションにある。
標準テーブル:標準内部テーブルを定義する。
ソートテーブル:ソートされた内部テーブルを定義する。キーは、[プライマリキー]タブと[セカンダリキー]タブで指定する必要がある。
ハッシュテーブル:ハッシュされた内部テーブルを定義する。キーは、[プライマリキー]タブと[セカンダリキー]タブで指定する必要がある。
索引テーブル:索引テーブルは、標準テーブルとソートテーブルの一般的なテーブルカテゴリを定義する(インデックスがあるため)。
指定なし:任意のテーブル(すべてのテーブルカテゴリ)の一般的なカテゴリを定義する。
ジェネリック型は、プロシージャまたはフィールドシンボルでの仮パラメーターのジェネリック型指定にのみ使用することが可能だ。
[キー]タブでは、主キーを定義することが可能だ。このプロパティは、このテーブルデータ型を参照する内部テーブルに設定される。この画面で使用できるオプションは次の通りだ。
キーの定義
「キー定義」セクションで、主キーに対して次のいずれかを定義できる。
標準キー:これは、行のすべてのフィールドがキーの一部である標準キーを設定する。このオプションは、テーブルデータ型の行データ型がテーブルデータ型自体ではない場合、または行データ型にテーブルデータ型であるコンポーネントが含まれていない場合にのみ選択することが可能だ。
行データ型:主キーは、テーブルデータ型に使用される行データ型。
キーコンポーネント:[コンポーネント選択]ボタンをクリックして、主キーフィールドを手動で選択することが可能だ。
指定なし:これは、キーが定義されていない一般的なテーブルデータ型に使用される。
キーカテゴリ
キーカテゴリは、キーが一意であるか、一意でないかを定義する。キーフィールドが行を一意に定義する場合、キーをUniqueに設定できる。それ以外の場合は、一意ではない。ジェネリック型には[指定なし]を選択することが可能だ。
主キーの他に、追加の二次キーを[セカンダリキー]タブで設置することが可能だ。 テーブルデータ型には最大15のセカンダリキーを定義できる。 各セカンダリキーには一意の名前を付ける必要がある。 セカンダリキーの名前は、PRIMARY_KEYまたはLOOP_KEYにすることはできない。 セカンダリキーは、ソートキーまたはハッシュキーのいずれかとなる。 ソートキーの場合、一意または非一意にすることが可能だ。 ハッシュキーは常に一意である必要がある。 行データ型がテーブルデータ型ではないか、コンポーネントとしてテーブルデータ型が含まれていない場合、セカンダリキーのキー定義はテーブル行全体で定義される。
データ型グループ
データ型グループは、グローバルデータ型宣言が維持されるABAPデータディクショナリで作成される。データ型グループはすでに廃止されている。すべてのセマンティック属性を持つデータ型を維持するためのより良い方法がある。
データ型グループで定義されたデータ型の欠点の1つは、コードで維持されるコメント行を除いて、ドキュメントやその他のセマンティック属性を維持できないことだ。データ型グループを使用するもう1つの欠点は、データ型グループから1つまたは2つのデータ型または定数のみを参照する場合でも、完全なデータ型グループをロードする必要があることだ。
data型グループは、データ型グループの定義を使用するプログラムに下位互換性を提供するためにまだ存在している。データ型グループのデータ型を参照することにより、仮パラメータを定義する汎用モジュールに出くわす場合がある。確保する互換性、呼び出し側プログラムの実際のパラメーターは、データ型グループのデータ型を参照する必要もある。
古いシステムでは、TYPE-POOLSステートメントを使用して、データ型グループ宣言がプログラムから見えるようになった。データ型グループはデフォルトでプログラムに表示されるため、これは不要になった。データ型グループは廃止されたため、新しいデータ型グループを作成することはやめよう。必要な場合にのみ、既存のデータ型グループを使用しよう。たとえば、データ型グループABAPの定数abap_trueおよびabap_falseを使用して、それぞれXまたはスペースをチェックすることが可能だ。
コメント