使用する
LDQ APIを使用した繰り返しの読み取りと確認のサイクル(「読み取り」)
同じセッションで、複数の読み取り-読み取り-…-読み取り-確認-コミットのサイクルが発生する可能性があります。これは、前の例で説明した単一サイクルの簡略図です。
シーケンス図:
次の概要は、サイクルのn_cyclesの繰り返しを示しており、n_unitsユニットのn_times読み取りが一度に行われ、各サイクルの終わりに明示的にコミットされます。
入力パラメータ
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 i DEFAULT 3. n_cycles TYPE i DEFAULT 4.
宣言
DATA: l_ldq_reader TYPE REF TO if_ldq_reader, l_ldq_unit_reader TYPE REF TO if_ldq_unit_reader.DATA: l_queue_name_tab TYPE ldq_queue_name_tab, l_queue_name TYPE ldq_queue_name.DATA: l_xdata TYPE xstring, l_cdata TYPE string.DATA: l_size TYPE i.DATA: l_content_tab TYPE ldq_unit_content_reader_tab.DATA: l_state_tab TYPE ldq_unit_state_reader_tab.DATA: l_del TYPE i.DATA: l_seq_nr TYPE ldq_unit_id.DATA: l_queue_nr(4) TYPE n.DATA: l_lines TYPE i.DATA: l_last_lines TYPE i.DATA: l_unit TYPE i.DATA: l_state_wa TYPE REF TO if_ldq_unit_state_reader, l_content_wa TYPE REF TO if_ldq_unit_content_reader.DATA: l_format TYPE ldq_data_format.DATA: l_next_state_nr TYPE i.DATA: l_number TYPE i.TYPES: BEGIN OF lt_my_unit_reader, unit_reader TYPE REF TO if_ldq_unit_reader, queue_name TYPE ldq_queue_name, END OF lt_my_unit_reader.DATA: l_my_unit_reader_tab TYPE TABLE OF lt_my_unit_reader.DATA: l_my_unit_reader TYPE lt_my_unit_reader.FIELD-SYMBOLS: <l_content_wa> TYPE REF TO if_ldq_unit_content_reader.FIELD-SYMBOLS: <l_state_wa> TYPE REF TO if_ldq_unit_state_reader.
キュー名の作成
CLEAR: l_queue_name_tab[], l_content_tab[].DO n_queues TIMES. l_queue_nr = sy-index. CONCATENATE qp_name l_queue_nr INTO l_queue_name. CONDENSE l_queue_name NO-GAPS. APPEND l_queue_name TO l_queue_name_tab.ENDDO.LOOP AT l_queue_name_tab INTO l_queue_name.
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. APPEND l_my_unit_reader TO l_my_unit_reader_tab.ENDLOOP.
いくつかの読み取り-読み取り-…-読み取り-確認サイクル
*DO n_cycles TIMES.*
すべてのキューのブロックユニットをn_times読み取ります
*DO n_times TIMES. LOOP AT l_my_unit_reader_tab INTO l_my_unit_reader.
1つのブロックでn_unitsを取得します
l_content_tab = l_my_unit_reader-unit_reader->get_next_contents( n_units ). l_unit = LINES( l_content_tab ).
コンテンツオブジェクトから含まれる情報を取得する
CLEAR l_number. WRITE: / l_unit, 'Qname:', l_my_unit_reader-queue_name. LOOP AT l_content_tab ASSIGNING <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( ). ELSE. 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. WRITE: /10 'number:', l_number, 'sequence number =', l_seq_nr, 'size in kb:', l_size. ENDLOOP.
データベース内の読み取りユニットを確認する
* l_my_unit_reader-unit_reader->confirm( ).
LDQデータの読み取りステータスをデータベースに永続化する
COMMIT WORK. ENDLOOP. next read-read-…-read-confirm cycle ENDLOOP. next queue