ABAP言語の世界では、文が命令と呼ばれています。
命令の構文
ABAPの文(命令)はキーワードで始まり、プリオド(「.」)で終了します。
命令一覧
カテゴリ | 命令 | 役割 | 例 |
---|---|---|---|
宣言命令 | TYPES | データ型を定義します | - |
DATA | データオブジェクトを宣言します | - | |
TABLES | - | - | |
制御命令 | IF | IF-ELSE-ENDIF選択制御構造を実装する | - |
ELSE | - | ||
ELSEIF | - | ||
ENDIF | - | ||
CASE | CASE-WHEN-ENDCASE選択制御構造を実装する | - | |
WHEN | - | ||
ENDCASE | - | ||
DO | DO-ENDDO反復制御構造を実装する | - | |
ENDDO | - | ||
WHILE | WHILE-ENDWHILE反復制御構造を実装する | - | |
ENDWHILE | - | ||
呼出命令 | PERFORM | サブルーチンを呼び出す | - |
CALL FUNCTION | 汎用モジュールを呼び出す | - | |
CALL DIALOG | ダイアログモジュールを呼び出す | - | |
CALL METHOD | ABAPオブジェクトのメソッドを呼び出す | - | |
CALL METHOD OF | OLE2オブジェクトのメソッドを呼び出す | - | |
CALL SCREEN | 画面を呼び出す | - | |
CALL SELECTION-SCREEN | 選択画面を呼び出す | - | |
CALL TRANSACTION | トランザクションを呼び出す | - | |
SUBMIT | タイプ 1 の実行可能プログラムを呼び出す | - | |
LEAVE SCREEN | 現在の画面の処理を中止し、次の画面を呼び出す | - | |
LEAVE TO SCREEN | 現在の画面の処理を中止し、動的に定義された次の画面を呼び出す | - | |
LEAVE [PROGRAM] | 現在のプログラムの処理を停止し、このプログラムが呼び出されたポイントに戻る | - | |
LEAVE TO TRANSACTION | - | - | |
モジュール化命令 | AT SELECTION SCREEN | - | - |
START-OF-SELECTION | - | - | |
AT USER-COMMAND | - | - | |
FORM | サブルーチンの定義を開始する | - | |
ENDFORM | サブルーチンの定義を終了する | - | |
FUNCTION | 汎用モジュールの定義を開始する | - | |
ENDFUNCTION | 汎用モジュールの定義を終了する | - | |
MODULE | - | - | |
ENDMODULE | - | - | |
操作命令 | WRITE | - | - |
MOVE | - | - | |
ADD | - | - | |
COMPUTE | - | - | |
オープンSQL | SELECT | データベーステーブルからのデータの読込 | - |
INSERT | データベーステーブルへの行の追加 | - | |
UPDATE | データベーステーブルの行コンテンツの変更 | - | |
MODIFY | データベーステーブルへの行の追加、または既存行のコンテンツの変更 | - | |
DELETE | データベーステーブルからの行の削除 | - | |
OPEN CURSOR FETCH CLOSE CURSOR | カーソルによるデータベーステーブルからの行の読込 | - | |
ネイティブSQL | EXEC SQL ENDEXEC | データベース固有のコマンドが全てできる | - |
UI制御命令 | SET SCREEN | 次の画面を設定する | - |
SET TITLEBAR | 画面タイトルを設定する | - | |
SET PF-STATUS | GUIステータスを設定する | - | |
SET CURSOR | 画面上でカーソルを設定する | - | |
SET MARGIN | 印刷ページのマージンを設定する | - |
チェーン命令
複数の命令は最初の部分が同じであれば、1 つのチェーン命令で連結して書くことができます。 一連の命令を連結するには、同一部分を 1 回だけ書き、その後にコロン(:) を入れます。コロンの後に、個別命令の残りの部分を書いて、それぞれをカンマで区切ります。最後の部分の後にピリオド (.)を付けます。
ブロック
ABAP言語の世界で、ブロックは命令ブロックと呼ばれています。 命令ブロックは制御種類により以下のように分類することができます。
分岐
If-then文
IF <条件式> <命令ブロック> ENDIF.
If-then-else文
IF < 条件1>. < 命令ブロック> ELSEIF < 条件2> < 命令ブロック>. ELSEIF < 条件3>. < 命令ブロック> ..... ELSE. < 命令ブロック> ENDIF.
Case-when文
Switch文 CASE <f>. WHEN <f11> [OR <f12> OR ...]. < 命令ブロック> WHEN <f21>.[OR <f22> OR ...] < 命令ブロック> WHEN ... ...... WHEN OTHERS. < 命令ブロック> ENDCASE.
ループ
Do文
DO [<n> TIMES] [VARYING <f> FROM <f1> NEXT <f2>]. < 命令ブロック> ENDDO.
While文
WHILE < 条件> [VARY <f> FROM <f1> NEXT <f2>]. < 命令ブロック> ENDWHILE.
例外
* Try-catch-endtry * Try-catch-cleanup-endtry
このトピックでは、ABAPの式を取り上げて説明します。
概要
式とは
式というのは結果として値を返すものです。
ABAPは命令ベースの言語であり、命令文に式を使うことができます。
式の構成
式は1つ以上のオペランド、ゼロ以上の演算子、およびゼロ以上の括弧の組み合わせから成ります。 オペランドと演算子や括弧の間に必ずスペースをあけなければなりません。
式の種別
ABAPの式はおもに以下のものがあります。
算術式
算術式とは
算術式とは、算術演算を行う式です。 算術式は結果として単一の算術値をもたらします。
実行順序
ABAPでは、算術式を以下の順序で解釈します。
算術式の結果代入
式の計算結果を変数に代入するには、COMPUTE 命令または代入演算子( を使用します。
COMPUTE <n> = <expression>.
COMPUTE はオプションなので、以下のように命令を記述することもできます。
<n> = <expression>.
<expression> で指定した算術演算の結果は、項目 <n> に代入されます。
論理式
論理式とは
論理式とは、真偽値を返す式です。
関係演算子の使用
関係演算子を使用する論理式では、2つのオペランドが関係演算子を使用する関係式にリンクしています。
論理式では、関係演算子に従って、2つのオペランドの内容が比較されます。
論理式の結合順序
ABAPでは、AND、OR 、NOTを使うことで、いくつかの論理式をつの論理式にまとめることができます。 結合は以下の順序で解釈します。
- 括弧
- NOT
- AND
- OR
論理式の結果代入
ABAPには値が真または偽のブールデータ型がないため、論理式を変数に代入することができません。
論理式の使用
論理式は、プログラムフローの制御に使用されます。
このトピックでは、ABAP言語の定数と変数を取り上げて説明します。
定数
ABAP定数は、CONSTANTS 命令を使用して宣言します。
CONSTANTS <name> TYPE <type> VALUE [<value> | IS INITIAL]
CONSTANS 命令の構文は、以下の例外を除いて DATA 命令とまったく同じです。
- CONSTANTS命令では VALUE オプションを使用しなければなりません。
VALUE オプションで指定した開始値をプログラムの実行中に変更することはできません。 - XSTRINGS 、参照、内部テーブル、または内部テーブルを含む構造に対して定数を定義することはできません。
変数
ABAP定数は、DATA命令を使用して宣言します。
DATAS <name> TYPE <type> VALUE [<value> | IS INITIAL]
完全に定義されたデータ型<type>の他に、もう1つのデータオブジェクト<obj>と同じデータ型の変数<f>を宣言することもできます。
スコープと生存期間
データ型は定義される場所により、スコープが変わります。
データ型 | 変数 | 定数 | ||
---|---|---|---|---|
スコープ | グローバル(システムレベル) | ○※1 | × | × |
グローバル(プログラムレベル) | ○※2 | ○※2 | ○※2 | |
ローカル | ○※3 | ○※3 | ○※3 | |
生存期間 | 自動記憶域期間 | - | ○※4 | - |
静的記憶域期間 | - | ○※5 | - |
- ※1
ABAPディクショナリーで定義されているデータ型は、全てのABAPプログラムで参照することが可能です。 - ※2
ABAPプログラムの「グローバルデータ宣言部分」で定義されているデータ型、変数及び定数は、当プログラムの中でどこでも参照することができます。 - ※3
ABAPプログラムのプロシージャの中で定義されているデータ型、変数及び定数は、当プロシージャの内部でしか参照できません。 - ※4
プロシージャの中で定義された非statics変数の生存期間はプロシージャのの実行が完了するまでです。 - ※5
ABAPプログラムの「グローバルデータ宣言部分」で定義されている変数や、プロシージャの中で定義されたstatics変数の生存期間は、プログラムの実行開始から終了までです。
このトピックでは、ABAP言語のデータ型を取り上げて説明します。
データ型階層
基本タイプ
組込みデータ型とも呼ばれます。 基本タイプは言語により事前定義されています。
カテゴリ | 型 | 初期項目長 | 有効項目長 | 初期値 | 意味 | JAVA | C# |
---|---|---|---|---|---|---|---|
数値 | I | 4 | 4 | 0 | 整数 | int | Int32(int) |
F | 8 | 8 | 0 | 浮動小数 | double | Doubleクラス(double) | |
P | 8 | 1-16 | 0 | 4ビットで一桁を表現し、最後の4ビットを使って符号と小数点を表現する | BigDecimalクラス | Decimal構造体 | |
文字 | C | 1 | 1-65535 | ’ … ’ | テキスト項目(英数字) | Stringクラス | Stringクラス(string) |
D | 8 | 8 | '00000000' | 日付項目( 書式: YYYYMMDD) | Dateクラス | DateTime構造体 | |
N | 1 | 1-65535 | '0 … 0' | テキスト項目(数字) | Stringクラス | Stringクラス(string) | |
T | 6 | 6 | '000000' | 時刻項目(書式: HHMMSS) | Timeクラス | DateTime構造体 | |
バイト | X | 1 | 1-65535 | '0 … 0' | バイト項目 | - | - |
XString | 0 | 可変長 | - | - |
参照タイプ
参照タイプは、他のデータを参照するポイントのことです。
複合タイプ
ABAPの複合タイプは構造体や内部テーブルがあります。typesコマンドより宣言することができます。
構造体
構造体とは,「いろいろな種類の互いに関連するデータをまとめて, 1つのかたまりにしたもの」です。 例えば、「コード、名称、単位、単価」などのデータを一品目分だけまとめて定義すれば、一つの構造体になります。
ABAPでは、構造体を構成する要素がコンポーネントと呼ばれています。 構造体の個別コンポーネントを参照するには、<structure name>-<component name>のように、構造名と要素名の間にハイフンを入れます。
内部テーブル
内部テーブルはABAP固有のデータ型であり、一言でいうと、メモリ上のデータベーステーブルのことです。
非常に簡単に言うと、プログラムとは、区切り文字で区切られた一連のトークンです。 トークンとは、基本的な構文要素としてプログラム内で意味を持つテキストの最小単位であり、字句ともいいます。 トークンを組み合わせて、式や宣言や文を組み立てます。 文とは、プログラム内で実行可能なアルゴリズム動作を記述したものです。 式は、文の中に現れる構文単位で、1 つの値を表します。 宣言では、式や文の中で利用できる識別子(関数や変数の名前など)を定義し、必要に応じて識別子用のメモリを割り当てます。
このトピックでは、ABAP言語の文字集合を紹介し、以下のようなトークンを宣言するための構文を説明します。
- 識別子
- リテナル
- 演算子
- 区切文字
- キーワード
- コメント
文字集合
文字集合は,ソース・プログラムで使用可能か有効文字を定義します。 リリース 6.10 以降のABAPシステムは、ユニコード文字集合 とANSI文字集合が 両方ともサポートされるようになっております。
識別子
識別子は,次の項目の名前を表す文字シーケンスです。
- 変数名
- 定数名
- 型名
- サブルーチン名
- クラス名
- インタフェース名
識別子には,次の規則が適用されます。
- 長さが最大 30 文字です
- + . ,: ( ) を使うことができません
- すべて数字で構成することはできません
リテナル
以下のようなリテナルがあります。
分類 | 定義 | 例 |
---|---|---|
文字列 | 文字列リテラルは、一重の逆向き引用符 (`) に囲まれた文 字列であり、そのデータ型は STRING です | 'abc3d3’ |
数値 | 数字リテラルは、(0 から 9 までの) 連続した数字で構成され、数字の直前に正 (+) または負 (-) の符号を付けることができます | 123 -93 +456 3455555555 |
小数部 がある数値や科学表記によ る数値をリテラルとして表 示できるようにするには、 文字リテラルを使用する必 要があります | '1234567890567890' '+0.58498' '-8473.67' '+12.3E-4' | |
日付 | 'YYYYMMDD'フォーマットのような文字リテナルで定義する必要があります | '20140218' |
時間 | 'HH24MMSS'フォーマットのような文字リテナルで定義する必要があります | '133359' |
演算子
演算子は1つ,または複数のオペランドでの演算を示すトークンであり,ある結果を返してきます。 演算子は以下のようなものがあります。
分類 | 演算子 | 用途 | ABAP命令 | |
---|---|---|---|---|
代入 | = | 代入 | MOVE~TO~ | |
?= | ワイドキャスト代入(参照型の場合 | MOVE~?TO~ | ||
算術 | + | 加算 | ADD~TO~ | |
- | 減算 | SUBTRACT~FROM~ | ||
* | 掛け算 | MULTIPLY~BY~ | ||
/ | 割り算 | DIVIDE~BY~ | ||
** | 累乗 | - | ||
MOD | 整数除算の余り | - | ||
DIV | 整数除算 | - | ||
関係 | =, EQ | 等号 | - | |
<>, NE | 不等号 | - | ||
<, LT | 未満 | - | ||
>, GT | 超過 | - | ||
⇐, LE | 以下 | - | ||
>=, GE | 以上 | - | ||
CO | Contains Only | - | ||
CN | Contains Not Only | - | ||
CA | Contains Any: | - | ||
NA | Contains Not Any | - | ||
CS | Contains String | - | ||
NS | Contains No String | - | ||
CP | Covers Pattern | - | ||
NP | No Pattern | - | ||
論理 | OR | 論理和 | - | |
AND | 論理積 | - | ||
NOT | 否定 | - | ||
ビット | BIT-AND | ビット単位AND | - | |
BIT-OR | ビット単位OR | - | ||
BIT-XOR | ビット単位XOR | - | ||
BIT-NOT | ビット単位NOT | - | ||
リテナル | & | 2つのリテラルを結んで1つのリテラルにする | - | - |
区切文字
ABAPの文字のいくつかは区切り記号として使用され,構文および意味上で独自の機能を持っています
分類 | 区切り記号 | 用途 | 例 |
---|---|---|---|
終端子 | .(ピリオド) | 文の終了 | - |
キーワード
ABAP言語で文は命令とよばれています。命令の先頭の ABAP 用語は ABAP キーワードです。 ABAPキーワードはある種のプログラ ミング言語でのように予約された名称ではありません。 命名規則で ABAP キーワードを使用するのは禁止され ていませんが、可能なら避 けてください。 以下はABAPキーワードの一覧表です。
ABAP-SOURCE | ABBREVIATED | ABS | ABSTRACT | ACCEPT |
ACCEPTING | ACCORDING | ACOS | ACTIVATION | ACTUAL |
ADD | ADD-CORRESPONDING | ADJACENT | AFTER | ALIASES |
ALL | ALLOCATE | ANALYSIS | ANALYZER | AND |
ANY | APPEND | APPENDAGE | APPENDING | APPLICATION |
ARCHIVE | AREA | ARITHMETIC | AS | ASCENDING |
ASIN | ASSERT | ASSIGN | ASSIGNED | ASSIGNING |
AT | ATAN | ATTRIBUTES | AUTHORITY | AUTHORITY-CHECK |
AVG | BACK | BACKGROUND | BACKUP | BACKWARD |
BADI | BEFORE | BEGIN | BETWEEN | BIG |
BINARY | BIT | BIT-AND | BIT-NOT | BIT-OR |
BIT-XOR | BLACK | BLANK | BLANKS | BLOCK |
BLOCKS | BLUE | BOUND | BOUNDARIES | BOUNDS |
BREAK-POINT | BT | BUFFER | BY | BYPASSING |
BYTE | BYTE-CA | BYTE-CN | BYTE-CO | BYTE-CS |
BYTE-NA | BYTE-NS | BYTE-ORDER | C | CA |
CALL | CALLING | CASE | CASTING | CATCH |
CEIL | CENTERED | CHAIN | CHAIN-INPUT | CHAIN-REQUEST |
CHANGE | CHANGING | CHAR-TO-HEX | CHARACTER | CHARLEN |
CHECK | CHECKBOX | CIRCULAR | CLASS | CLASS-CODING |
CLASS-DATA | CLASS-EVENTS | CLASS-METHODS | CLASS-POOL | CLEANUP |
CLEAR | CLIENT | CLIKE | CLOCK | CLOSE |
CN | CO | CODE | CODEPAGE | CODING |
COL_BACKGROUND | COL_GROUP | COL_HEADING | COL_KEY | COL_NEGATIVE |
COL_NORMAL | COL_POSITIVE | COL_TOTAL | COLLECT | COLOR |
COLUMN | COMMENT | COMMENTS | COMMIT | COMMON |
COMMUNICATION | COMPARING | COMPONENT | COMPONENTS | COMPRESSION |
COMPUTE | CONCATENATE | CONDENSE | CONDITION | CONNECT |
CONNECTION | CONSTANTS | CONTEXT | CONTEXTS | CONTINUE |
CONTROL | CONTROLS | CONVERSION | CONVERT | COPIES |
COPY | CORRESPONDING | COS | COSH | COUNT |
COUNTRY | COVER | CP | CPI | CREATE |
CS | CSEQUENCE | CURRENCY | CURRENT | CURSOR |
CURSOR-SELECTION | CUSTOMER-FUNCTION | D | DATA | DATABASE |
DATAINFO | DATASET | DATE | DAYLIGHT | DBMAXLEN |
DD/MM/YY | DD/MM/YYYY | DDMMYY | DEALLOCATE | DECIMALS |
DEFAULT | DEFERRED | DEFINE | DEFINING | DEFINITION |
DELETE | DELETING | DEMAND | DEPARTMENT | DESCENDING |
DESCRIBE | DESTINATION | DETAIL | DIALOG | DIRECTORY |
DISCONNECT | DISPLAY | DISPLAY-MODE | DISTANCE | DISTINCT |
DIV | DIVIDE | DIVIDE-CORRESPONDING | DO | DUMMY |
DUPLICATE | DUPLICATES | DURING | DYNAMIC | DYNPRO |
E | EDIT | EDITOR-CALL | ELSE | ELSEIF |
ENABLED | ENABLING | ENCODING | END | END-ENHANCEMENT-SECTION |
END-LINES | END-OF-DEFINITION | END-OF-FILE | END-OF-PAGE | END-OF-SELECTION |
ENDAT | ENDCASE | ENDCATCH | ENDCHAIN | ENDCLASS |
ENDDO | ENDENHANCEMENT | ENDEXEC | ENDFORM | ENDFUNCTION |
ENDIAN | ENDIF | ENDING | ENDINTERFACE | ENDLOOP |
ENDMETHOD | ENDMODULE | ENDON | ENDPROVIDE | ENDSELECT |
ENDTRY | ENDWHILE | ENHANCEMENT | ENHANCEMENT-POINT | ENHANCEMENT-SECTION |
ENHANCEMENTS | ENTRIES | ENTRY | ENVIRONMENT | EQ |
ERRORMESSAGE | ERRORS | ESCAPE | ESCAPING | EVENT |
EVENTS | EXCEPTION | EXCEPTION-TABLE | EXCEPTIONS | EXCLUDE |
EXCLUDING | EXEC | EXECUTE | EXISTS | EXIT |
EXIT-COMMAND | EXP | EXPAND | EXPIRATION | EXPLICIT |
EXPONENT | EXPORT | EXPORTING | EXTENDED | EXTENSION |
EXTRACT | F | FETCH | FIELD | FIELD-GROUPS |
FIELD-SYMBOLS | FIELDS | FILE | FILTER | FILTERS |
FINAL | FIND | FIRST | FIRST-LINE | FIXED-POINT |
FKEQ | FKGE | FLOOR | FLUSH | FONT |
FOR | FORM | FORMAT | FORWARD | FOUND |
FRAC | FRAME | FRAMES | FREE | FRIENDS |
FROM | FTO | FUNCTION | FUNCTION-POOL | GAPS |
GE | GENERATE | GET | GIVING | GKEQ |
GKGE | GLOBAL | GREEN | GROUP | GROUPS |
GT | HANDLE | HANDLER | HASHED | HAVING |
HEAD-LINES | HEADER | HEADERS | HEADING | HELP-ID |
HELP-REQUEST | HIDE | HIGH | HINT | HOLD |
HOTSPOT | I | ICON | ID | IDENTIFICATION |
IDENTIFIER | IDS | IF | IGNORING | IMMEDIATELY |
IMPLEMENTATION | IMPLEMENTATIONS | IMPORT | IMPORTING | IN |
INCLUDE | INCLUDES | INCLUDING | INCREMENT | INDEX |
INDEX-LINE | INFOTYPES | INHERITING | INIT | INITIAL |
INITIALIZATION | INNER | INOUT | INPUT | INSERT |
INSTANCES | INTENSIFIED | INTERFACE | INTERFACE-POOL | INTERFACES |
INTERNAL | INTERVALS | INTO | INVERSE | INVERTED-DATE |
IS | JOB | JOIN | KEEP | KEEPING |
KERNEL | KEY | KEYS | KEYWORDS | KIND |
LANGUAGE | LAST | LATE | LAYOUT | LE |
LEADING | LEAVE | LEFT | LEFT-JUSTIFIED | LEGACY |
LENGTH | LEVEL | LEVELS | LIKE | LINE |
LINE-COUNT | LINE-SELECTION | LINE-SIZE | LINEFEED | LINES |
LIST | LIST-PROCESSING | LISTBOX | LITTLE | LOAD |
LOAD-OF-PROGRAM | LOCAL | LOCALE | LOG | LOG-POINT |
LOG10 | LOGFILE | LOOP | LOW | LOWER |
LPI | LT | M | MAIN | |
MAJOR-ID | MARGIN | MARK | MASK | MATCH |
MATCHCODE | MAX | MAXIMUM | MEMORY | MESSAGE |
MESSAGE-ID | MESSAGES | METHOD | METHODS | MIN |
MINIMUM | MINOR-ID | MM/DD/YY | MM/DD/YYYY | MMDDYY |
MOD | MODE | MODIF | MODIFIER | MODIFY |
MODULE | MOVE | MOVE-CORRESPONDING | MULTIPLY | MULTIPLY-CORRESPONDING |
N | NA | NAME | NAMETAB | NATIVE |
NB | NE | NESTING | NEW | NEW-LINE |
NEW-PAGE | NEW-SECTION | NEXT | NO | NO-DISPLAY |
NO-EXTENSION | NO-EXTENSIONS | NO-GAP | NO-GAPS | NO-GROUPING |
NO-HEADING | NO-SCROLLING | NO-SIGN | NO-TITLE | NO-TOPOFPAGE |
NO-ZERO | NODE | NODES | NON-UNICODE | NON-UNIQUE |
NOT | NP | NS | NULL | NUMBER |
NUMERIC | NUMOFCHAR | O | OBJECT | OBJECTS |
OBLIGATORY | OCCURRENCE | OCCURRENCES | OCCURS | OF |
OFF | OFFSET | OLE | ON | ONLY |
OPEN | OPTION | OPTIONAL | OPTIONS | OR |
ORDER | OTHERS | OUT | OUTER | OUTPUT |
OUTPUT-LENGTH | OVERFLOW | OVERLAY | P | PACK |
PACKAGE | PADDING | PAGE | PAGES | PARAMETER |
PARAMETER-TABLE | PARAMETERS | PART | PATTERN | PERCENTAGE |
PERFORM | PERFORMING | PERSON | PF | PF-STATUS |
PINK | PLACES | POOL | POSITION | PRECOMPILED |
PREFERRED | PRESERVING | PRIMARY | PRINT-CONTROL | |
PRIORITY | PRIVATE | PROCEDURE | PROCESS | PROGRAM |
PROPERTY | PROTECTED | PROVIDE | PUBLIC | PUSHBUTTON |
PUT | QUEUE-ONLY | QUICKINFO | RADIOBUTTON | RAISE |
RAISING | RANGE | RANGES | READ | READ-ONLY |
RECEIVE | RECEIVED | RECEIVER | RECEIVING | RED |
REDEFINITION | REF | REFERENCE | REFRESH | REGEX |
REJECT | RENAMING | REPLACE | REPLACEMENT | REPLACING |
REPORT | REQUEST | REQUESTED | RESERVE | RESET |
RESOLUTION | RESPECTING | RESPONSIBLE | RESULT | RESULTS |
RETURN | RETURNCODE | RETURNING | RFC | RIGHT |
RIGHT-JUSTIFIED | ROLLBACK | ROUND | ROWS | RUN |
SAP | SAP-SPOOL | SAVING | SCAN | SCREEN |
SCROLL | SCROLL-BOUNDARY | SCROLLING | SEARCH | SECONDS |
SECTION | SELECT | SELECT-OPTIONS | SELECTION | SELECTION-SCREEN |
SELECTION-SET | SELECTION-SETS | SELECTION-TABLE | SELECTIONS | SEND |
SEPARATE | SEPARATED | SET | SHARED | SHIFT |
SHORTDUMP-ID | SIGN | SIMPLE | SIN | SINGLE |
SINH | SIZE | SKIP | SKIPPING | SMART |
SOME | SORT | SORTABLE | SORTED | SOURCE |
SPECIFIED | SPLIT | SPOOL | SPOTS | SQL |
SQRT | STABLE | STAMP | STANDARD | START-OF-SELECTION |
STARTING | STATE | STATEMENT | STATEMENTS | STATIC |
STATICS | STATUSINFO | STEP-LOOP | STOP | STRING |
STRLEN | STRUCTURE | STRUCTURES | SUBKEY | SUBMATCHES |
SUBMIT | SUBROUTINE | SUBSCREEN | SUBSTRING | SUBTRACT |
SUBTRACT-CORRESPONDING | SUFFIX | SUM | SUMMARY | SUMMING |
SUPPLIED | SUPPLY | SUPPRESS | SWITCH | SWITCHSTATES |
SYMBOL | SYNCPOINTS | SYNTAX-CHECK | SYNTAX-TRACE | SYSTEM-CALL |
SYSTEM-EXCEPTIONS | SYSTEM-EXIT | T | TAB | TABBED |
TABLE | TABLES | TABLEVIEW | TABSTRIP | TAN |
TANH | TASK | TEST | TESTING | TEXT |
TEXTPOOL | THEN | TIME | TIMES | TITLE |
TITLE-LINES | TITLEBAR | TO | TOKENIZATION | TOKENS |
TOP-LINES | TOP-OF-PAGE | TRACE-FILE | TRACE-TABLE | TRAILING |
TRANSACTION | TRANSFER | TRANSFORMATION | TRANSLATE | TRANSPORTING |
TRMAC | TRUNC | TRUNCATE | TRUNCATION | TRY |
TYPE | TYPE-POOL | TYPE-POOLS | TYPES | ULINE |
UNASSIGN | UNDER | UNICODE | UNIQUE | UNIT |
UNIX | UNPACK | UNTIL | UP | UPDATE |
UPPER | USER | USER-COMMAND | USING | UTF-8 |
VALID | VALUE | VALUE-REQUEST | VALUES | VARY |
VARYING | VERIFICATION-MESSAGE | VERSION | VIA | VISIBLE |
WAIT | WARNING | WHEN | WHENEVER | WHERE |
WHILE | WIDTH | WINDOW | WINDOWS | WITH |
WITH-HEADING | WITH-TITLE | WITHOUT | WORD | WORK |
WRITE | X | XML | XSEQUENCE | XSTRING |
XSTRLEN | YELLOW | YYMMDD | Z | ZONE |
コメント
コメントは、ある記号から行末までをコメントとして扱う行コメントと、2つの記号で前後を括りその内部をコメントとして扱うブロックコメントに大別されることができます。 ABAP言語は、行コメントのみをサポートしております。行全体をコメントにする場合は、行の先頭にアスタリスク (*) を入れます。1 行の一部をコメントにする場合は、コメントの前に二重引用符 (“) を入れます。
************************************************ * REPORT DEMO_HELLO_WORLD * * WRITTEN BY LI WENFENG, 02/18/2014 * * LAST CHANGED BY LI WENFENG, 02/18/2014 * ************************************************ REPORT DEMO_HELLO_WORLD. * Selection Screen PARAMETERS input(12) TYPE c DEFAULT 'Hello World!'. * Dynpro CALL SCREEN 100. * List SKIP TO LINE 10. " sets the line POSITION 40. " sets the position WRITE input. " output<span style="background-color:rgb(255, 255, 255);white-space:normal;font-family:"Trebuchet MS", "Helvetica Neue", Helvetica, Tahoma, sans-serif;font-size:16px"></span><span style="background-color:rgb(255, 255, 255);white-space:normal;font-family:"Trebuchet MS", "Helvetica Neue", Helvetica, Tahoma, sans-serif;font-size:16px"></span>
このトピックでは、ABAP開発のオブジェクト指向要素を取り上げて説明します。
オブジェクト指向とは
プログラミングにおけるオブジェクト指向とは、いかのようなコンセプトでプログラムを構築する手法で。
- プログラムをオブジェクトに分割して、オブジェクト間のコラボレーションによりアプリケーション機能を実現
- オブジェクトはデータを内蔵しており、それをアクセスできる属性やメソッドをインタフェースとして外部に提供
- オブジェクトは継承することにより、汎用化することができる
クラスとインタフェース
クラスとはデータとその操作手順であるメソッドをまとめたオブジェクトの雛型を定義したものです。 クラスはインスタンス化することができます。
インタフェースとは、クラスのアクセスインタフェースを明確に定義したものです。 インタフェースからインスタンスを作成することができません。
クラスの種類
クラスは、ローカルクラスとグローバルクラスの2種類があります。
- ローカルクラス
ローカルクラスは、レポートプログラムやダイアログプログラムなど、個別プログラムの内部で実装されるクラスです。
ローカルクラスは外部のプログラムに不可視です。 - グローバルクラス
グローバルクラスのソースコードはクラスビルダを使って記述し、システム全体のクラスライブラリに格納されます。
グローバルクラスはどのプログラムからも使うことができます。
ローカルクラスとグローバルクラスはスコープが異なりますが、その以外の違いはとくにありません。
属性
属性は、オブジェクトに関連付けられているデータに対するインタフェースです。 属性はクラスのインスタンスに作用するインスタンス属性と、クラスそのものに作用する静的属性があります。
メソッド
メソッドは、クラスに関連付けられているサブルーチンです。大半のメソッドは、クラスのインスタンスに作用します。中には、クラスそのものに作用するメソッドもあります、これは静的メソッドと呼ばれます。
クラスのインスタンス化
クラスをインスタンス化するには、CREATE OBJECT命令を使用します。
このトピックでは、ABAP開発の構造化手法を取り上げて説明します。構造化手法はモジュール化とも呼ばれます。
概要
ABAPプログラムの処理ロジックは処理ブロックで構成されます。
処理ブロックには、ABAP 実行システムによって外部プログラムから呼び出される処理ブロックと、ABAPプログラムの ABAP 命令による呼出が可能な処理ブロックの2種類があります。
ABAP命令による呼出が可能な処理ブロックは、プロシージャと呼ばれます。
カテゴリ | 処理ブロック | 呼出元 | ローカルデータ領域 |
---|---|---|---|
画面制御 | ダイアログモジュール | PBO、PAI (個別画面) | 無 |
イベントブロック | PBO、PAI (標準の選択、一覧画面) | 無 | |
プロシージャ | サブルーチン | 有 | |
汎用モジュール | 有 | ||
メソッド | 有 |
処理ブロックは分離不可能な構文的モジュール化単位であり、他の処理ブロックを含むことはできません。
ダイアログモジュール
ダイアログモジュールは、画面の初期表示時やユーザがなんらかのアクションを起こした後に、ABAP実行環境(ダイアログプロセッサ) から、Dynno制御ロジックのPAI、PBOを通して、呼び出されます。
ダイアログモジュールは MODULE 命令によって導入され、ENDMODULE 命令によって終了します。
以下の図でダイアログモジュールの呼出イメージを示します。
ここのダイアログモジュールはcall dialogで呼ばれている「ダイアログモジュール」とは別物です。
call dialogで呼ばれている「ダイアログモジュール」はアプリケーションプログラムを通常の「Transaction」ではなく、呼出元のプログラムのSAP LUWの中に動く「dilalog」として呼び出すための名称というものです。
以下の図でダイアログモジュールの実装イメージを示します。
イベントブロック
サブルーチン
サブルーチンは、主としてローカルなモジュール化で使用されます。一般に、サブルーチンは、そのサブルーチンが定義されているプログラムから呼び出されます。サブルーチンを使用して、プログラム内で繰り返し使用する機能を記述することができます。
サブルーチンは 全てのABAPプログラムで定義することができます。
汎用モジュール
汎用モジュールは、グローバルなモジュール化で使用され、常に別のログラムから呼び出されます。
汎用モジュールは汎用グループで定義する必要があり、任意のプログラムから呼び出すことができます。
汎用モジュールにより、データ交換の固定インタフェースが処理されます。たとえば、入力パラメータにデフォルトの値を割り当てることができます。また、このインタフェースでは例外処理もサポートしています。これによって、エラーを検出し、そのエラーを対処するため呼び出し元プログラムに返し、処理させることができます。
汎用モジュールは独自のメモリ領域を使用します。呼び出し元プログラムと汎用モジュールとが、共有メモリ領域を使ってデータ交換を行うことはできません。汎用モジュールインタフェースを使用しなければなりません。
このトピックでは、ABAPプログラム実行時のメモリ構造を取り上げて説明します。
メインセッション
サーバへログインすると、ユーザに1つの「ユーザセッション」が開かれます。 ユーザが同時に最大6つのウィンドウを開くとができます。これらのウィンドウはそれぞれ、アプリケーションサーバ上で共有メモリの専用領域を使用する「メインセッション」に対応しています。
内部セッション
メインセッションで起動した最初のアプリケーションプログラムによって、メインセッション内の内部セッションが開きます.
上記の図で示した通り、プリケーションプログラム(TYPE 1、TYPE M)が呼び出されるたびに、新しい内部セッションが作成されます。その他プログラムは新しい内部セッションを作成することがなく、必ず呼び出し元のアプリケーションプログラムの内部セッションで動作します。
共有メモリ
ABAPプログラムの間にデータを共有できるメモリは、SAPメモリとABAPメモリの2種類がありまして、それぞれスコープが異なります。
- SAPメモリ
同じユーザセッション内にすべて可視です。別々のメインセッションで起動された各プログラムは同じSAPメモリを共有できます。 - ABAPメモリ
同じメインセッション内なら可視です。同じメインセッションで動作する各プログラムは同じABAPメモリを共有しています。
このトピックでは、ABAPプログラムの構成を取り上げて説明します。
プログラムの構成
大きく分けるとABAPプログラムは、処理ロジックと各画面コンポーネントから構成されます。GUIをもっていないプログラムは、処理ロジックのみとなります。
SAPのドキュメントでは、処理ロジックのみをABAPプログラムと呼ぶことも多く見受けられます。
処理ロジック
以下の図ではABAPプログラムの処理ロジックの構造を示します。
- プログラム導入部
独立した ABAPプログラムは常に導入命令から始まります。導入命令はプログラムのタイプによって異なります。 - グローバル宣言部
すべての ABAP プログラムにおいて、プログラム導入部の後ろにグローバルデータ、クラス、および選択画面のための宣言部が続きますグローバルデータ、クラス、選択画面のための宣言部 - 処理ブロック
プログラムのソースコード内のグローバル宣言部の下には、任意の順序で ABAP プログラムの処理ブロックを列挙することができます.
以下の下のタイプの処理ブロックが利用可能です。
●ダイアログモジュール (ローカルデータ領域なし)
●イベントブロック (ローカルデータ領域なし、2 つの例外あり)
●プロシージャ (メソッド、サブルーチン、汎用モジュール。独自のローカルデータ領域を使用)
画面コンポーネント
画面を構成するコンポーネントはいかのようなものがあります。
- Dynpro
- GUIステータス
- GUI表題
- メッセージ
- WebDynpro
それぞれ独立したオブジェクトとして存在します。
SAPが標準で用意した各モジュールやアドオンとして開発された各アプリケーションは、すべてSAPのプログラムとして、アプリケーションサーバのワークプロセスに対して、 アプリケーションサーバ内で実行されます。
ABAPプログラムには以下のプログラムタイプがあります。
- TYPE 1: 実行可能プログラム
- TYPE M: モジュールプール
- TYPE F: 汎用グループ
- TYPE K: クラスプール
- TYPE J: インタフェースプール
- TYPE S: サブルーチンプール
- TYPE T: タイププール
- TYPE I: インクルードプログラム
WebDynproは、処理ロジックを記述するにクラスプールとインタフェースプールを利用してるため、 新たなプログラムタイプの追加はありません。
ABAPプログラムの概説は、以下のリンクからご参考くださ。