• 0 Votes 2616 閲覧数


    このトピックは動的なデータオブジェクトを取り上げて、その特徴と使用方法を説明します。

    動的なデータオブジェクトとは

    動的なデータオブジェクトを説明する前にまず静的なデータオブジェクトを説明しておきます。

    プログラムの宣言部分において DATAなどの命令を使用して定義するデータオブジェクトはすべて静的に登録され、プログラムの起動時にはすでに存在する「静的なデータオブジェクト」となります。

    一方、動的なデータオブジェクトとは、プログラム実行時に、CREATE DATA命令を使用して作成されるデータオブジェクトです。

    動的なデータオブジェクトは以下の特徴があります。

    現在の ABAPプログラムの内部セッションの中にデータオブジェクトが登録されます。動的なデータ型を利用することができます。登録されるデータオブジェクトは独自の名称を持ちません。データ参照変数を使用した場合にのみアドレス指定することができます。内容をアクセスするにはフィールドシンボルを利用しなければなりません。動的なデータオブジェクト作成静的なデータ型使用の場合

    静的なデータ型を利用して動的なデータオブジェクトを作成するには、TYPEオプションを使用します。 TYPEオプションの使い方は基本DATA命令と同じですが、タイプ名を指定する際に動的な名称も使用可能です。 以下のような型を使用することができます。

    ABAP基本タイプ
    CREATE DATA dref TYPE c LENGTH 3.TYPESによって定義された任意のデータ型
    TYPES TYP_BKPF TYPE STANDARD TABLE OF BKDF
    CREATE DATA dref TYPE TYP_BKPF.ABAP ディクショナリによる任意のデータ型
    CREATE DATA dref TYPE BKDF.
    CREATE DATA dref TYPE STANDARD TABLE OF BKDF

    サンプルソース:

    DATA typ TYPE c. DATA len TYPE i. DATA dref TYPE REF TO data. FIELD-SYMBOLS <fs> TYPE ANY. typ = 'c'. len = 30. CREATE DATA dref TYPE (typ) LENGTH len. ASSIGN dref->* TO <fs>. <fs> = 'ABCDEF'. write <fs>.動的なデータ型使用の場合

    実行時データ型サービス (RTTS) データ型オブジェクトによって記述される動的なデータ型のデータオ ブジェクトを生成するには、TYPE HANDLEオプションを使います。

    サンプルソース:

    DATA: r_stru TYPE REF TO cl_abap_structdescr, it_comp TYPE cl_abap_structdescr=>component_table, r_comp TYPE abap_componentdescr, r_elem TYPE REF TO cl_abap_elemdescr, r_data TYPE REF TO DATA. DATA: length_of_field TYPE I VALUE 10. FIELD-SYMBOLS: <fs> TYPE ANY. START-OF-SELECTION. r_elem = cl_abap_elemdescr=>get_c( length_of_field ). r_comp-name = 'FIELD1'. r_comp-type = r_elem. APPEND r_comp TO it_comp. r_stru = cl_abap_structdescr=>create( it_comp ). CREATE DATA r_data TYPE HANDLE r_stru. ASSIGN r_data->('FIELD1') TO <fs>. <fs> = 'ABC'. WRITE: / <fs>.


  • 0 Votes 477 閲覧数


    背景

    編集中

    型の作成

    編集中

    基本型

    数値や文字列などのABAP基本型を動的に作成するには、クラスCL_ABAP_ELEMDESCRのメソッドを利用します。 クラスCL_ABAP_ELEMDESCRからいかのようなStaticメソッドが用意されております。

    メソッド名機能GET_Cパラメータで指定された長さのC(テキスト)項目型を取得GET_Nパラメータで指定された長さのN(数値テキスト)項目型を取得GET_Xパラメータで指定された長さのX(16進数)項目型を取得GET_Pパラメータで指定された長さのP(パック数値項目)型を取得

    STRING(文字順序)、XSTRING(バイト順序)、I(整数)、F(浮動小数点数)、D(日付)、T(時間)などの型もメソッドが用意されておりますが、こちらの型は長さの指定がないので、型名を静的に指定すればよく、あえてメソッドを利用する必要がありません。

    下記のサンプルソースでは、長さ10の固定長テキスト項目型を動的生成する方法を示しています。

    DATA c10 TYPE REF TO cl_abap_datadescr. 

    c10 = cl_abap_elemdescr=>get_c( 10 )."動的な型を取得


  • 0 Votes 790 閲覧数


    実行時データ型識別、略語は RTTI です。プログラム実行時にデータ型を識別して処理を行う仕組みです。。

    DESCRIBE FIELD命令を使用

    DESCRIBE FIELD命令を使用して、変数のデータタイプを取得することができます。

    構文

    DESCRIBE FIELD obj TYPE typ.

    obj
    データ型を取得したいデータオブジェクト。通常の変数やフィールドシンポルなどを使用することができます。typ
    取得したデータ型が格納されるデータオブジェクト。データ型

    データ型は1 桁のIDで識別され、IDでは大文字と小文字が区別されます。

    IDデータ型b基本タイプB:1バイト整数(内部用)C基本タイプC:固定長テキスト項目D基本タイプD:日付項目F基本タイプF:浮動小数点数g基本タイプSTRING:可変長文字順序h内部テーブルi基本タイプI:整数lデータ参照N基本タイプN:数値テキスト項目P基本タイプP:パック数値rオブジェクト参照s基本タイプS:2バイト整数(内部用)T基本タイプT:時刻項目uフラット構造vディープ構造X基本タイプX:16進数y基本タイプXSTRING:可変長バイト順序サンプルソースFORM PARSE_STRING_TO_STRUC USING U_STR TYPE STRING CHANGING C_STRUC. CONSTANTS: CONST_DT_DATE TYPE C VALUE 'D', CONST_TAB TYPE STRING VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB. DATA: VL_STRINGS TYPE STRING_TABLE, VL_STR TYPE STRING, VL_DATE TYPE D, VL_TYPE TYPE C. FIELD-SYMBOLS: <FS_WA> TYPE ANY, <FS_COMP> TYPE ANY. SPLIT U_STR AT CONST_TAB INTO TABLE VL_STRINGS. ASSIGN C_STRUC TO <FS_WA>. TRY. LOOP AT TG_STRING INTO VG_STRING. ASSIGN COMPONENT SY-TABIX OF STRUCTURE <FS_WA> TO <FS_COMP>. DESCRIBE FIELD <FS_COMP> TYPE vl_type. IF vl_type = CONST_DT_DATE. "日付型 CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL' EXPORTING date_external = VL_STR accept_initial_date = 'X' IMPORTING date_internal = vl_date EXCEPTIONS date_external_is_invalid = 1 OTHERS = 2. IF sy-subrc = 0. VL_STR = vl_date. ENDIF. ENDIF. ENDIF. MOVE VL_STR TO <FS_COMP>. ENDLOOP. CATCH CX_SY_CONVERSION_ERROR. CLEAR: EX_AFDATA. ENDTRY. ENDFORM.RTTS関連クラスを使用

    CL_ABAP_TYPEDESCR

    | |--CL_ABAP_DATADESCR | | | |--CL_ABAP_ELEMDESCR | |--CL_ABAP_REFDESCR | |--CL_ABAP_COMPLEXDESCR | | | |--CL_ABAP_STRUCTDESCR | |--CL_ABAP_TABLEDESCR | |--CL_ABAP_OBJECTDESCR | |--CL_ABAP_CLASSDESCR |--CL_ABAP_INTFDESCR

    データ型を判定

    型毎のメタ情報

    属性名意味基本型参照型構造型テーブル型クラス型インタフェース型absolute_name型名称○○○○○○type_kind内部ABAPデータ型○○○○○○length内部長○○○○○○decimals小数桁数P×××××OUTPUT_LENGTH出力長○×××××STRUCT_KIND構造タイプ××○×××COMPONENTSコンポーネント(name/type_kind/length/decimals)テーブル××○×××KEYテーブルキー×××○××INITIAL_SIZEテーブルの初期サイズ×××○××KEY_DEFKINDテーブルデータ型定義×××○××HAS_UNIQUE_KEY一意キー定義×××○××TABLE_KINDテーブルカテゴリ×××○××CLASS_KINDクラスタイプ××××○×CREATE_VISIBILITY可視性登録××××○×INTF_KINDインタフェースタイプ×××××○


  • 0 Votes 820 閲覧数


    概要バリアントとは

    バリアントとは、同じ選択条件で実行することが多いプログラムに対して、入力値のセットを保存させておくものです。 レポートプログラムバリアント、画面バリアント、トランザクションバリアントなどがあります。

    バリアント変数とは

    バリアント変数とは、バリアントに格納される値を変数化したものです。 バリアント変数は二つのタイプがあります。

    TYPE P
    単一値を定義することができます。TYPE S
    選択テーブルとして条件を定義することができます。格納テーブル

    バリアント変数の値定義はテーブルTVARVCに格納されます。

    メンテナンストランザクション利用

    バリアント変数のメンテナンスは、トランザクションSTVARVとSTVARVCを使用します。

    STVARV
    クライアント000用STVARVC
    現在のクライアント用プログラム利用

    以下はバリアント変数をABAPプログラムで動的に変更して使用する方法です。

    * バリアント変数テーブルを更新 UPDATE TVARVC SET LOW = WK_FROM   HIGH = WK_TO WHERE NAME = 'VAL_NAME' 

    AND TYPE = 'S'. "タイプ S:SELECT OPTIONS、P:パラメータ


  • 0 Votes 1031 閲覧数


    このトピックでは、SAP標準で用意された採番システムの使用方法を取り上げて説明します。

    概要

    採番処理のために共通的な仕組みを提供します。 

    格納テーブルNRIV
    番号範囲間隔
    メンテナンスSNRO
    番号範囲オブジェクト


    SM56
    番号範囲バッファの管理汎用モジュール

    下記の汎用モジュールを使用できます。

    NUMBER_GET_NEXT 採番NUMBER_GET_INFO 情報取得NUMBER_CHECK チェック