【RAP】Unmanaged BOの実装 (4) Delete処理
はじめに
この記事では、RAP(ABAP RESTful Application Programming Model)で作成したUnmanaged BOにDelete処理を追加します。
シリーズの先頭はこちら☞ 【RAP】Unmanaged BOの実装 (1)
処理概要
現在の構成は以下のようになっています。Behavior Implementationクラスから、実際の処理を行うAdapterクラスのメソッドが呼ばれます。Adapterクラスのローカルクラスではトランザクションバッファとのやり取りを行い、SAVEのタイミングでバッファから取り出したレコードをDBに格納します。
今回は、DELETEの処理を追加するとともに、SAVEの処理を変更します。
実装ステップ
- Adapterクラスの実装
- Behavior Implementationクラスの実装
1. Adapterクラスの実装
1.1. インターフェースに型を追加
削除処理で使用する、エンティティのキーのみを持った型を追加します。
TYPES: BEGIN OF ts_person_key,
person_id TYPE ze_person_id,
END OF ts_person_key.
TYPES tt_person_key TYPE SORTED TABLE OF ts_person_key WITH UNIQUE KEY person_id.
TYPES: BEGIN OF ts_familymember_key,
person_id TYPE ze_person_id,
member_id TYPE ze_member_id,
END OF ts_familymember_key.
TYPES tt_familymember_key TYPE SORTED TABLE OF ts_familymember_key WITH UNIQUE KEY person_id member_id.
1.2. ローカルクラスの実装
バッファ更新用のメソッドを追加します。また、saveメソッドに更新処理を追加します。initializeメソッドで削除用バッファの初期化を行います。
メソッド定義
"削除用のバッファテーブル
DATA mt_delete_buffer_person TYPE zif_person_adapter=>tt_person_key.
DATA mt_delete_buffer_familymember TYPE zif_person_adapter=>tt_familymember_key.
METHODS buffer_person_for_delete IMPORTING is_personkey TYPE zif_person_adapter=>ts_person_key
it_memberkey TYPE zif_person_adapter=>tt_familymember_key.
METHODS buffer_familymember_for_delete IMPORTING is_memberkey TYPE zif_person_adapter=>ts_familymember_key.
メソッド実装
METHOD buffer_person_for_delete.
CHECK is_personkey IS NOT INITIAL.
INSERT is_personkey INTO TABLE mt_delete_buffer_person.
CHECK it_memberkey IS NOT INITIAL.
INSERT LINES OF it_memberkey INTO TABLE mt_delete_buffer_familymember.
ENDMETHOD.
METHOD buffer_familymember_for_delete.
CHECK is_memberkey IS NOT INITIAL.
INSERT is_memberkey INTO TABLE mt_delete_buffer_familymember.
ENDMETHOD.
METHOD save.
DATA(lt_perton) = get_person_create( ).
DATA(lt_familymember) = get_familymember_create( ).
INSERT zperson_u FROM TABLE @lt_perton.
UPDATE zperson_u FROM TABLE @mt_update_buffer_person.
DELETE zperson_u FROM TABLE @( CORRESPONDING #( mt_delete_buffer_person ) ). "追加
INSERT zfamilymember_u FROM TABLE @lt_familymember.
UPDATE zfamilymember_u FROM TABLE @mt_update_buffer_familymember.
DELETE zfamilymember_u FROM TABLE @( CORRESPONDING #( mt_delete_buffer_familymember ) ). "追加
ENDMETHOD.
METHOD initialize.
CLEAR: mt_create_buffer_person,
mt_update_buffer_person,
mt_delete_buffer_person, "追加
mt_create_buffer_familymember,
mt_update_buffer_familymember,
mt_delete_buffer_familymember. "追加
ENDMETHOD.
1.3. グローバルクラスの実装
Behavior Implementationクラスから呼び出されるメソッドを実装します。
メソッド定義
METHODS delete_person IMPORTING is_personkey type zif_person_adapter=>ts_person_key
it_memberkey type zif_person_adapter=>tt_familymember_key.
METHODS delete_familymember IMPORTING is_memberkey type zif_person_adapter=>ts_familymember_key.
メソッド実装
METHOD delete_person.
lcl_person_buffer=>get_instance( )->buffer_person_for_delete(
EXPORTING
is_personkey = is_personkey
it_memberkey = it_memberkey
).
ENDMETHOD.
METHOD delete_familymember.
lcl_person_buffer=>get_instance( )->buffer_familymember_for_delete( is_memberkey ).
ENDMETHOD.
2. Behavior Implementationクラスの実装
delete処理には"key"という構造にエンティティのキーが渡されます。Personエンティティの場合、ひもづくFamily Memberも削除する必要があるため、削除対象のFamily Memberのキーを取得してAdapterクラスのdeleteメソッドに渡します。
Person
METHOD delete.
DATA ls_personkey TYPE zif_person_adapter=>ts_person_key.
DATA lt_memberkey TYPE zif_person_adapter=>tt_familymember_key.
LOOP AT keys ASSIGNING FIELD-SYMBOL(<key>).
ls_personkey-person_id = <key>-PersonID.
SELECT person_id, member_id FROM zfamilymember_u
WHERE person_id = @<key>-PersonID
INTO TABLE @lt_memberkey.
zcl_person_adapter=>get_instance( )->delete_person(
EXPORTING
is_personkey = ls_personkey
it_memberkey = lt_memberkey
).
ENDLOOP.
ENDMETHOD.
Family Member
METHOD delete.
DATA ls_memberkey TYPE zif_person_adapter=>ts_familymember_key.
LOOP AT keys ASSIGNING FIELD-SYMBOL(<key>).
ls_memberkey-person_id = <key>-PersonID.
ls_memberkey-member_id = <key>-MemberID.
zcl_person_adapter=>get_instance( )->delete_familymember( ls_memberkey ).
ENDLOOP.
ENDMETHOD.
動作確認
Author And Source
この問題について(【RAP】Unmanaged BOの実装 (4) Delete処理), 我々は、より多くの情報をここで見つけました https://qiita.com/tami/items/88e669af3e4f5c216194著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .