トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

ABAP/CREATE DATA の変更点

Top/ABAP/CREATE DATA

データ型を作る[[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)