메뉴 건너뛰기

SAP 한국 커뮤니티

  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.