データ型を作る[[ABAP]]命令。
* 概要 [#pd54c689]
データ型を作る。
ここに価値を見出すとしたら、汎用性しかない。
つまり、データ型には依存するものの同じような処理を行う場合に「ソースをコピペして一部だけ手直しする」という知性のかけらもない行為をしたくない場合に利用する。
つまり、コピペしまくって「5kのプログラム書いたよ!大変だったよ!」なんていう手合いには縁のない命令である。
* オプション [#i7295b2b]
** CREATE DATA xxx (データ型) [#lae1bbc1]
*** 用法 [#a992fa7a]
*** サンプル [#a9eb593d]
# TYPES :
# T_TABLE_ORFER TYPE TABLE OF VBAK.
# DATA :
# REF_ORDER TYPE REF TO T_TABLE_ORDER.
#
# CREATE DATA REF_ORDER.
#
# LOOP AT REF_ORDER->*.
# WRITE / REF_ORDER->*.
# ENDLOOP.
TYPES :
T_TABLE_ORFER TYPE TABLE OF VBAK.
DATA :
REF_ORDER TYPE REF TO T_TABLE_ORDER.
CREATE DATA REF_ORDER.
LOOP AT REF_ORDER->*.
WRITE / REF_ORDER->*.
ENDLOOP.
** CREATE DATA xxx TYPE (ABAPデータ型) [#r130bdc8]
*** 用法 [#p06d280f]
[[DESCRIBE>ABAP/DESCRIBE]]を併用するとええかも。
*** サンプル [#da760729]
# DATA :
# L_DATA TYPE REF TO DATA.
#
# CREATE DATA L_DATA TYPE C LENGTH L_FIELD_LENGTH.
# CREATE DATA L_DATA TYPE P LENGTH L_FIELD_LENGTH DECIMALS L_DECIMAL_LENGTH.
DATA :
L_DATA TYPE REF TO DATA.
CREATE DATA L_DATA TYPE C LENGTH L_FIELD_LENGTH.
CREATE DATA L_DATA TYPE P LENGTH L_FIELD_LENGTH DECIMALS L_DECIMAL_LENGTH.
** CREATE DATA xxx TYPE (テーブル項目)、CREATE DATA xxx LIKE (データオブジェクト) [#udd660d2]
*** 用法 [#q721d551]
下記は、[[レンジテーブル>ABAP/レンジテーブル]]への動的セット例。
*** サンプル [#x42ed186]
# FORM F_FUNC_SET_RANGE_TABLE TABLES E_RANGE
# USING I_SIGN TYPE ANY
# I_OPTION TYPE ANY
# I_LOW TYPE ANY
# I_HIGH TYPE ANY.
# DATA :
# L_DATA TYPE REF TO DATA,
# L_COUNTER TYPE I.
# FIELD-SYMBOLS :
# <F_RANGE> TYPE ANY,
# <F_FIELD> TYPE ANY.
#
# * レンジテーブルの型を取得し、構造へアサイン
# CREATE DATA L_DATA LIKE LINE OF E_RANGE.
# ASSIGN L_DATA->* TO <F_RANGE>.
#
# * 失敗時は抜ける
# IF ( SY-SUBRC <> 0 ).
# EXIT.
# ENDIF.
#
# * 構造の終わりまでループ
# DO.
# * カウンタのインクリメント
# L_COUNTER = L_COUNTER + 1.
# * 構造の項目を順次アサイン
# ASSIGN COMPONENT L_COUNTER OF STRUCTURE <F_RANGE> TO <F_FIELD>.
#
# * 項目の順序ごとに引数を転記
# CASE L_COUNTER.
# WHEN 1.
# <F_FIELD> = I_SIGN.
# WHEN 2.
# <F_FIELD> = I_OPTION.
# WHEN 3.
# <F_FIELD> = I_LOW.
# WHEN 4.
# <F_FIELD> = I_HIGH.
# * ※レンジテーブル以外が引数の場合も抜ける
# WHEN OTHERS.
# EXIT.
# ENDCASE.
# ENDDO.
# ENDFORM.
FORM F_FUNC_SET_RANGE_TABLE TABLES E_RANGE
USING I_SIGN TYPE ANY
I_OPTION TYPE ANY
I_LOW TYPE ANY
I_HIGH TYPE ANY.
DATA :
L_DATA TYPE REF TO DATA,
L_COUNTER TYPE I.
FIELD-SYMBOLS :
<F_RANGE> TYPE ANY,
<F_FIELD> TYPE ANY.
* レンジテーブルの型を取得し、構造へアサイン
CREATE DATA L_DATA LIKE LINE OF E_RANGE.
ASSIGN L_DATA->* TO <F_RANGE>.
* 失敗時は抜ける
IF ( SY-SUBRC <> 0 ).
EXIT.
ENDIF.
* 構造の終わりまでループ
DO.
* カウンタのインクリメント
L_COUNTER = L_COUNTER + 1.
* 構造の項目を順次アサイン
ASSIGN COMPONENT L_COUNTER OF STRUCTURE <F_RANGE> TO <F_FIELD>.
* 項目の順序ごとに引数を転記
CASE L_COUNTER.
WHEN 1.
<F_FIELD> = I_SIGN.
WHEN 2.
<F_FIELD> = I_OPTION.
WHEN 3.
<F_FIELD> = I_LOW.
WHEN 4.
<F_FIELD> = I_HIGH.
* ※レンジテーブル以外が引数の場合も抜ける
WHEN OTHERS.
EXIT.
ENDCASE.
ENDDO.
ENDFORM.
** CREATE DATA TYPE HANDLE (Handler) [#fcbb0538]
*** 用法 [#y010c877]
*** サンプル [#p78472c4]
** CREATE DATA xxx TYPE REF TO yyy [#k51d551b]
*** 用法 [#lff76242]
*** サンプル [#f2d6b953]
** CREATE DATA xxx TYPE TABLE OF (Table), LIKE TABLE OF (Data Object) [#d81df9d2]
*** 用法 [#u486fded]
[[内部テーブル>ABAP/内部テーブル]]を動的に作るとき。
[[SE16>SAPの共通用語/データブラウザ]]みたいなこともできて、[[汎用モジュール>SAPのオブジェクト/汎用モジュール]]GUI_DOWNLOADと併用すれば落とせる。
*** サンプル [#e53a80f8]
# PARAMETERS :
# P_TABNAME TYPE DD02L-TABNAME.
#
# DATA :
# L_DATA TYPE REF TO DATA.
# FIELD-SYMBOLS :
# <F_INTERNAL_TABLE> TYPE ANY TABLE.
#
# CREATE DATA L_DATA TYPE STANDARD TABLE OF (P_TABNAME).
# ASSIGN L_DATA->* TO <F_INTERNAL_TABNAME>.
#
# SELECT *
# FROM P_TABNAME
# INTO TABLE <F_INTERNAL_TABNAME>.
PARAMETERS :
P_TABNAME TYPE DD02L-TABNAME.
DATA :
L_DATA TYPE REF TO DATA.
FIELD-SYMBOLS :
<F_INTERNAL_TABLE> TYPE ANY TABLE.
CREATE DATA L_DATA TYPE STANDARD TABLE OF (P_TABNAME).
ASSIGN L_DATA->* TO <F_INTERNAL_TABNAME>.
SELECT *
FROM P_TABNAME
INTO TABLE <F_INTERNAL_TABNAME>.
** CREATE DATA xxx AREA HANDLE yyy [#dce5545d]
*** 用法 [#vc97a2d0]
*** サンプル [#rf118e84]
~
~
CENTER:【スポンサードリンク】
#htmlinsert(amazon_book_sap_system_implement)
~
~
----
#pcomment(reply)