使用する
LDQ APIを使用したユニットの読み取り(「読み取り」)
キューの特定のテーブルを読み取るために、キューごとにリーダーオブジェクトとユニットリーダーオブジェクトが作成されます。キューごとに、ユニットはnのブロックで読み取られます。ユニットごとに、ペイロードの形式が決定され、次にペイロードが抽出され、ユニットサイズが決定されます。この方法でブロック内のすべてのnユニットが読み取られ、分析された後、データベースで確認されます(削除のマークが付けられます)。
シーケンス図:
下書き:
a)入力パラメータ:
ap_name TYPE ldq_application_name DEFAULT’Perf_TEST’、
qp_name TYPE ldq_queue_name DEFAULT’LDQ_TEST_’、
n_queues TYPE i DEFAULT 5、
n_units TYPE i DEFAULT 10、
n_times TYPE iDEFAULT1。
b)宣言:
データ:l_ldq_reader TYPE REF TO if_ldq_reader、
l_ldq_unit_reader TYPE REFTOif_ldq_unit_reader。
データ:l_queue_name_tab TYPE ldq_queue_name_tab、
l_queue_nameTYPEldq_queue_name。
データ:l_xdata TYPE xstring、
l_cdataTYPE文字列。
データ:l_sizeTYPEi。
データ:l_content_tabタイプldq_unit_content_reader_tab。
データ:l_state_tabタイプldq_unit_state_reader_tab。
データ:l_delTYPEi。
データ:l_seq_nrタイプldq_unit_id。
データ:l_queue_nr(4)タイプn。
データ:l_linesTYPEi。
データ:l_last_linesタイプi。
データ:l_unitTYPEi。
データ:l_state_wa TYPE REF TO if_ldq_unit_state_reader、
l_content_wa TYPE REFTOif_ldq_unit_content_reader。
データ:l_formatTYPEldq_data_format。
データ:l_next_state_nrタイプi。
データ:l_numberタイプi。
タイプ:lt_my_unit_readerの始まり、
unit_reader TYPE REF TO if_ldq_unit_reader、
queue_name TYPE ldq_queue_name、
lt_my_unit_readerの終わり。
データ:l_my_unit_reader_tablt_my_unit_readerのタイプテーブル。
データ:l_my_unit_readerタイプlt_my_unit_reader。
フィールドシンボル:<l_content_wa>if_ldq_unit_content_readerへのタイプ参照。
フィールドシンボル:<l_state_wa> TYPE REFTOif_ldq_unit_state_reader。
c)キュー名の作成:
クリア:l_queue_name_tab []、l_content_tab[]。
n_queuesTIMESを実行します。
l_queue_nr=sy-index。
qp_name l_queue_nrINTOl_queue_nameを連結します。
CONDENSEl_queue_nameNO-GAPS。
l_queue_nameをl_queue_name_tabに追加します。
ENDDO。
l_queue_name_tabをl_queue_nameにループします。
d)LDQアプリケーションオブジェクトの作成:
l_ldq_reader = cl_ldq_application => get_reader(ap_name)。
*
*キュー名ごとにLDQキューオブジェクトを作成
*
l_my_unit_reader-unit_reader = l_ldq_reader-> set_queue_name(l_queue_name)。
l_my_unit_reader-queue_name=l_queue_name。
l_my_unit_readerをl_my_unit_reader_tabに追加します。
ENDLOOP。
*
*すべてのキューのブロックユニットをn_times読み取ります
*
n_times回実行します。
*
l_my_unit_reader_tabをl_my_unit_readerにループします。
e)1つのブロックでn_unitsを取得します。
l_content_tab = l_my_unit_reader-unit_reader-> get_next_contents(n_units)。
l_unit = LINES(l_content_tab)。
f)コンテンツオブジェクトから含まれる情報を取得します。
クリアl_number。
書き込み:/ l_unit、’Qname:’、l_my_unit_reader-queue_name。
l_content_tabASSIGNING<l_content_wa>でループします。
l_format = <l_content_wa>-> get_format()。
IF cl_ldq_unit_writer => co_character_data_type=l_format。
l_cdata = <l_content_wa>-> get_cdata()。
そうしないと。
l_xdata = <l_content_wa>-> get_xdata()。
ENDIF。
l_seq_nr = <l_content_wa>-> get_sequence_number()。
l_size = <l_content_wa>-> get_size()。
l_number = l_number+1。
書き込み:/ 10’番号:’、l_number、’シーケンス番号=’、l_seq_nr、’kb単位のサイズ:’、l_size。
ENDLOOP。
g)データベースの読み取りユニットを確認します。
*
l_my_unit_reader-unit_reader-> confirm()。
h)LDQデータの読み取りステータスをデータベースに永続化します。
仕事をコミットします。
ENDLOOP。