基本のルール
ABAPを書く上での基本的なルールは次の通り。
・文末は「.(ピリオド)」で終わる。
・文の先頭の部分はABAPキーワードというもので始まる。
・文の中での単語同士は最低でも半角スペース1つ以上間をあけること。
(全角スペースはエラーになるので注意!)
・大文字と小文字は区別されない。どう書くかはその場のコーディングルールに従おう。
・行の先頭に「*(アスタリスク)」がある場合、その行はコメントアウトされる。
・行の途中に「”(ダブルクォーテーション)」がある場合、その後ろはコメントアウトされる(インラインコメントと呼ぶ)。
* コメント
WRITE 'hello world'. "インラインコメント
データ型
データオブジェクト(データを入れるための入れ物)の形を定義するもの。
主に基本型、複合型、参照型の3つがある。
・基本型
基本型はさらに以下の2つに分類される。
①定義済み
標準で最初から定義されているもの
「C」(テキスト用)や「I」(整数)などいくつか存在する。
②ユーザー定義
ユーザーが追加で定義した型のこと
SE11などで登録が可能
使い方は以下の通り。
DATA データオブジェクト名 TYPE データ型名.
DATA name TYPE c.
とした場合、「name」という名前の入れ物を「C」という形で作ることができる。
データ型には設定できる最大の長さと初期の長さも設定されている。
標準で用意されている「C」は初期の長さは「1」、最大は「65535」となっている。
上のパターンでは長さを指定していないため、「name」の長さは「1」(1文字だけ格納することができる)。
長さを指定したいときは次のようにすることで指定が可能だ。
DATA name(5) TYPE c.
DATA name TYPE c LENGTH 5.
どちらの書き方も「name」は長さ「5」となる
・複合型
ほかのデータ型の組み合わせの型。
・参照型
ほかのデータオブジェクトを参照する型。
型変換
データオブジェクト同士でデータを移動(中身をコピーしたり)する場合、
そのデータオブジェクト同士が同じ型・同じ長さの必要がある。
内部書式と外部書式
日付などはユーザーによって表示したい形式が異なることがある。
AさんはYYYY/MM/DDがよくてBさんはDD.MM.YYYYがいい。
この場合、出力するときはそれぞれのユーザーごとの好きな表示方法で出力する(=外部書式)が、SAP上のデータとしてはどちらもYYYYMMDDとして保存してある(=内部書式)。
SE11やSE16Hなどからデータの中身を見たりすると内部書式で表示される。
出力長
データ型にはその型の最大の長さ(項目長)とは別に出力長という長さの項目も持っている。
この出力長は例えば日付を出力する際の「/」のような記号も含めた長さとなっている。
Ex.日付の場合
項目長→8(YYYYMMDD)
出力長→10(YYYY/MM/DD)
データエレメント
ユーザーが定義する基本型のデータ型はデータエレメントと呼ばれる。
これはABAPデータディクショナリ(SE11)で登録することが可能だ。
登録方法は次の通り
SE11>ラジオボタン「データ型」を選択>「作成」ボタン>ラジオボタン「データエレメント」
次の画面では「ドメイン」を使用するか定義済みのデータ型を使用してデータエレメントを作成するか選択することが可能。
ここまで行った状態で「有効化」ボタンを押すことでデータエレメントの作成は完了だ。
ドメイン
データエレメント作成時に使用できる技術的な属性を設定できるもの。
データ型や文字数、小数点桁数など設定することが可能だ。
ドメインを使用するメリットは、名前が異なる同じ内容のデータエレメントを複数作る場合にドメインを修正することでその複数データエレメントの修正を1度の修正で済ませることができる。
ドメインもSE11から作成することが可能だ。
データオブジェクト
データを入れる入れ物のこと。
設定されたデータ型から技術属性が導き出される。
ABAPプログラム内で宣言することでのみ作成でき、そのプログラム内でしか使用できない。
またデータ型やドメインなどと違いシステム内で事前に定義することもできない。
データオブジェクトは永続的ではなく、プログラム実行中にのみ存在する。
ABAPではDBテーブルなど永続的なデータに変更を加える際、直接DBを書き換えるのではなく、一度更新後の値をデータオブジェクトに格納し、データオブジェクトの値でDBを更新するという流れになる。
データオブジェクトの種類は以下の通り
・リテラル(定数)
プログラム内での宣言が必要なく、名前もないデータオブジェクト。
プログラム内で値の変更ができない。
以下のようなものがある。
①文字リテラル→「'(シングルクォーテーション)」で囲まれた文字列
’こんにちは’
’ABCDE’
②数値リテラル→数値のみのもの。「+」「-」は使えるが小数点や指数などは使用できない。
123456789
+555
-1111
・変数
プログラム内で値の変更が可能。
ABAP命令で宣言し、名前なども付ける必要がある。
DATA
DATAはデータオブジェクトを作るときに使用するキーワードだ。
グローバル宣言領域で宣言することでグローバル変数として宣言することができる。
プロシージャ内で宣言すればローカル変数として宣言することができる。
(グローバル変数:プログラム中どこでも使用可能
ローカル変数:宣言したプロシージャ内でのみ使用可能)
基本的な使い方は次の通りだ。
DATA データオブジェクト名 TYPE データ型.
☆インライン宣言
今までは変数は使用する前に定義しておく必要があったが、SAP NetWeaver7.4からインライン宣言が導入された。
これにより事前に変数を定義せず、必要な時にその場で宣言して使用することが可能となった。
* 従来の宣言
DATA ZT_BSEG TYPE STANDARD TABLE OF BSEG.
DATA ZD_BSEG TYPE BSEG.
LOOP AT ZT_BSEG INTO ZD_BSEG.
:
ENDLOOP.
*インライン宣言
DATA ZT_BSEG TYPE STANDARD TABLE OF BSEG.
LOOP AT ZT_BSEG INTO DATA(ZD_BSEG).
:
ENDLOOP.
Parameters
Parametersには2つの役割がある。
1つはDATAと同じようにデータオブジェクトの作成。
もう1つは選択画面の作成だ。
PARAMETERSを使用すると、プログラムを実行したときにユーザーが値を入力できる画面、項目が自動的に作られる。
基本的な使い方は次の通り。
PARAMETERS データオブジェクト名 TYPE データ型.
CONSTANTS(定数)
CONSTANTSは定数(プログラム内で中身を変更できないデータオブジェクト)
プログラム中ではできる限りリテラル(定数)ではなくCONSTANTSを使おう。
基本的な使い方は次の通り。
CONSTANTS データオブジェクト名 TYPE データ型 VALUE ‘設定したい値’.
テキストシンボル
テキストシンボルもデータオブジェクトの1つだ。
ただし、ほかのデータオブジェクトとは違い、プログラム中に宣言はしない。
登録する方法の1つは次の通り。
SE80>ジャンプ>テキストエレメント>テキストシンボル
テキストシンボルは3桁の英数字で設定し、それぞれ定数(文字も数値も)を割り当てることが可能だ
ABAP Keyword
ABAP Keywordの大まかな種類的なイメージ。
以下のようなものが存在する。
・宣言Statement
DATA,PARAMETERS,CONSTANTS,SELECT-OPTIONSなど
・モジュール化Statement
INCLUDE,START-OF-SELECTION,FORM,ENDFORMなど
・制御Statement
IF,ELSEIF,ELSE,ENDIF,EXITなど
・呼び出しStatement
CALL TRANSACTIN,PERFORM,SUBMITなど
・操作Statement
INSERT,DELETE,MODIFY,APPEND,SORT,CONCATENATEなど
・データベースアクセスStatement
SELECT,INSERT,UPDATEなど
ABAPプログラムの作成方法
ABAPプログラムの作成方法の1つは次の通り。
・SE38を実行
・プログラムの名称を入力しラジオボタン「ソースコード」を選択、登録ボタンを押す。
この時、名前は「Y」か「Z」で始まる必要があるので注意。
・表示されるポップアップウィンドウではプログラムのタイトル(日本語でのプログラム名のメモ)や各属性を設定することが可能だ。
プログラムのタイトルと種類は必須項目となっている。
種類は以下のようなものがあるが、まずは実行可能プログラムを選ぶといいだろう。
-実行可能プログラム
-モジュールプール
-サブルーチンプール
-インクルードプログラム
それ以外の各属性については次の通りだ。
ステータス
テストプログラムや本番用なのかなどステータスの設定が可能
アプリケーション
どこの領域のプログラムか設定が可能(FIなのかSDなのかというイメージ)
承認グループ
権限チェックに使用できる単位としてのグループを設定することが可能
エディタロック
このチェックをONにすると作った人以外変更や削除ができなくなる。・属性を決定し保存すると「移送」を確認するポップアップが表示される。
テストプログラムの場合など移送する必要がない場合は「ローカルオブジェクト」ボタンを押そう。
コメント