動的な内部テーブルからデータを受け取りたい。
たとえば、内部テーブルには2つのフィールドがあります。数値-名前
そしてそれは次のような情報で満たされています:
同じデータのみを取得するにはどうすればよいですか?数字のデータベースを取得したい。同じ数字に色を付けたいです。つまり、keyidの1、2、6は赤、3と4は青、5は黄色です。内部テーブルは動的であるため、常に1の数値があるかどうかはわかりません。
動的な内部テーブルからデータを受け取りたい。
たとえば、内部テーブルには2つのフィールドがあります。数値-名前
そしてそれは次のような情報で満たされています:
同じデータのみを取得するにはどうすればよいですか?数字のデータベースを取得したい。同じ数字に色を付けたいです。つまり、keyidの1、2、6は赤、3と4は青、5は黄色です。内部テーブルは動的であるため、常に1の数値があるかどうかはわかりません。
動的テーブルに探している列が常にあるかどうかわからないということだと思います。
ランタイムタイプサービス(RTTS)を使用して、動的テーブルの構造を決定します。次のデータは、構造に「NUMBER」というフィールドがあるかどうかを判別します。テーブルlt_componentを使用して、読み取る必要のあるコンポーネントを確認できます(ASSIGN COMPONENT number OF STRUCTURE <fs_line> TO <fs_field>
)。
DATA:
lr_tabledescr TYPE REF TO cl_abap_tabledescr,
lr_datadescr TYPE REF TO cl_abap_datadescr,
lr_structdescr TYPE REF TO cl_abap_structdescr,
lr_typedescr TYPE REF TO cl_abap_typedescr,
lt_component TYPE TABLE OF abap_componentdescr.
DATA tab TYPE TABLE OF sflight.
lr_tabledescr ?= cl_abap_datadescr=>describe_by_data( tab ).
lr_typedescr ?= lr_tabledescr->get_table_line_type( ).
lr_structdescr ?= lr_typedescr.
lt_component = lr_structdescr->get_components( ).
READ TABLE lt_component WITH KEY name = 'NUMBER'.