METHOD /iwbep/if_mgw_appl_srv_runtime~create_deep_entity.
* 공용 메소드라 entity set 이름으로 분기해야 함
IF iv_entity_set_name EQ 'ZCERTINFOSet'.
* entity set에 속한 메소드와 달리 반환 객체가 정해져 있지 않음
* 반환 객체를 직접 선언해야 함
DATA: BEGIN OF ls_deep_entity.
INCLUDE TYPE
zcl_z_gw_certemp_mpc_ext=>ts_zcertinfo.
DATA: CertinfoToEmpcert TYPE
zcl_z_gw_certemp_mpc_ext=>tt_zempcert,
END OF ls_deep_entity.
TRY.
io_data_provider->read_entry_data(
IMPORTING
es_data = ls_deep_entity ).
CATCH /iwbep/cx_mgw_tech_exception.
ENDTRY.
DATA ls_certinfo TYPE zcertinfo_deep.
MOVE-CORRESPONDING ls_deep_entity TO ls_certinfo.
* update_deep_entity 메소드는 없다.
* 식별자나 구분자를 두어 create / update를 분기해야 함
IF ls_deep_entity-updkz IS INITIAL. " create
INSERT zcertinfo_deep FROM ls_certinfo.
IF sy-subrc EQ 4.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
textid = /iwbep/cx_mgw_busi_exception=>business_error_unlimited
http_status_code = /iwbep/cx_mgw_busi_exception=>gcs_http_status_codes-not_found
message_unlimited = |데이터를 생성하는 데 실패하였습니다.|.
ENDIF.
ELSE. " update
UPDATE zcertinfo_deep
SET
company = ls_certinfo-company
certname = ls_certinfo-certname
WHERE
certid = ls_certinfo-certid.
IF sy-subrc EQ 4.
ROLLBACK WORK.
RAISE EXCEPTION TYPE /iwbep/cx_mgw_busi_exception
EXPORTING
textid = /iwbep/cx_mgw_busi_exception=>business_error_unlimited
http_status_code = /iwbep/cx_mgw_busi_exception=>gcs_http_status_codes-not_found
message_unlimited = |업데이트를 실패하였습니다.|.
ENDIF.
DELETE FROM zempcert
WHERE certid = ls_certinfo-certid.
ENDIF.
DATA ls_empcert TYPE zempcert_deep.
LOOP AT ls_deep_entity-CertinfoToEmpcert INTO DATA(ls_item).
MOVE-CORRESPONDING ls_item TO ls_empcert.
ls_empcert-certid = ls_certinfo-certid.
ls_empcert-cnum = sy-tabix.
INSERT zempcert FROM ls_empcert.
ENDLOOP.
* 타 메소드와 달리 반환값이 반드시 필요하다(없으면 오류 발생)
copy_data_to_ref( "RETURN METHOD
EXPORTING
is_data = ls_deep_entity
CHANGING
cr_data = er_deep_entity ) .
ENDIF.
ENDMETHOD.