コンテンツフレーム起動

ABAP 命令 文書を SAP ライブラリストラクチャに組み込む

ABAP プログラムのソースコードはコメントと ABAP 命令で構成されています。

コメントは、先行する符号 * ( 行の先頭) " ( 行中の任意の位置) によって識別されます。

ABAP 命令は常に ABAP キーワードで開始し、常にピリオド (.) で終了します。命令は複数行の長さになってもかまいません。または、1 行に複数の命令を含めることもできます。

ABAP 命令は ABAP データ型とオブジェクトを使用します。

命令とキーワード

ABAP 命令の先頭のエレメントが ABAP キーワードです。これによって、命令のカテゴリが決まります。命令カテゴリの種類は以下のとおりです。

宣言命令

このタイプの命令は、データ型を定義したり、プログラムまたはルーチン内の他の命令によって使われるデータオブジェクトを宣言します。プログラムまたはルーチン内に集合した宣言命令によって、宣言部分が構成されます。

宣言キーワードの例:

TYPESDATATABLES

モジュール化命令

このタイプの命令は、ABAP プログラム内の処理ブロックを定義します。

モジュール化キーワードは、さらに以下のように分類できます。

         イベントキーワード

これらのキーワードを含む命令を使用して、イベントブロックを定義します。処理ブロックを終了させる特別な命令はありません。処理ブロックは、次の処理ブロックが導入されたときに終了します。

イベントキーワードの例:

AT SELECTION SCREENSTART-OF-SELECTIONAT USER-COMMAND

         キーワードの定義

これらのキーワードを含む命令を使用して、サブルーチン、汎用モジュール、ダイアログモジュール、およびメソッドを定義します。これらの処理ブロックを終了させるには、END- 命令を使用します。

定義キーワードの例:

FORM .....ENDFORMFUNCTION ...ENDFUNCTION
MODULE ...
ENDMODULE.

制御命令

このタイプの命令を使用して、処理ブロック内の ABAP プログラムのフローを、一定の条件に従って制御します。

制御キーワードの例:

IFWHILECASE

呼出命令

このタイプの命令を使用して、モジュール化命令を使って定義した処理ブロックを呼び出します。呼び出すブロックは、同じ ABAP プログラム内のものでも、別のプログラムにあるものでもかまいません。

呼出キーワードの例:

PERFORMCALLSET USER-COMMANDSUBMITLEAVE TO

操作命令

このタイプのキーワードは、宣言命令を使って定義したデータを処理します。

操作キーワードの例:

WRITEMOVEADD

データベース命令

このタイプの命令は、データベースインタフェースを使用してセントラルデータベースシステム内のテーブルにアクセスします。ABAP には 2 種類のデータベース命令、オープン SQL とネイティブ SQL があります。

オープン SQL

オープン SQL は標準 SQL92 言語のサブセットです。オープンSQL には、データ操作言語 (DML) 命令 (SELECTINSERTDELETE など) のみが含まれています。データ定義言語 (DDL) 命令 (CREATE TABLECREATE INDEX など) は含まれていません。このタイプの機能は ABAP ディクショナリに組み込まれています。オープン SQL には、SAP でサポートしているすべてのデータベースシステムに共通する SQL92 DML 機能がすべて組み込まれています。また、少数の SAP 固有の機能も組み込まれています。オープン SQL 命令のみを使用してデータベースにアクセスする ABAP プログラムは、完全に移植可能です。データベースインタフェースは、オープン SQL のコマンドを該当するデータベースのコマンドに変換します。

ネイティブ SQL

ネイティブ SQL 命令は、最初に変換されずに、データベースインタフェースからデータベースに直接渡されます。そのため、プログラム内のデータベースのすべての特性を利用することができます。とくに、DDL 操作が使用できます。ABAP ディクショナリは、データベーステーブル作成などのタスクに対してネイティブ SQL を使用します。通常の ABAP プログラムでは DDL 命令を使用しても意味がありません。DDL 命令を使用すると、ABAP ディクショナリの共通管理機能を利用できなくなるためです。SQL92 には標準化されたプログラミングインタフェースが用意されていないため、ネイティブ SQL 命令を使用する ABAP プログラムはデータベース固有になります。

データ型とオブジェクト

ABAP 命令が実行時に使用する物理単位を内部プログラムデータオブジェクトといいます。データオブジェクトの内容によって、プログラム内の記憶域が使われます。ABAP 命令は、データオブジェクト名をアドレス指定して、これらの内容にアクセスします。たとえば、命令によってデータオブジェクトの内容を一覧またはデータベースに書き込んだり、ルーチンとの間でデータオブジェクトの内容を受け渡したり、新しい値を割り当てて内容を変更したり、論理式で内容を比較したりすることができます。

ABAP データオブジェクトには技術属性が割り当てられています。これは、ABAP プログラムの実行時に常に完全に定義されます。データオブジェクトの技術属性として、データ型、項目長、小数点以下桁数があります。

データ型は、データオブジェクトの内容が ABAP 命令によって解釈される方法を決定します。データ型は、データオブジェクトの属性として発生するだけでなく、単独で定義することもできます。データ型を単独で定義した場合には、あとでデータオブジェクトと組み合わせて使用することができます。ABAP プログラムの宣言部分で (TYPES 命令を使用) 、または ABAP ディクショナリ内で、データ型を単独で定義することができます。

プログラムで使用するデータ型は、データオブジェクトの使用方法によって異なります。ABAP プログラムのタスクは、単純な入力データのデータベースへの受渡しから、データベースからの大容量の構造化データの処理と出力に至るまで、多岐にわたっています。ABAP には、以下のデータ型が使われています。

事前定義およびユーザ定義の基本データ型

事前定義された非数値データ型として、次の 5 つがあります。

文字列 (C) 、数値文字列 (N) 、日付 (D) 、時刻 (T)16 進数 (X)

また、事前定義された数値タイプとして、次の 3 つがあります。

整数 (I) 、浮動小数点形式の値 (F) 、パック数値 (P)

データ型 DFI および T 項目長は固定しています。項目長によって、データオブジェクトがメモリ内で使用できるバイト数が決まります。データ型 CNX および P では、型定義の一部として長さは定義されません。代わりに、プログラムでデータオブジェクトを宣言する際に長さを定義します。

データ型 P は、ビジネスコンテキストで正確な計算を行う際にとくに有効です。データ型 P のオブジェクトを定義するときに、小数点以下桁数も指定します。

また、TYPES 命令を使用して、各ユーザが独自の基本データ型を ABAP に定義することもできます。その場合は、事前定義されたデータ型を基準とします。これによって、新しいデータ型の技術属性がすべて設定されます。たとえば、事前定義されたデータ型 P にもとづいて、2 つの小数点以下桁数をもつデータ型 P_2 を定義することができます。さらに、この新しいデータ型をデータ宣言に使用することができます。

基本データ型を使用して、個別の基本データオブジェクトを定義します。これらのオブジェクトは、入力値と出力値を転送したり、計算の補助項目として使用したり、中間結果を保存したりするために使用します。以下に説明する集約データ型は、基本データ型で構成されています。 

集約データ型には構造内部テーブルがあります。

構造

構造とは、ユーザ定義によるデータ型の順序です。構造では、データオブジェクトが完全に定義されています。データオブジェクト全体にアクセスすることも、データオブジェクトの個別コンポーネントにアクセスすることもできます。ABAP には、事前定義された構造はありません。したがって、使用先となる ABAP プログラムまたは ABAP ディクショナリに、独自の構造を定義する必要があります。

ABAP プログラムに構造を使用すると、論理的に同じグループに属する作業領域をグループ化することができます。構造内の各エレメントのデータ型は任意であり、エレメント自身が構造または内部テーブルになることも可能なため、構造は幅広い目的で使用できます。たとえば、基本データ型をもつ構造を使用して、プログラム内でデータベーステーブルの行を表示することができます。また、集約エレメントが含まれている構造を使用して、Dynpro のすべての属性やコントロールを個別データオブジェクトに組み込むこともできます。

内部テーブル

内部テーブルは、すべて同じデータ型を割り当てた一連の行で構成されています。

内部テーブルには、以下のような特性があります。

         行タイプ

内部テーブルの行タイプには任意の ABAP データ型 ( 基本タイプ、構造、内部テーブル) を割り当てることができます。

         キー

内部テーブルのキーは、エントリを識別するために使われます。キーは行中の基本項目で構成されます。キーは一意であっても、一意でなくてもかまいません。

         アクセスタイプ

アクセス方法によって、ABAP が個別のテーブルエントリにアクセスする方法が決まります。アクセスタイプには、非ソートテーブル、ソート索引テーブル、ハッシュテーブルという 3 種類があります。
索引テーブルでは、線形索引が設定されており、索引またはキーを指定してテーブルエントリにアクセスできるようになっています。
ハッシュテーブルには線形索引は設定されていません。ハッシュテーブルにアクセスするには、キーを指定しなければなりません。システムは、テーブル管理に独自のハッシュアルゴリズムを使用します。

プログラム内で構造化データを使用しなければならない場合には必ず、内部テーブルを使用してください。1 つの用途として、データベースのデータをプログラム内に保存する方法があります。

参照のデータ型

ABAP オブジェクト内でオブジェクトを参照する際に参照を使用します。参照は、参照変数に保存されています。参照のデータ型によって、参照のプログラム内での処理方法が決まります。クラス変数とインタフェース変数にはいくつかのタイプがあります。

ABAP の参照変数は、他の基本データオブジェクトと同じように扱われます。つまり、参照変数は、単独で発生できるだけでなく、構造または内部テーブルのコンポーネントとして発生することもできます。 

データオブジェクトの宣言

ルーチンのインタフェースパラメータとは別に、ABAP プログラムまたはルーチンの宣言部分ですべてのデータオブジェクトを宣言します。宣言命令によって、オブジェクトのデータ型が、長さや小数点以下桁数などの未設定の技術属性と一緒に設定されます。これらはすべて、プログラムが実際に実行される前に処理されます。ただし、内部テーブルは例外です。 

内部テーブルを宣言する際に、前述した詳細を指定します。ただし、データオブジェクトの全体サイズを指定する必要はありません。内部テーブルの 1 行の長さのみが固定されています。行数 ( メモリでのデータオブジェクトの実際の長さ) は実行時に動的に調整されます。つまり、内部テーブルは、固定構造を保持しながら、動的に拡張することができます。

ルーチンが呼び出された後で、ルーチンのインタフェースパラメータがローカルデータオブジェクトとして生成されます。ルーチン自体の中に、インタフェースパラメータの技術属性を定義することができます。これを定義しない場合は、技術属性の値の発生元であるパラメータの属性が取り込まれます。

 

 

 

 

コンテンツフレーム終了