From d033fbed29073e7633dc0a24d44f934f53b0019b Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 7 Jul 2016 12:19:57 +0000 Subject: [PATCH] split objects into multipe files, close #278 --- src/zabapgit.prog.abap | 37 + src/zabapgit_object.prog.abap | 7861 +--------------------------- src/zabapgit_object_acid.prog.abap | 133 + src/zabapgit_object_acid.prog.xml | 48 + src/zabapgit_object_auth.prog.abap | 113 + src/zabapgit_object_auth.prog.xml | 48 + src/zabapgit_object_doma.prog.abap | 154 + src/zabapgit_object_doma.prog.xml | 48 + src/zabapgit_object_dtel.prog.abap | 144 + src/zabapgit_object_dtel.prog.xml | 48 + src/zabapgit_object_enho.prog.abap | 333 ++ src/zabapgit_object_enho.prog.xml | 48 + src/zabapgit_object_enhs.prog.abap | 186 + src/zabapgit_object_enhs.prog.xml | 48 + src/zabapgit_object_enqu.prog.abap | 156 + src/zabapgit_object_enqu.prog.xml | 48 + src/zabapgit_object_ensc.prog.abap | 186 + src/zabapgit_object_ensc.prog.xml | 48 + src/zabapgit_object_iarp.prog.abap | 183 + src/zabapgit_object_iarp.prog.xml | 48 + src/zabapgit_object_iasp.prog.abap | 183 + src/zabapgit_object_iasp.prog.xml | 48 + src/zabapgit_object_iatu.prog.abap | 200 + src/zabapgit_object_iatu.prog.xml | 48 + src/zabapgit_object_msag.prog.abap | 160 + src/zabapgit_object_msag.prog.xml | 48 + src/zabapgit_object_nrob.prog.abap | 157 + src/zabapgit_object_nrob.prog.xml | 48 + src/zabapgit_object_para.prog.abap | 141 + src/zabapgit_object_para.prog.xml | 48 + src/zabapgit_object_sfbf.prog.abap | 211 + src/zabapgit_object_sfbf.prog.xml | 48 + src/zabapgit_object_sfbs.prog.abap | 183 + src/zabapgit_object_sfbs.prog.xml | 48 + src/zabapgit_object_sfsw.prog.abap | 180 + src/zabapgit_object_sfsw.prog.xml | 48 + src/zabapgit_object_shi3.prog.abap | 325 ++ src/zabapgit_object_shi3.prog.xml | 48 + src/zabapgit_object_shlp.prog.abap | 163 + src/zabapgit_object_shlp.prog.xml | 48 + src/zabapgit_object_sicf.prog.abap | 406 ++ src/zabapgit_object_sicf.prog.xml | 48 + src/zabapgit_object_smim.prog.abap | 301 ++ src/zabapgit_object_smim.prog.xml | 48 + src/zabapgit_object_splo.prog.abap | 123 + src/zabapgit_object_splo.prog.xml | 48 + src/zabapgit_object_ssfo.prog.abap | 226 + src/zabapgit_object_ssfo.prog.xml | 48 + src/zabapgit_object_ssst.prog.abap | 191 + src/zabapgit_object_ssst.prog.xml | 48 + src/zabapgit_object_susc.prog.abap | 117 + src/zabapgit_object_susc.prog.xml | 48 + src/zabapgit_object_suso.prog.abap | 164 + src/zabapgit_object_suso.prog.xml | 48 + src/zabapgit_object_tabl.prog.abap | 275 + src/zabapgit_object_tabl.prog.xml | 48 + src/zabapgit_object_tobj.prog.abap | 178 + src/zabapgit_object_tobj.prog.xml | 48 + src/zabapgit_object_tran.prog.abap | 408 ++ src/zabapgit_object_tran.prog.xml | 48 + src/zabapgit_object_ttyp.prog.abap | 155 + src/zabapgit_object_ttyp.prog.xml | 48 + src/zabapgit_object_type.prog.abap | 200 + src/zabapgit_object_type.prog.xml | 48 + src/zabapgit_object_vcls.prog.abap | 184 + src/zabapgit_object_vcls.prog.xml | 48 + src/zabapgit_object_view.prog.abap | 184 + src/zabapgit_object_view.prog.xml | 48 + src/zabapgit_object_w3xx.prog.abap | 351 ++ src/zabapgit_object_w3xx.prog.xml | 48 + src/zabapgit_object_wdya.prog.abap | 206 + src/zabapgit_object_wdya.prog.xml | 48 + src/zabapgit_object_wdyn.prog.abap | 642 +++ src/zabapgit_object_wdyn.prog.xml | 48 + src/zabapgit_object_xslt.prog.abap | 167 + src/zabapgit_object_xslt.prog.xml | 48 + 76 files changed, 9783 insertions(+), 7860 deletions(-) create mode 100644 src/zabapgit_object_acid.prog.abap create mode 100644 src/zabapgit_object_acid.prog.xml create mode 100644 src/zabapgit_object_auth.prog.abap create mode 100644 src/zabapgit_object_auth.prog.xml create mode 100644 src/zabapgit_object_doma.prog.abap create mode 100644 src/zabapgit_object_doma.prog.xml create mode 100644 src/zabapgit_object_dtel.prog.abap create mode 100644 src/zabapgit_object_dtel.prog.xml create mode 100644 src/zabapgit_object_enho.prog.abap create mode 100644 src/zabapgit_object_enho.prog.xml create mode 100644 src/zabapgit_object_enhs.prog.abap create mode 100644 src/zabapgit_object_enhs.prog.xml create mode 100644 src/zabapgit_object_enqu.prog.abap create mode 100644 src/zabapgit_object_enqu.prog.xml create mode 100644 src/zabapgit_object_ensc.prog.abap create mode 100644 src/zabapgit_object_ensc.prog.xml create mode 100644 src/zabapgit_object_iarp.prog.abap create mode 100644 src/zabapgit_object_iarp.prog.xml create mode 100644 src/zabapgit_object_iasp.prog.abap create mode 100644 src/zabapgit_object_iasp.prog.xml create mode 100644 src/zabapgit_object_iatu.prog.abap create mode 100644 src/zabapgit_object_iatu.prog.xml create mode 100644 src/zabapgit_object_msag.prog.abap create mode 100644 src/zabapgit_object_msag.prog.xml create mode 100644 src/zabapgit_object_nrob.prog.abap create mode 100644 src/zabapgit_object_nrob.prog.xml create mode 100644 src/zabapgit_object_para.prog.abap create mode 100644 src/zabapgit_object_para.prog.xml create mode 100644 src/zabapgit_object_sfbf.prog.abap create mode 100644 src/zabapgit_object_sfbf.prog.xml create mode 100644 src/zabapgit_object_sfbs.prog.abap create mode 100644 src/zabapgit_object_sfbs.prog.xml create mode 100644 src/zabapgit_object_sfsw.prog.abap create mode 100644 src/zabapgit_object_sfsw.prog.xml create mode 100644 src/zabapgit_object_shi3.prog.abap create mode 100644 src/zabapgit_object_shi3.prog.xml create mode 100644 src/zabapgit_object_shlp.prog.abap create mode 100644 src/zabapgit_object_shlp.prog.xml create mode 100644 src/zabapgit_object_sicf.prog.abap create mode 100644 src/zabapgit_object_sicf.prog.xml create mode 100644 src/zabapgit_object_smim.prog.abap create mode 100644 src/zabapgit_object_smim.prog.xml create mode 100644 src/zabapgit_object_splo.prog.abap create mode 100644 src/zabapgit_object_splo.prog.xml create mode 100644 src/zabapgit_object_ssfo.prog.abap create mode 100644 src/zabapgit_object_ssfo.prog.xml create mode 100644 src/zabapgit_object_ssst.prog.abap create mode 100644 src/zabapgit_object_ssst.prog.xml create mode 100644 src/zabapgit_object_susc.prog.abap create mode 100644 src/zabapgit_object_susc.prog.xml create mode 100644 src/zabapgit_object_suso.prog.abap create mode 100644 src/zabapgit_object_suso.prog.xml create mode 100644 src/zabapgit_object_tabl.prog.abap create mode 100644 src/zabapgit_object_tabl.prog.xml create mode 100644 src/zabapgit_object_tobj.prog.abap create mode 100644 src/zabapgit_object_tobj.prog.xml create mode 100644 src/zabapgit_object_tran.prog.abap create mode 100644 src/zabapgit_object_tran.prog.xml create mode 100644 src/zabapgit_object_ttyp.prog.abap create mode 100644 src/zabapgit_object_ttyp.prog.xml create mode 100644 src/zabapgit_object_type.prog.abap create mode 100644 src/zabapgit_object_type.prog.xml create mode 100644 src/zabapgit_object_vcls.prog.abap create mode 100644 src/zabapgit_object_vcls.prog.xml create mode 100644 src/zabapgit_object_view.prog.abap create mode 100644 src/zabapgit_object_view.prog.xml create mode 100644 src/zabapgit_object_w3xx.prog.abap create mode 100644 src/zabapgit_object_w3xx.prog.xml create mode 100644 src/zabapgit_object_wdya.prog.abap create mode 100644 src/zabapgit_object_wdya.prog.xml create mode 100644 src/zabapgit_object_wdyn.prog.abap create mode 100644 src/zabapgit_object_wdyn.prog.xml create mode 100644 src/zabapgit_object_xslt.prog.abap create mode 100644 src/zabapgit_object_xslt.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 70da7b4f4..847f61ec3 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -67,6 +67,43 @@ INCLUDE zabapgit_tadir. INCLUDE zabapgit_file_status. INCLUDE zabapgit_object. INCLUDE zabapgit_object_webi. +INCLUDE zabapgit_object_shi3. +INCLUDE zabapgit_object_w3xx. +INCLUDE zabapgit_object_sfbs. +INCLUDE zabapgit_object_sfbf. +INCLUDE zabapgit_object_sfsw. +INCLUDE zabapgit_object_vcls. +INCLUDE zabapgit_object_ttyp. +INCLUDE zabapgit_object_nrob. +INCLUDE zabapgit_object_view. +INCLUDE zabapgit_object_acid. +INCLUDE zabapgit_object_auth. +INCLUDE zabapgit_object_xslt. +INCLUDE zabapgit_object_doma. +INCLUDE zabapgit_object_iarp. +INCLUDE zabapgit_object_iasp. +INCLUDE zabapgit_object_iatu. +INCLUDE zabapgit_object_dtel. +INCLUDE zabapgit_object_smim. +INCLUDE zabapgit_object_sicf. +INCLUDE zabapgit_object_ssst. +INCLUDE zabapgit_object_suso. +INCLUDE zabapgit_object_wdyn. +INCLUDE zabapgit_object_wdya. +INCLUDE zabapgit_object_susc. +INCLUDE zabapgit_object_type. +INCLUDE zabapgit_object_para. +INCLUDE zabapgit_object_splo. +INCLUDE zabapgit_object_ssfo. +INCLUDE zabapgit_object_tabl. +INCLUDE zabapgit_object_enho. +INCLUDE zabapgit_object_enhs. +INCLUDE zabapgit_object_ensc. +INCLUDE zabapgit_object_enqu. +INCLUDE zabapgit_object_shlp. +INCLUDE zabapgit_object_tran. +INCLUDE zabapgit_object_tobj. +INCLUDE zabapgit_object_msag. INCLUDE zabapgit_repo_impl. INCLUDE zabapgit_background. INCLUDE zabapgit_zip. diff --git a/src/zabapgit_object.prog.abap b/src/zabapgit_object.prog.abap index 9a5fa86a0..a8cf6c676 100644 --- a/src/zabapgit_object.prog.abap +++ b/src/zabapgit_object.prog.abap @@ -643,1260 +643,6 @@ CLASS lcl_objects IMPLEMENTATION. ENDCLASS. "lcl_objects IMPLEMENTATION -*----------------------------------------------------------------------* -* CLASS lcl_object_acid DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_acid DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - METHODS: create_object - RETURNING VALUE(ro_aab) TYPE REF TO cl_aab_id - RAISING lcx_exception. - -ENDCLASS. "lcl_object_acid DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_acid IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_acid IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD create_object. - - DATA: lv_name TYPE aab_id_name. - - - lv_name = ms_item-obj_name. - - CREATE OBJECT ro_aab - EXPORTING - im_name = lv_name - EXCEPTIONS - name_not_allowed = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error creating CL_AAB_ID object'. - ENDIF. - - ENDMETHOD. "create_object - - METHOD lif_object~serialize. - - DATA: lo_aab TYPE REF TO cl_aab_id, - lv_description TYPE aab_id_descript. - - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - lo_aab = create_object( ). - - lo_aab->get_descript( IMPORTING ex_descript = lv_description ). - - io_xml->add( iv_name = 'DESCRIPTION' - ig_data = lv_description ). - - ENDMETHOD. "lif_object~serialize - - METHOD lif_object~deserialize. - - DATA: lv_description TYPE aab_id_descript, - lo_aab TYPE REF TO cl_aab_id. - - - io_xml->read( EXPORTING iv_name = 'DESCRIPTION' - CHANGING cg_data = lv_description ). - - lo_aab = create_object( ). - lo_aab->enqueue( ). - lo_aab->set_descript( lv_description ). - lo_aab->save( ). - - ENDMETHOD. "lif_object~deserialize - - METHOD lif_object~delete. - - DATA: lo_aab TYPE REF TO cl_aab_id. - - - lo_aab = create_object( ). - lo_aab->enqueue( ). - lo_aab->delete( - EXCEPTIONS - prop_error = 1 - propt_error = 2 - act_error = 3 - cts_error = 4 - cts_devclass = 5 - id_not_found = 6 - no_authorization = 7 - id_still_used = 8 - where_used_error = 9 - OTHERS = 10 ). - IF sy-subrc <> 0. - _raise 'error deleting ACID object'. - ENDIF. - lo_aab->dequeue( ). - - ENDMETHOD. "lif_object~delete - - METHOD lif_object~exists. - - DATA: lv_state TYPE flag, - lo_aab TYPE REF TO cl_aab_id. - - - lo_aab = create_object( ). - - lo_aab->get_state( - IMPORTING - ex_state = lv_state ). - rv_bool = boolc( lv_state = abap_true ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - _raise 'todo, jump, ACID'. - ENDMETHOD. "lif_object~jump - -ENDCLASS. "lcl_object_acid IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_auth DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_auth DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_auth DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_auth IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_auth IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~serialize. - - DATA: ls_authx TYPE authx. - - - SELECT SINGLE * FROM authx INTO ls_authx - WHERE fieldname = ms_item-obj_name. "#EC CI_GENBUFF - IF sy-subrc <> 0. - RETURN. - ENDIF. - - io_xml->add( iv_name = 'AUTHX' - ig_data = ls_authx ). - - ENDMETHOD. "lif_object~serialize - - METHOD lif_object~deserialize. -* see include LSAUT_FIELDF02 - - DATA: ls_authx TYPE authx, - lo_auth TYPE REF TO cl_auth_tools. - - - io_xml->read( EXPORTING iv_name = 'AUTHX' - CHANGING cg_data = ls_authx ). - - CREATE OBJECT lo_auth. - - IF lo_auth->add_afield_to_trkorr( ls_authx-fieldname ) <> 0. - _raise 'Error deserializing AUTH'. - ENDIF. - - MODIFY authx FROM ls_authx. - IF sy-subrc <> 0. - _raise 'Error deserializing AUTH'. - ENDIF. - - CALL FUNCTION 'DB_COMMIT'. - lo_auth->set_authfld_info_from_db( ls_authx-fieldname ). - - ENDMETHOD. "lif_object~deserialize - - METHOD lif_object~delete. - - DATA: lv_fieldname TYPE authx-fieldname. - - - lv_fieldname = ms_item-obj_name. - -* there is a bug in SAP standard, the TADIR entries are not deleted -* when the AUTH object is deleted in transaction SU20 - CALL FUNCTION 'SUSR_AUTF_DELETE_FIELD' - EXPORTING - fieldname = lv_fieldname - EXCEPTIONS - delete_not_possible = 1 - field_in_use = 2 - not_existing = 3 - no_authority = 4 - OTHERS = 5. - IF sy-subrc <> 0. - _raise 'error from SUSR_AUTF_DELETE_FIELD'. - ENDIF. - - ENDMETHOD. "lif_object~delete - - METHOD lif_object~exists. - - DATA: lv_fieldname TYPE authx-fieldname. - - - SELECT SINGLE fieldname FROM authx - INTO lv_fieldname - WHERE fieldname = ms_item-obj_name. "#EC CI_GENBUFF - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - _raise 'todo, AUTH jump'. - - ENDMETHOD. "lif_object~jump - -ENDCLASS. "lcl_object_auth IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_xslt DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_xslt DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_xslt DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_xslt IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_xslt IMPLEMENTATION. - - METHOD lif_object~serialize. - - DATA: lv_name TYPE cxsltdesc, - lo_xslt TYPE REF TO cl_o2_api_xsltdesc, - lv_source TYPE string, - ls_attributes TYPE o2xsltattr. - - - lv_name = ms_item-obj_name. - - cl_o2_api_xsltdesc=>load( - EXPORTING - p_xslt_desc = lv_name - IMPORTING - p_obj = lo_xslt - EXCEPTIONS - not_existing = 1 - permission_failure = 2 - OTHERS = 3 ). - IF sy-subrc <> 0. - RETURN. - ENDIF. - - ls_attributes = lo_xslt->get_attributes( ). - - CLEAR: ls_attributes-author, - ls_attributes-createdon, - ls_attributes-changedby, - ls_attributes-changedon, - ls_attributes-devclass. - - io_xml->add( iv_name = 'ATTRIBUTES' - ig_data = ls_attributes ). - - lv_source = lo_xslt->get_source_string( ). - - mo_files->add_string( iv_extra = 'source' - iv_ext = 'xml' - iv_string = lv_source ) ##NO_TEXT. - - ENDMETHOD. "lif_object~serialize - - METHOD lif_object~deserialize. - - DATA: lv_source TYPE string, - lo_xslt TYPE REF TO cl_o2_api_xsltdesc, - lv_len TYPE i, - ls_attributes TYPE o2xsltattr. - - - io_xml->read( EXPORTING iv_name = 'ATTRIBUTES' - CHANGING cg_data = ls_attributes ). - - ls_attributes-devclass = iv_package. - - lv_source = mo_files->read_string( iv_extra = 'source' - iv_ext = 'xml' ) ##NO_TEXT. - -* workaround: somewhere additional linefeeds are added - lv_len = strlen( lv_source ) - 2. - IF lv_source+lv_len(2) = cl_abap_char_utilities=>cr_lf. - lv_source = lv_source(lv_len). - ENDIF. - - cl_o2_api_xsltdesc=>create_new_from_string( - EXPORTING - p_source = lv_source - p_attr = ls_attributes - IMPORTING - p_obj = lo_xslt - EXCEPTIONS - action_cancelled = 1 - error_occured = 2 - not_authorized = 3 - object_already_existing = 4 - undefined_name = 5 - OTHERS = 6 ). - IF sy-subrc <> 0. - _raise 'error from cl_o2_api_xsltdesc=>create_new_from_string'. - ENDIF. - - lo_xslt->save( ). - - lo_xslt->set_changeable( abap_false ). - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "lif_object~deserialize - - METHOD lif_object~delete. - - DATA: lo_xslt TYPE REF TO cl_o2_api_xsltdesc, - lv_name TYPE cxsltdesc. - - - lv_name = ms_item-obj_name. - - cl_o2_api_xsltdesc=>load( - EXPORTING - p_xslt_desc = lv_name - IMPORTING - p_obj = lo_xslt - EXCEPTIONS - error_occured = 1 - not_existing = 2 - permission_failure = 3 - version_not_found = 4 - OTHERS = 5 ). - IF sy-subrc <> 0. - _raise 'error from cl_o2_api_xsltdesc=>load'. - ENDIF. - - lo_xslt->set_changeable( abap_true ). - lo_xslt->delete( ). - lo_xslt->save( ). - - ENDMETHOD. "lif_object~delete - - METHOD lif_object~exists. - - DATA: lv_name TYPE cxsltdesc. - - - lv_name = ms_item-obj_name. - - rv_bool = cl_o2_api_xsltdesc=>exists( lv_name ). - IF rv_bool = '1'. - rv_bool = abap_true. - ELSE. - rv_bool = abap_false. - ENDIF. - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - _raise 'XSLT, jump, todo'. - ENDMETHOD. "lif_object~jump - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - -ENDCLASS. "lcl_object_xslt IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_doma DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_doma DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_doma DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_doma IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_doma IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_domname TYPE dd01l-domname. - - - SELECT SINGLE domname FROM dd01l INTO lv_domname - WHERE domname = ms_item-obj_name - AND as4local = 'A' - AND as4vers = '0000'. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - jump_se11( iv_radio = 'RSRD1-DOMA' - iv_field = 'RSRD1-DOMA_VAL' ). - - ENDMETHOD. "jump - - METHOD lif_object~delete. -* see class CL_WB_DDIC - - DATA: lv_objname TYPE rsedd0-ddobjname. - - - lv_objname = ms_item-obj_name. - - CALL FUNCTION 'RS_DD_DELETE_OBJ' - EXPORTING - no_ask = abap_true - objname = lv_objname - objtype = 'D' - EXCEPTIONS - not_executed = 1 - object_not_found = 2 - object_not_specified = 3 - permission_failure = 4. - IF sy-subrc <> 0. - _raise 'error from RS_DD_DELETE_OBJ, DOMA'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~serialize. - - DATA: lv_name TYPE ddobjname, - ls_dd01v TYPE dd01v, - lt_dd07v TYPE TABLE OF dd07v. - - - lv_name = ms_item-obj_name. - - CALL FUNCTION 'DDIF_DOMA_GET' - EXPORTING - name = lv_name - langu = mv_language - IMPORTING - dd01v_wa = ls_dd01v - TABLES - dd07v_tab = lt_dd07v - EXCEPTIONS - illegal_input = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error from DDIF_DOMA_GET'. - ENDIF. - IF ls_dd01v IS INITIAL. - RETURN. " does not exist - ENDIF. - - CLEAR: ls_dd01v-as4user, - ls_dd01v-as4date, - ls_dd01v-as4time. - - io_xml->add( iv_name = 'DD01V' - ig_data = ls_dd01v ). - io_xml->add( iv_name = 'DD07V_TAB' - ig_data = lt_dd07v ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - -* package SEDD -* package SDIC - -* fm TR_TADIR_INTERFACE -* fm RS_CORR_INSERT ? - - DATA: ls_dd01v TYPE dd01v, - lv_name TYPE ddobjname, - lt_dd07v TYPE TABLE OF dd07v. - - - io_xml->read( EXPORTING iv_name = 'DD01V' - CHANGING cg_data = ls_dd01v ). - io_xml->read( EXPORTING iv_name = 'DD07V_TAB' - CHANGING cg_data = lt_dd07v ). - - corr_insert( iv_package ). - - lv_name = ms_item-obj_name. " type conversion - - CALL FUNCTION 'DDIF_DOMA_PUT' - EXPORTING - name = lv_name - dd01v_wa = ls_dd01v - TABLES - dd07v_tab = lt_dd07v - EXCEPTIONS - doma_not_found = 1 - name_inconsistent = 2 - doma_inconsistent = 3 - put_failure = 4 - put_refused = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from DDIF_DOMA_PUT'. - ENDIF. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - -ENDCLASS. "lcl_object_doma IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_iarp DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_iarp DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - METHODS: - read - EXPORTING es_attr TYPE w3resoattr - et_parameters TYPE w3resopara_tabletype - RAISING lcx_exception, - save - IMPORTING is_attr TYPE w3resoattr - it_parameters TYPE w3resopara_tabletype - RAISING lcx_exception. - -ENDCLASS. "lcl_object_dtel DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_iarp IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_iarp IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD read. - - DATA: li_resource TYPE REF TO if_w3_api_resource, - ls_name TYPE w3resokey. - - - ls_name = ms_item-obj_name. - - cl_w3_api_resource=>if_w3_api_resource~load( - EXPORTING - p_resource_name = ls_name - IMPORTING - p_resource = li_resource - EXCEPTIONS - object_not_existing = 1 - permission_failure = 2 - error_occured = 3 - OTHERS = 4 ). - IF sy-subrc <> 0. - _raise 'error from w3api_resource~load'. - ENDIF. - - li_resource->get_attributes( IMPORTING p_attributes = es_attr ). - - CLEAR: es_attr-chname, - es_attr-tdate, - es_attr-ttime, - es_attr-devclass. - - li_resource->get_parameters( IMPORTING p_parameters = et_parameters ). - - ENDMETHOD. "read - - METHOD lif_object~serialize. - - DATA: ls_attr TYPE w3resoattr, - lt_parameters TYPE w3resopara_tabletype. - - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - read( IMPORTING es_attr = ls_attr - et_parameters = lt_parameters ). - - io_xml->add( iv_name = 'ATTR' - ig_data = ls_attr ). - io_xml->add( iv_name = 'PARAMETERS' - ig_data = lt_parameters ). - - ENDMETHOD. "lif_object~serialize - - METHOD save. - - DATA: li_resource TYPE REF TO if_w3_api_resource. - - - cl_w3_api_resource=>if_w3_api_resource~create_new( - EXPORTING p_resource_data = is_attr - IMPORTING p_resource = li_resource ). - - li_resource->set_attributes( is_attr ). - li_resource->set_parameters( it_parameters ). - - li_resource->if_w3_api_object~save( ). - - ENDMETHOD. "save - - METHOD lif_object~deserialize. - - DATA: ls_attr TYPE w3resoattr, - lt_parameters TYPE w3resopara_tabletype. - - - io_xml->read( EXPORTING iv_name = 'ATTR' - CHANGING cg_data = ls_attr ). - io_xml->read( EXPORTING iv_name = 'PARAMETERS' - CHANGING cg_data = lt_parameters ). - - ls_attr-devclass = iv_package. - save( is_attr = ls_attr - it_parameters = lt_parameters ). - - ENDMETHOD. "lif_object~deserialize - - METHOD lif_object~delete. - - DATA: li_resource TYPE REF TO if_w3_api_resource, - ls_name TYPE w3resokey. - - - ls_name = ms_item-obj_name. - - cl_w3_api_resource=>if_w3_api_resource~load( - EXPORTING - p_resource_name = ls_name - IMPORTING - p_resource = li_resource - EXCEPTIONS - object_not_existing = 1 - permission_failure = 2 - error_occured = 3 - OTHERS = 4 ). - IF sy-subrc <> 0. - _raise 'error from if_w3_api_resource~load'. - ENDIF. - - li_resource->if_w3_api_object~set_changeable( abap_true ). - li_resource->if_w3_api_object~delete( ). - li_resource->if_w3_api_object~save( ). - - ENDMETHOD. "lif_object~delete - - METHOD lif_object~exists. - - DATA: ls_name TYPE w3resokey. - - - ls_name = ms_item-obj_name. - - cl_w3_api_resource=>if_w3_api_resource~load( - EXPORTING - p_resource_name = ls_name - EXCEPTIONS - object_not_existing = 1 - permission_failure = 2 - error_occured = 3 - OTHERS = 4 ). - IF sy-subrc = 1. - rv_bool = abap_false. - ELSEIF sy-subrc <> 0. - _raise 'error from w3_api_resource~load'. - ELSE. - rv_bool = abap_true. - ENDIF. - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - _raise 'todo, IARP, jump'. - ENDMETHOD. "lif_object~jump - -ENDCLASS. "lcl_object_iarp IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_iasp DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_iasp DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - METHODS: - read - EXPORTING es_attr TYPE w3servattr - et_parameters TYPE w3servpara_tabletype - RAISING lcx_exception, - save - IMPORTING is_attr TYPE w3servattr - it_parameters TYPE w3servpara_tabletype - RAISING lcx_exception. - -ENDCLASS. "lcl_object_dtel DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_iasp IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_iasp IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD read. - - DATA: li_service TYPE REF TO if_w3_api_service, - lv_name TYPE itsappl. - - - lv_name = ms_item-obj_name. - - cl_w3_api_service=>if_w3_api_service~load( - EXPORTING - p_service_name = lv_name - IMPORTING - p_service = li_service - EXCEPTIONS - object_not_existing = 1 - permission_failure = 2 - error_occured = 3 - OTHERS = 4 ). - IF sy-subrc <> 0. - _raise 'error from w3api_service~load'. - ENDIF. - - li_service->get_attributes( IMPORTING p_attributes = es_attr ). - - CLEAR: es_attr-chname, - es_attr-tdate, - es_attr-ttime, - es_attr-devclass. - - li_service->get_parameters( IMPORTING p_parameters = et_parameters ). - - ENDMETHOD. "read - - METHOD lif_object~serialize. - - DATA: ls_attr TYPE w3servattr, - lt_parameters TYPE w3servpara_tabletype. - - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - read( IMPORTING es_attr = ls_attr - et_parameters = lt_parameters ). - - io_xml->add( iv_name = 'ATTR' - ig_data = ls_attr ). - io_xml->add( iv_name = 'PARAMETERS' - ig_data = lt_parameters ). - - ENDMETHOD. "lif_object~serialize - - METHOD save. - - DATA: li_service TYPE REF TO if_w3_api_service. - - - cl_w3_api_service=>if_w3_api_service~create_new( - EXPORTING p_service_data = is_attr - IMPORTING p_service = li_service ). - - li_service->set_attributes( is_attr ). - li_service->set_parameters( it_parameters ). - - li_service->if_w3_api_object~save( ). - - ENDMETHOD. "save - - METHOD lif_object~deserialize. - - DATA: ls_attr TYPE w3servattr, - lt_parameters TYPE w3servpara_tabletype. - - - io_xml->read( EXPORTING iv_name = 'ATTR' - CHANGING cg_data = ls_attr ). - io_xml->read( EXPORTING iv_name = 'PARAMETERS' - CHANGING cg_data = lt_parameters ). - - ls_attr-devclass = iv_package. - save( is_attr = ls_attr - it_parameters = lt_parameters ). - - ENDMETHOD. "lif_object~deserialize - - METHOD lif_object~delete. - - DATA: li_service TYPE REF TO if_w3_api_service, - lv_name TYPE itsappl. - - - lv_name = ms_item-obj_name. - - cl_w3_api_service=>if_w3_api_service~load( - EXPORTING - p_service_name = lv_name - IMPORTING - p_service = li_service - EXCEPTIONS - object_not_existing = 1 - permission_failure = 2 - error_occured = 3 - OTHERS = 4 ). - IF sy-subrc <> 0. - _raise 'error from if_w3_api_service~load'. - ENDIF. - - li_service->if_w3_api_object~set_changeable( abap_true ). - li_service->if_w3_api_object~delete( ). - li_service->if_w3_api_object~save( ). - - ENDMETHOD. "lif_object~delete - - METHOD lif_object~exists. - - DATA: lv_name TYPE itsappl. - - - lv_name = ms_item-obj_name. - - cl_w3_api_service=>if_w3_api_service~load( - EXPORTING - p_service_name = lv_name - EXCEPTIONS - object_not_existing = 1 - permission_failure = 2 - error_occured = 3 - OTHERS = 4 ). - IF sy-subrc = 1. - rv_bool = abap_false. - ELSEIF sy-subrc <> 0. - _raise 'error from w3_api_service~load'. - ELSE. - rv_bool = abap_true. - ENDIF. - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - _raise 'todo, IASP, jump'. - ENDMETHOD. "lif_object~jump - -ENDCLASS. "lcl_object_iasp IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_iatu DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_iatu DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - METHODS: - read - EXPORTING es_attr TYPE w3tempattr - ev_source TYPE string - RAISING lcx_exception, - save - IMPORTING is_attr TYPE w3tempattr - iv_source TYPE string - RAISING lcx_exception. - -ENDCLASS. "lcl_object_iatu DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_iatu IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_iatu IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD read. - - DATA: li_template TYPE REF TO if_w3_api_template, - lt_source TYPE w3htmltabtype, - ls_name TYPE iacikeyt. - - - ls_name = ms_item-obj_name. - - cl_w3_api_template=>if_w3_api_template~load( - EXPORTING - p_template_name = ls_name - IMPORTING - p_template = li_template - EXCEPTIONS - object_not_existing = 1 - permission_failure = 2 - error_occured = 3 - OTHERS = 4 ). - IF sy-subrc <> 0. - _raise 'error from w3api_template~load'. - ENDIF. - - li_template->get_attributes( IMPORTING p_attributes = es_attr ). - - CLEAR: es_attr-chname, - es_attr-tdate, - es_attr-ttime, - es_attr-devclass. - - li_template->get_source( IMPORTING p_source = lt_source ). - - CONCATENATE LINES OF lt_source INTO ev_source RESPECTING BLANKS. - - ENDMETHOD. "read - - METHOD lif_object~serialize. - - DATA: ls_attr TYPE w3tempattr, - lv_source TYPE string. - - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - read( IMPORTING es_attr = ls_attr - ev_source = lv_source ). - - io_xml->add( iv_name = 'ATTR' - ig_data = ls_attr ). - - mo_files->add_string( iv_ext = 'html' - iv_string = lv_source ) ##NO_TEXT. - - ENDMETHOD. "lif_object~serialize - - METHOD save. - - DATA: lt_source TYPE w3htmltabtype, - lv_source TYPE string, - li_template TYPE REF TO if_w3_api_template. - - - cl_w3_api_template=>if_w3_api_template~create_new( - EXPORTING p_template_data = is_attr - p_program_name = is_attr-programm - IMPORTING p_template = li_template ). - - li_template->set_attributes( is_attr ). - - lv_source = iv_source. - WHILE strlen( lv_source ) >= 255. - APPEND lv_source(255) TO lt_source. - lv_source = lv_source+255. - ENDWHILE. - IF NOT lv_source IS INITIAL. - APPEND lv_source TO lt_source. - ENDIF. - - li_template->set_source( lt_source ). - - li_template->if_w3_api_object~save( ). - - ENDMETHOD. "save - - METHOD lif_object~deserialize. - - DATA: ls_attr TYPE w3tempattr, - lv_source TYPE string. - - - io_xml->read( EXPORTING iv_name = 'ATTR' - CHANGING cg_data = ls_attr ). - - lv_source = mo_files->read_string( 'html' ) ##NO_TEXT. - - ls_attr-devclass = iv_package. - save( is_attr = ls_attr - iv_source = lv_source ). - - ENDMETHOD. "lif_object~deserialize - - METHOD lif_object~delete. - - DATA: li_template TYPE REF TO if_w3_api_template, - ls_name TYPE iacikeyt. - - - ls_name = ms_item-obj_name. - - cl_w3_api_template=>if_w3_api_template~load( - EXPORTING - p_template_name = ls_name - IMPORTING - p_template = li_template - EXCEPTIONS - object_not_existing = 1 - permission_failure = 2 - error_occured = 3 - OTHERS = 4 ). - IF sy-subrc <> 0. - _raise 'error from if_w3_api_template~load'. - ENDIF. - - li_template->if_w3_api_object~set_changeable( abap_true ). - li_template->if_w3_api_object~delete( ). - li_template->if_w3_api_object~save( ). - - ENDMETHOD. "lif_object~delete - - METHOD lif_object~exists. - - DATA: ls_name TYPE iacikeyt. - - - ls_name = ms_item-obj_name. - - cl_w3_api_template=>if_w3_api_template~load( - EXPORTING - p_template_name = ls_name - EXCEPTIONS - object_not_existing = 1 - permission_failure = 2 - error_occured = 3 - OTHERS = 4 ). - IF sy-subrc = 1. - rv_bool = abap_false. - ELSEIF sy-subrc <> 0. - _raise 'error from w3_api_template~load'. - ELSE. - rv_bool = abap_true. - ENDIF. - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - _raise 'todo, IATU, jump'. - ENDMETHOD. "lif_object~jump - -ENDCLASS. "lcl_object_iatu IMPLEMENTATION - - -*----------------------------------------------------------------------* -* CLASS lcl_object_dtel DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_dtel DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_dtel DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_dtel IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_dtel IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_rollname TYPE dd04l-rollname. - - - SELECT SINGLE rollname FROM dd04l INTO lv_rollname - WHERE rollname = ms_item-obj_name - AND as4local = 'A' - AND as4vers = '0000'. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - jump_se11( iv_radio = 'RSRD1-DDTYPE' - iv_field = 'RSRD1-DDTYPE_VAL' ). - - ENDMETHOD. "jump - - METHOD lif_object~delete. - - DATA: lv_objname TYPE rsedd0-ddobjname. - - - lv_objname = ms_item-obj_name. - - CALL FUNCTION 'RS_DD_DELETE_OBJ' - EXPORTING - no_ask = abap_true - objname = lv_objname - objtype = 'E' - EXCEPTIONS - not_executed = 1 - object_not_found = 2 - object_not_specified = 3 - permission_failure = 4. - IF sy-subrc <> 0. - _raise 'error from RS_DD_DELETE_OBJ, DTEL'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~serialize. - - DATA: lv_name TYPE ddobjname, - ls_dd04v TYPE dd04v, - ls_tpara TYPE tpara. - - - lv_name = ms_item-obj_name. - - CALL FUNCTION 'DDIF_DTEL_GET' - EXPORTING - name = lv_name - langu = mv_language - IMPORTING - dd04v_wa = ls_dd04v - tpara_wa = ls_tpara - EXCEPTIONS - illegal_input = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'Error from DDIF_DTEL_GET'. - ENDIF. - IF ls_dd04v IS INITIAL. - RETURN. " does not exist - ENDIF. - - CLEAR: ls_dd04v-as4user, - ls_dd04v-as4date, - ls_dd04v-as4time. - - io_xml->add( iv_name = 'DD04V' - ig_data = ls_dd04v ). - io_xml->add( iv_name = 'TPARA' - ig_data = ls_tpara ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: ls_dd04v TYPE dd04v, - lv_name TYPE ddobjname, - ls_tpara TYPE tpara. - - - io_xml->read( EXPORTING iv_name = 'DD04V' - CHANGING cg_data = ls_dd04v ). - io_xml->read( EXPORTING iv_name = 'TPARA' - CHANGING cg_data = ls_tpara ). - - corr_insert( iv_package ). - - lv_name = ms_item-obj_name. " type conversion - - CALL FUNCTION 'DDIF_DTEL_PUT' - EXPORTING - name = lv_name - dd04v_wa = ls_dd04v - EXCEPTIONS - dtel_not_found = 1 - name_inconsistent = 2 - dtel_inconsistent = 3 - put_failure = 4 - put_refused = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from DDIF_DTEL_PUT'. - ENDIF. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - -ENDCLASS. "lcl_object_dtel IMPLEMENTATION - *----------------------------------------------------------------------* * CLASS lcl_object_clas DEFINITION *----------------------------------------------------------------------* @@ -2666,4708 +1412,6 @@ CLASS lcl_object_clas IMPLEMENTATION. ENDCLASS. "lcl_object_CLAS IMPLEMENTATION -*----------------------------------------------------------------------* -* CLASS lcl_object_smim DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_smim DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - METHODS get_filename - IMPORTING iv_url TYPE string - RETURNING VALUE(rv_filename) TYPE string. - - METHODS find_content - IMPORTING iv_url TYPE string - RETURNING VALUE(rv_content) TYPE xstring - RAISING lcx_exception. - - METHODS build_filename - IMPORTING iv_filename TYPE string - RETURNING VALUE(rv_filename) TYPE string. - - METHODS get_url_for_io - EXPORTING ev_url TYPE string - ev_is_folder TYPE boole_d - RAISING lcx_not_found - lcx_exception. - -ENDCLASS. "lcl_object_smim DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_smim IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_smim IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - TRY. - get_url_for_io( ). - rv_bool = abap_true. - CATCH lcx_not_found. - rv_bool = abap_false. - ENDTRY. - - ENDMETHOD. "lif_object~exists - - METHOD get_url_for_io. - - DATA: ls_io TYPE skwf_io, - lv_url TYPE skwf_url, - ls_smimloio TYPE smimloio, - lv_loio TYPE sdok_docid. - - - lv_loio = ms_item-obj_name. - - CLEAR ev_url. - CLEAR ev_is_folder. - - SELECT SINGLE * FROM smimloio INTO ls_smimloio - WHERE loio_id = lv_loio. "#EC CI_GENBUFF - IF sy-subrc <> 0. - RAISE EXCEPTION TYPE lcx_not_found. - ENDIF. - - IF ls_smimloio-lo_class = wbmr_c_skwf_folder_class. - ev_is_folder = abap_true. - ls_io-objtype = skwfc_obtype_folder. - ELSE. - ls_io-objtype = skwfc_obtype_loio. - ENDIF. - ls_io-class = ls_smimloio-lo_class. - ls_io-objid = ls_smimloio-loio_id. - - CALL FUNCTION 'SKWF_NMSPC_IO_ADDRESS_GET' - EXPORTING - io = ls_io - IMPORTING - url = lv_url. - - ev_url = lv_url. - - ENDMETHOD. "get_url_for_io - - METHOD build_filename. - - CONCATENATE ms_item-obj_name ms_item-obj_type iv_filename - INTO rv_filename SEPARATED BY '.'. - TRANSLATE rv_filename TO LOWER CASE. - - ENDMETHOD. "build_filename - - METHOD find_content. - - DATA: lv_filename TYPE string, - lt_files TYPE ty_files_tt. - - FIELD-SYMBOLS: LIKE LINE OF lt_files. - - - lv_filename = get_filename( iv_url ). - - lv_filename = build_filename( lv_filename ). - - lt_files = mo_files->get_files( ). - - READ TABLE lt_files ASSIGNING WITH KEY filename = lv_filename. - IF sy-subrc <> 0. - _raise 'SMIM, file not found'. - ENDIF. - - rv_content = -data. - - ENDMETHOD. "find_content - - METHOD get_filename. - - DATA: lv_lines TYPE i, - lt_strings TYPE TABLE OF string. - - - SPLIT iv_url AT '/' INTO TABLE lt_strings. - lv_lines = lines( lt_strings ). - ASSERT lv_lines > 0. - READ TABLE lt_strings INDEX lv_lines INTO rv_filename. - ASSERT sy-subrc = 0. - - ENDMETHOD. "get_filename - - METHOD lif_object~serialize. - - DATA: lv_url TYPE string, - lv_folder TYPE abap_bool, - lv_filename TYPE string, - ls_file TYPE ty_file, - lv_content TYPE xstring, - li_api TYPE REF TO if_mr_api. - - - TRY. - get_url_for_io( - IMPORTING - ev_url = lv_url - ev_is_folder = lv_folder ). - CATCH lcx_not_found. - RETURN. - ENDTRY. - - IF lv_folder = abap_false. - li_api = cl_mime_repository_api=>if_mr_api~get_api( ). - li_api->get( - EXPORTING - i_url = lv_url - IMPORTING - e_content = lv_content - EXCEPTIONS - parameter_missing = 1 - error_occured = 2 - not_found = 3 - permission_failure = 4 - OTHERS = 5 ). - IF sy-subrc <> 0. - _raise 'error from mime api->get'. - ENDIF. - - lv_filename = get_filename( lv_url ). - CLEAR ls_file. - ls_file-filename = build_filename( lv_filename ). - ls_file-path = '/'. - ls_file-data = lv_content. - mo_files->add( ls_file ). - ENDIF. - - io_xml->add( iv_name = 'URL' - ig_data = lv_url ). - io_xml->add( iv_name = 'FOLDER' - ig_data = lv_folder ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_url TYPE string, - lv_folder TYPE abap_bool, - lv_content TYPE xstring, - lv_filename TYPE skwf_filnm, - lv_io TYPE sdok_docid, - ls_skwf_io TYPE skwf_io, - li_api TYPE REF TO if_mr_api. - - - li_api = cl_mime_repository_api=>if_mr_api~get_api( ). - lv_io = ms_item-obj_name. - - io_xml->read( EXPORTING iv_name = 'URL' - CHANGING cg_data = lv_url ). - io_xml->read( EXPORTING iv_name = 'FOLDER' - CHANGING cg_data = lv_folder ). - - ls_skwf_io-objid = lv_io. - - IF lv_folder = abap_true. - li_api->create_folder( - EXPORTING - i_url = lv_url - i_language = sy-langu - i_dev_package = iv_package - i_folder_loio = ls_skwf_io - EXCEPTIONS - parameter_missing = 1 - error_occured = 2 - cancelled = 3 - permission_failure = 4 - folder_exists = 5 - OTHERS = 6 ). - IF sy-subrc <> 5 AND sy-subrc <> 0. - _raise 'error frrom SMIM create_folder'. - ENDIF. - ELSE. - lv_filename = get_filename( lv_url ). - cl_wb_mime_repository=>determine_io_class( - EXPORTING - filename = lv_filename - IMPORTING - io_class = ls_skwf_io-class ). - CONCATENATE ls_skwf_io-class '_L' INTO ls_skwf_io-class. - - lv_content = find_content( lv_url ). - - li_api->put( - EXPORTING - i_url = lv_url - i_content = lv_content - i_dev_package = iv_package - i_new_loio = ls_skwf_io - EXCEPTIONS - parameter_missing = 1 - error_occured = 2 - cancelled = 3 - permission_failure = 4 - data_inconsistency = 5 - new_loio_already_exists = 6 - is_folder = 7 - OTHERS = 8 ). - IF sy-subrc <> 0. - _raise 'error from SMIM put'. - ENDIF. - ENDIF. - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: li_api TYPE REF TO if_mr_api, - lv_url TYPE string. - - - TRY. - get_url_for_io( - IMPORTING - ev_url = lv_url ). - CATCH lcx_not_found. - RETURN. - ENDTRY. - - li_api = cl_mime_repository_api=>if_mr_api~get_api( ). - li_api->delete( - EXPORTING - i_url = lv_url - i_delete_children = abap_true - EXCEPTIONS - parameter_missing = 1 - error_occured = 2 - cancelled = 3 - permission_failure = 4 - not_found = 5 - OTHERS = 6 ). - IF sy-subrc <> 0. - _raise 'error from delete'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - _raise 'todo, SMIM, jump'. - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_smim IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_sicf DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_sicf DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - TYPES: ty_icfhandler_tt TYPE STANDARD TABLE OF icfhandler WITH DEFAULT KEY. - - TYPES: BEGIN OF ty_sicf_key, - icf_name TYPE icfservice-icf_name, - icfparguid TYPE icfservice-icfparguid, - END OF ty_sicf_key. - - METHODS read - EXPORTING es_icfservice TYPE icfservice - es_icfdocu TYPE icfdocu - et_icfhandler TYPE ty_icfhandler_tt - ev_url TYPE string - RAISING lcx_exception. - - METHODS insert_sicf - IMPORTING is_icfservice TYPE icfservice - is_icfdocu TYPE icfdocu - it_icfhandler TYPE ty_icfhandler_tt - iv_package TYPE devclass - iv_url TYPE string - RAISING lcx_exception. - - METHODS change_sicf - IMPORTING is_icfservice TYPE icfservice - is_icfdocu TYPE icfdocu - it_icfhandler TYPE ty_icfhandler_tt - iv_package TYPE devclass - iv_parent TYPE icfparguid - RAISING lcx_exception. - - METHODS to_icfhndlist - IMPORTING it_list TYPE ty_icfhandler_tt - RETURNING VALUE(rt_list) TYPE icfhndlist. - - METHODS find_parent - IMPORTING iv_url TYPE string - RETURNING VALUE(rv_parent) TYPE icfparguid - RAISING lcx_exception. - -ENDCLASS. "lcl_object_sicf DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_sicf IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_sicf IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: ls_icfservice TYPE icfservice. - - - read( IMPORTING es_icfservice = ls_icfservice ). - rv_bool = boolc( NOT ls_icfservice IS INITIAL ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: ls_icfservice TYPE icfservice, - ls_icfdocu TYPE icfdocu, - lv_url TYPE string, - lt_icfhandler TYPE TABLE OF icfhandler. - - - read( IMPORTING es_icfservice = ls_icfservice - es_icfdocu = ls_icfdocu - et_icfhandler = lt_icfhandler - ev_url = lv_url ). - IF ls_icfservice IS INITIAL. - RETURN. - ENDIF. - - CLEAR ls_icfservice-icfnodguid. - CLEAR ls_icfservice-icfparguid. - CLEAR ls_icfservice-icf_user. - CLEAR ls_icfservice-icf_cclnt. - CLEAR ls_icfservice-icf_mclnt. - - io_xml->add( iv_name = 'URL' - ig_data = lv_url ). - io_xml->add( iv_name = 'ICFSERVICE' - ig_data = ls_icfservice ). - io_xml->add( iv_name = 'ICFDOCU' - ig_data = ls_icfdocu ). - io_xml->add( iv_name = 'ICFHANDLER_TABLE' - ig_data = lt_icfhandler ). - - ENDMETHOD. "serialize - - METHOD read. - - DATA: lt_serv_info TYPE icfservtbl, - ls_serv_info LIKE LINE OF lt_serv_info, - ls_key TYPE ty_sicf_key. - - FIELD-SYMBOLS: LIKE LINE OF et_icfhandler. - - - CLEAR es_icfservice. - CLEAR es_icfdocu. - CLEAR et_icfhandler. - CLEAR ev_url. - - ls_key = ms_item-obj_name. - IF ls_key-icfparguid IS INITIAL. -* limitation: name must be unique - SELECT SINGLE icfparguid FROM icfservice - INTO ls_key-icfparguid - WHERE icf_name = ls_key-icf_name - AND icf_cuser <> 'SAP' ##warn_ok. - IF sy-subrc <> 0. - RETURN. - ENDIF. - ENDIF. - - cl_icf_tree=>if_icf_tree~get_info_from_serv( - EXPORTING - icf_name = ls_key-icf_name - icfparguid = ls_key-icfparguid - icf_langu = mv_language - IMPORTING - serv_info = lt_serv_info - icfdocu = es_icfdocu - url = ev_url - EXCEPTIONS - wrong_name = 1 - wrong_parguid = 2 - incorrect_service = 3 - no_authority = 4 - OTHERS = 5 ). - IF sy-subrc <> 0. - _raise 'error from get_info_from_serv'. - ENDIF. - - ASSERT lines( lt_serv_info ) = 1. - READ TABLE lt_serv_info INDEX 1 INTO ls_serv_info. - ASSERT sy-subrc = 0. - - MOVE-CORRESPONDING ls_serv_info-service TO es_icfservice. - CLEAR es_icfservice-icf_cuser. - CLEAR es_icfservice-icf_cdate. - CLEAR es_icfservice-icf_muser. - CLEAR es_icfservice-icf_mdate. - - CLEAR es_icfdocu-icfparguid. - - APPEND LINES OF ls_serv_info-handlertbl TO et_icfhandler. - LOOP AT et_icfhandler ASSIGNING . - CLEAR -icfparguid. - ENDLOOP. - - ENDMETHOD. "read - - METHOD lif_object~deserialize. - - DATA: ls_icfservice TYPE icfservice, - ls_read TYPE icfservice, - ls_icfdocu TYPE icfdocu, - lv_url TYPE string, - lt_icfhandler TYPE TABLE OF icfhandler. - - - io_xml->read( EXPORTING iv_name = 'URL' - CHANGING cg_data = lv_url ). - io_xml->read( EXPORTING iv_name = 'ICFSERVICE' - CHANGING cg_data = ls_icfservice ). - io_xml->read( EXPORTING iv_name = 'ICFDOCU' - CHANGING cg_data = ls_icfdocu ). - io_xml->read( EXPORTING iv_name = 'ICFHANDLER_TABLE' - CHANGING cg_data = lt_icfhandler ). - - read( IMPORTING es_icfservice = ls_read ). - IF ls_read IS INITIAL. - insert_sicf( is_icfservice = ls_icfservice - is_icfdocu = ls_icfdocu - it_icfhandler = lt_icfhandler - iv_package = iv_package - iv_url = lv_url ). - ELSE. - change_sicf( is_icfservice = ls_icfservice - is_icfdocu = ls_icfdocu - it_icfhandler = lt_icfhandler - iv_package = iv_package - iv_parent = ls_read-icfparguid ). - ENDIF. - - ENDMETHOD. "deserialize - - METHOD to_icfhndlist. - - FIELD-SYMBOLS: LIKE LINE OF it_list. - - -* convert to sorted table - LOOP AT it_list ASSIGNING . - INSERT -icfhandler INTO TABLE rt_list. - ENDLOOP. - - ENDMETHOD. "to_icfhndlist - - METHOD find_parent. - - cl_icf_tree=>if_icf_tree~service_from_url( - EXPORTING - url = iv_url - hostnumber = 0 - IMPORTING - icfnodguid = rv_parent - EXCEPTIONS - wrong_application = 1 - no_application = 2 - not_allow_application = 3 - wrong_url = 4 - no_authority = 5 - OTHERS = 6 ). - IF sy-subrc <> 0. - _raise 'error from service_from_url'. - ENDIF. - - ENDMETHOD. "find_parent - - METHOD insert_sicf. - - DATA: lt_icfhndlist TYPE icfhndlist, - ls_icfserdesc TYPE icfserdesc, - ls_icfdocu TYPE icfdocu, - lv_parent TYPE icfparguid. - - - lt_icfhndlist = to_icfhndlist( it_icfhandler ). - lv_parent = find_parent( iv_url ). - -* nice, it seems that the structure should be mistreated - ls_icfdocu = is_icfdocu-icf_docu. - - MOVE-CORRESPONDING is_icfservice TO ls_icfserdesc. - - cl_icf_tree=>if_icf_tree~insert_node( - EXPORTING - icf_name = is_icfservice-orig_name - icfparguid = lv_parent - icfdocu = ls_icfdocu - doculang = mv_language - icfhandlst = lt_icfhndlist - package = iv_package - application = space - icfserdesc = ls_icfserdesc - icfactive = abap_true - EXCEPTIONS - empty_icf_name = 1 - no_new_virtual_host = 2 - special_service_error = 3 - parent_not_existing = 4 - enqueue_error = 5 - node_already_existing = 6 - empty_docu = 7 - doculang_not_installed = 8 - security_info_error = 9 - user_password_error = 10 - password_encryption_error = 11 - invalid_url = 12 - invalid_otr_concept = 13 - formflg401_error = 14 - handler_error = 15 - transport_error = 16 - tadir_error = 17 - package_not_found = 18 - wrong_application = 19 - not_allow_application = 20 - no_application = 21 - invalid_icfparguid = 22 - alt_name_invalid = 23 - alternate_name_exist = 24 - wrong_icf_name = 25 - no_authority = 26 - OTHERS = 27 ). - IF sy-subrc <> 0. - _raise 'error from insert_node'. - ENDIF. - - ENDMETHOD. "insert_sicf - - METHOD change_sicf. - - DATA: lt_icfhndlist TYPE icfhndlist, - lt_existing TYPE TABLE OF icfhandler, - ls_icfserdesc TYPE icfserdesc. - - FIELD-SYMBOLS: LIKE LINE OF lt_existing. - - - lt_icfhndlist = to_icfhndlist( it_icfhandler ). - -* Do not add handlers if they already exist, it will make the below -* call to SAP standard code raise an exception - SELECT * FROM icfhandler INTO TABLE lt_existing - WHERE icf_name = is_icfservice-icf_name. - LOOP AT lt_existing ASSIGNING . - DELETE TABLE lt_icfhndlist FROM -icfhandler. - ENDLOOP. - - MOVE-CORRESPONDING is_icfservice TO ls_icfserdesc. - - cl_icf_tree=>if_icf_tree~change_node( - EXPORTING - icf_name = is_icfservice-orig_name - icfparguid = iv_parent - icfdocu = is_icfdocu - doculang = mv_language - icfhandlst = lt_icfhndlist - package = iv_package - application = space - icfserdesc = ls_icfserdesc - icfactive = abap_true - EXCEPTIONS - empty_icf_name = 1 - no_new_virtual_host = 2 - special_service_error = 3 - parent_not_existing = 4 - enqueue_error = 5 - node_already_existing = 6 - empty_docu = 7 - doculang_not_installed = 8 - security_info_error = 9 - user_password_error = 10 - password_encryption_error = 11 - invalid_url = 12 - invalid_otr_concept = 13 - formflg401_error = 14 - handler_error = 15 - transport_error = 16 - tadir_error = 17 - package_not_found = 18 - wrong_application = 19 - not_allow_application = 20 - no_application = 21 - invalid_icfparguid = 22 - alt_name_invalid = 23 - alternate_name_exist = 24 - wrong_icf_name = 25 - no_authority = 26 - OTHERS = 27 ). - IF sy-subrc <> 0. - _raise 'error from change_node'. - ENDIF. - - ENDMETHOD. "change_sicf - - METHOD lif_object~delete. - - DATA: ls_icfservice TYPE icfservice. - - - read( IMPORTING es_icfservice = ls_icfservice ). - - cl_icf_tree=>if_icf_tree~delete_node( - EXPORTING - icfparguid = ls_icfservice-icfparguid - CHANGING - icf_name = ls_icfservice-icf_name - EXCEPTIONS - no_virtual_host_delete = 1 - special_service_error = 2 - enqueue_error = 3 - node_not_existing = 4 - node_has_childs = 5 - node_is_aliased = 6 - node_not_in_original_system = 7 - transport_error = 8 - tadir_error = 9 - db_error = 10 - no_authority = 11 - OTHERS = 12 ). - IF sy-subrc <> 0. - _raise 'error from delete_node'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - _raise 'todo, SICF, jump'. - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_sicf IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_ssst DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_ssst DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - METHODS validate_font - IMPORTING iv_tdfamily TYPE tdfamily - RAISING lcx_exception. - -ENDCLASS. "lcl_object_ssst DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_ssst IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_ssst IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_stylename TYPE stxsadm-stylename. - - - SELECT SINGLE stylename FROM stxsadm INTO lv_stylename - WHERE stylename = ms_item-obj_name. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD validate_font. - - DATA: lv_tdfamily TYPE tfo01-tdfamily. - - - SELECT SINGLE tdfamily FROM tfo01 INTO lv_tdfamily - WHERE tdfamily = iv_tdfamily. - IF sy-subrc <> 0. - _raise 'Font family not found'. - ENDIF. - - ENDMETHOD. "validate_font - - METHOD lif_object~serialize. -* see fm SSF_DOWNLOAD_STYLE - - DATA: lv_style_name TYPE tdssname, - ls_header TYPE ssfcats, - lt_paragraphs TYPE TABLE OF ssfparas, - lt_strings TYPE TABLE OF ssfstrings, - lt_tabstops TYPE TABLE OF stxstab. - - - lv_style_name = ms_item-obj_name. - - CALL FUNCTION 'SSF_READ_STYLE' - EXPORTING - i_style_name = lv_style_name - i_style_active_flag = 'A' - i_style_variant = '%MAIN' - i_style_language = mv_language - IMPORTING - e_header = ls_header - TABLES - e_paragraphs = lt_paragraphs - e_strings = lt_strings - e_tabstops = lt_tabstops - EXCEPTIONS - no_name = 1 - no_style = 2 - active_style_not_found = 3 - inactive_style_not_found = 4 - no_variant = 5 - no_main_variant = 6 - cancelled = 7 - no_access_permission = 8 - OTHERS = 9. - IF sy-subrc = 2. - RETURN. - ELSEIF sy-subrc <> 0. - _raise 'error from SSF_READ_STYLE'. - ENDIF. - - CLEAR ls_header-version. - CLEAR ls_header-firstuser. - CLEAR ls_header-firstdate. - CLEAR ls_header-firsttime. - CLEAR ls_header-lastuser. - CLEAR ls_header-lastdate. - CLEAR ls_header-lasttime. - - io_xml->add( iv_name = 'HEADER' - ig_data = ls_header ). - io_xml->add( ig_data = lt_paragraphs - iv_name = 'SSFPARAS' ). - io_xml->add( ig_data = lt_strings - iv_name = 'SSFSTRINGS' ). - io_xml->add( ig_data = lt_tabstops - iv_name = 'STXSTAB' ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. -* see fm SSF_UPLOAD_STYLE - - DATA: ls_header TYPE ssfcats, - lt_paragraphs TYPE TABLE OF ssfparas, - lt_strings TYPE TABLE OF ssfstrings, - lt_tabstops TYPE TABLE OF stxstab. - - - io_xml->read( EXPORTING iv_name = 'HEADER' - CHANGING cg_data = ls_header ). - io_xml->read( EXPORTING iv_name = 'SSFPARAS' - CHANGING cg_data = lt_paragraphs ). - io_xml->read( EXPORTING iv_name = 'SSFSTRINGS' - CHANGING cg_data = lt_strings ). - io_xml->read( EXPORTING iv_name = 'STXSTAB' - CHANGING cg_data = lt_tabstops ). - - validate_font( ls_header-tdfamily ). - - CALL FUNCTION 'SSF_SAVE_STYLE' - EXPORTING - i_header = ls_header - TABLES - i_paragraphs = lt_paragraphs - i_strings = lt_strings - i_tabstops = lt_tabstops. - - CALL FUNCTION 'SSF_ACTIVATE_STYLE' - EXPORTING - i_stylename = ls_header-stylename - EXCEPTIONS - no_name = 1 - no_style = 2 - cancelled = 3 - no_access_permission = 4 - illegal_language = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from SSF_ACTIVATE_STYLE'. - ENDIF. - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lv_stylename TYPE tdssname. - - - lv_stylename = ms_item-obj_name. - - CALL FUNCTION 'SSF_DELETE_STYLE' - EXPORTING - i_stylename = lv_stylename - i_with_dialog = abap_false - i_with_confirm_dialog = abap_false - EXCEPTIONS - no_name = 1 - no_style = 2 - style_locked = 3 - cancelled = 4 - no_access_permission = 5 - illegal_language = 6 - OTHERS = 7. - IF sy-subrc <> 0 AND sy-subrc <> 2. - _raise 'error from SSF_DELETE_STYLE'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - _raise 'todo'. - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_ssst IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_suso DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_suso DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_suso DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_wdyn DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_wdyn DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - - DATA: - mt_components TYPE TABLE OF wdy_ctlr_compo_vrs, - mt_sources TYPE TABLE OF wdy_ctlr_compo_source_vrs. - - METHODS: - get_limu_objects - RETURNING VALUE(rt_objects) TYPE wdy_md_transport_keys, - read - RETURNING VALUE(rs_component) TYPE wdy_component_metadata - RAISING lcx_exception, - read_controller - IMPORTING is_key TYPE wdy_md_controller_key - RETURNING VALUE(rs_controller) TYPE wdy_md_controller_meta_data - RAISING lcx_exception, - read_definition - IMPORTING is_key TYPE wdy_md_component_key - RETURNING VALUE(rs_definition) TYPE wdy_md_component_meta_data - RAISING lcx_exception, - read_view - IMPORTING is_key TYPE wdy_md_view_key - RETURNING VALUE(rs_view) TYPE wdy_md_view_meta_data - RAISING lcx_exception, - recover_controller - IMPORTING is_controller TYPE wdy_md_controller_meta_data - RAISING lcx_exception, - recover_definition - IMPORTING is_definition TYPE wdy_md_component_meta_data - RAISING lcx_exception, - recover_view - IMPORTING is_view TYPE wdy_md_view_meta_data - RAISING lcx_exception, - delta_controller - IMPORTING is_controller TYPE wdy_md_controller_meta_data - RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object - RAISING lcx_exception, - delta_definition - IMPORTING is_definition TYPE wdy_md_component_meta_data - RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object - RAISING lcx_exception, - delta_view - IMPORTING is_view TYPE wdy_md_view_meta_data - RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object - RAISING lcx_exception. - -ENDCLASS. "lcl_object_wdyn DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_wdyn IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_wdyn IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_component_name TYPE wdy_component-component_name. - - - SELECT SINGLE component_name FROM wdy_component - INTO lv_component_name - WHERE component_name = ms_item-obj_name - AND version = 'A'. "#EC CI_GENBUFF - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD delta_definition. - - DATA: ls_key TYPE wdy_md_component_key, - lv_found TYPE abap_bool, - ls_obj_new TYPE svrs2_versionable_object, - li_component TYPE REF TO if_wdy_md_component, - ls_obj_old TYPE svrs2_versionable_object. - - - ls_key-component_name = is_definition-definition-component_name. - - lv_found = cl_wdy_md_component=>check_existency( ls_key-component_name ). - IF lv_found = abap_false. - TRY. - cl_wdy_md_component=>create_complete( - EXPORTING - name = ls_key-component_name - IMPORTING - component = li_component ). - li_component->save_to_database( ). - li_component->unlock( ). - CATCH cx_wdy_md_exception. - _raise 'error creating dummy component'. - ENDTRY. - ENDIF. - - ls_obj_new-objtype = wdyn_limu_component_definition. - ls_obj_new-objname = ls_key-component_name. - - ls_obj_old-objtype = wdyn_limu_component_definition. - ls_obj_old-objname = ls_key-component_name. - - APPEND is_definition-definition TO ls_obj_old-wdyd-defin. - ls_obj_old-wdyd-descr = is_definition-descriptions. - ls_obj_old-wdyd-cusag = is_definition-component_usages. - ls_obj_old-wdyd-intrf = is_definition-interface_implementings. - ls_obj_old-wdyd-libra = is_definition-library_usages. - ls_obj_old-wdyd-ctuse = is_definition-ext_ctlr_usages. - ls_obj_old-wdyd-ctmap = is_definition-ext_ctx_mappings. - - CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' - EXPORTING - obj_old = ls_obj_new - obj_new = ls_obj_old - CHANGING - delta = rs_delta - EXCEPTIONS - inconsistent_objects = 1. - IF sy-subrc <> 0. - _raise 'error from SVRS_MAKE_OBJECT_DELTA'. - ENDIF. - - ENDMETHOD. "delta_definition - - METHOD delta_controller. - - DATA: li_controller TYPE REF TO if_wdy_md_controller, - lv_found TYPE abap_bool, - ls_key TYPE wdy_md_controller_key, - ls_obj_new TYPE svrs2_versionable_object, - ls_obj_old TYPE svrs2_versionable_object. - - FIELD-SYMBOLS: LIKE LINE OF mt_components, - LIKE LINE OF mt_sources. - - - ls_key-component_name = is_controller-definition-component_name. - ls_key-controller_name = is_controller-definition-controller_name. - - lv_found = cl_wdy_md_controller=>check_existency( - component_name = ls_key-component_name - controller_name = ls_key-controller_name ). - IF lv_found = abap_false. - TRY. - li_controller ?= cl_wdy_md_controller=>create_complete( - component_name = ls_key-component_name - controller_name = ls_key-controller_name - controller_type = is_controller-definition-controller_type ). - li_controller->save_to_database( ). - li_controller->unlock( ). - CATCH cx_wdy_md_exception. - _raise 'error creating dummy controller'. - ENDTRY. - ENDIF. - - ls_obj_new-objtype = wdyn_limu_component_controller. - ls_obj_new-objname = ls_key. - - ls_obj_old-objtype = wdyn_limu_component_controller. - ls_obj_old-objname = ls_key. - - APPEND is_controller-definition TO ls_obj_old-wdyc-defin. - - LOOP AT mt_components ASSIGNING - WHERE component_name = ls_key-component_name - AND controller_name = ls_key-controller_name. - APPEND TO ls_obj_old-wdyc-ccomp. - ENDLOOP. - LOOP AT mt_sources ASSIGNING - WHERE component_name = ls_key-component_name - AND controller_name = ls_key-controller_name. - APPEND TO ls_obj_old-wdyc-ccoms. - ENDLOOP. - - ls_obj_old-wdyc-descr = is_controller-descriptions. - ls_obj_old-wdyc-cusag = is_controller-controller_usages. - ls_obj_old-wdyc-ccomt = is_controller-controller_component_texts. - ls_obj_old-wdyc-cpara = is_controller-controller_parameters. - ls_obj_old-wdyc-cpart = is_controller-controller_parameter_texts. - ls_obj_old-wdyc-cnode = is_controller-context_nodes. - ls_obj_old-wdyc-cattr = is_controller-context_attributes. - ls_obj_old-wdyc-cmapp = is_controller-context_mappings. - ls_obj_old-wdyc-excp = is_controller-controller_exceptions. - ls_obj_old-wdyc-excpt = is_controller-controller_exception_texts. - ls_obj_old-wdyc-fgrps = is_controller-fieldgroups. - - CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' - EXPORTING - obj_old = ls_obj_new - obj_new = ls_obj_old - CHANGING - delta = rs_delta - EXCEPTIONS - inconsistent_objects = 1. - IF sy-subrc <> 0. - _raise 'error from SVRS_MAKE_OBJECT_DELTA'. - ENDIF. - - ENDMETHOD. "delta_controller - - METHOD delta_view. - - DATA: ls_key TYPE wdy_md_view_key, - ls_obj_new TYPE svrs2_versionable_object, - ls_obj_old TYPE svrs2_versionable_object, - lv_found TYPE abap_bool, - li_view TYPE REF TO if_wdy_md_abstract_view. - - FIELD-SYMBOLS: LIKE LINE OF ls_obj_old-wdyv-defin. - - - ls_key-component_name = is_view-definition-component_name. - ls_key-view_name = is_view-definition-view_name. - - lv_found = cl_wdy_md_abstract_view=>check_existency( - component_name = ls_key-component_name - name = ls_key-view_name ). - IF lv_found = abap_false. - TRY. - li_view = cl_wdy_md_abstract_view=>create( - component_name = is_view-definition-component_name - view_name = is_view-definition-view_name - type = is_view-definition-type ). - li_view->save_to_database( ). - li_view->unlock( ). - CATCH cx_wdy_md_exception. - _raise 'error creating dummy view'. - ENDTRY. - ENDIF. - - ls_obj_new-objtype = wdyn_limu_component_view. - ls_obj_new-objname = ls_key. - - ls_obj_old-objtype = wdyn_limu_component_view. - ls_obj_old-objname = ls_key. - - APPEND INITIAL LINE TO ls_obj_old-wdyv-defin ASSIGNING . - MOVE-CORRESPONDING is_view-definition TO . - - ls_obj_old-wdyv-descr = is_view-descriptions. - ls_obj_old-wdyv-vcont = is_view-view_containers. - ls_obj_old-wdyv-vcntt = is_view-view_container_texts. - ls_obj_old-wdyv-ibplg = is_view-iobound_plugs. - ls_obj_old-wdyv-ibplt = is_view-iobound_plug_texts. - ls_obj_old-wdyv-plpar = is_view-plug_parameters. - ls_obj_old-wdyv-plprt = is_view-plug_parameter_texts. - ls_obj_old-wdyv-uiele = is_view-ui_elements. - ls_obj_old-wdyv-uicon = is_view-ui_context_bindings. - ls_obj_old-wdyv-uievt = is_view-ui_event_bindings. - ls_obj_old-wdyv-uiddc = is_view-ui_ddic_bindings. - ls_obj_old-wdyv-uiprp = is_view-ui_properties. - ls_obj_old-wdyv-navil = is_view-navigation_links. - ls_obj_old-wdyv-navit = is_view-navigation_target_refs. - ls_obj_old-wdyv-vshno = is_view-vsh_nodes. - ls_obj_old-wdyv-vshpl = is_view-vsh_placeholders. - ls_obj_old-wdyv-views = is_view-viewset_properties. - - CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' - EXPORTING - obj_old = ls_obj_new - obj_new = ls_obj_old - CHANGING - delta = rs_delta - EXCEPTIONS - inconsistent_objects = 1. - IF sy-subrc <> 0. - _raise 'error from SVRS_MAKE_OBJECT_DELTA'. - ENDIF. - - ENDMETHOD. "delta_view - - METHOD recover_definition. - - DATA: ls_key TYPE wdy_md_component_key, - lv_corrnr TYPE trkorr, - ls_delta TYPE svrs2_xversionable_object. - - - ls_delta = delta_definition( is_definition ). - ls_key-component_name = is_definition-definition-component_name. - - cl_wdy_md_component=>recover_version( - EXPORTING - component_key = ls_key - delta = ls_delta-wdyd - CHANGING - corrnr = lv_corrnr ). - - ENDMETHOD. "recover_definition - - METHOD recover_controller. - - DATA: ls_key TYPE wdy_controller_key, - lv_corrnr TYPE trkorr, - ls_delta TYPE svrs2_xversionable_object. - - - ls_delta = delta_controller( is_controller ). - ls_key-component_name = is_controller-definition-component_name. - ls_key-controller_name = is_controller-definition-controller_name. - - cl_wdy_md_controller=>recover_version( - EXPORTING - controller_key = ls_key - delta = ls_delta-wdyc - CHANGING - corrnr = lv_corrnr ). - - ENDMETHOD. "recover_controller - - METHOD recover_view. - - DATA: ls_key TYPE wdy_md_view_key, - lv_corrnr TYPE trkorr, - ls_delta TYPE svrs2_xversionable_object. - - - ls_delta = delta_view( is_view ). - ls_key-component_name = is_view-definition-component_name. - ls_key-view_name = is_view-definition-view_name. - - cl_wdy_md_abstract_view=>recover_version( - EXPORTING - view_key = ls_key - delta = ls_delta-wdyv - CHANGING - corrnr = lv_corrnr ). - - ENDMETHOD. "recover_view - - METHOD read_controller. - - DATA: lt_components TYPE TABLE OF wdy_ctlr_compo_vrs, - lt_sources TYPE TABLE OF wdy_ctlr_compo_source_vrs, - lt_definition TYPE TABLE OF wdy_controller, - lt_psmodilog TYPE TABLE OF smodilog, - lt_psmodisrc TYPE TABLE OF smodisrc. - - - CALL FUNCTION 'WDYC_GET_OBJECT' - EXPORTING - controller_key = is_key - get_all_translations = abap_false - TABLES - definition = lt_definition - descriptions = rs_controller-descriptions - controller_usages = rs_controller-controller_usages - controller_components = lt_components - controller_component_sources = lt_sources - controller_component_texts = rs_controller-controller_component_texts - controller_parameters = rs_controller-controller_parameters - controller_parameter_texts = rs_controller-controller_parameter_texts - context_nodes = rs_controller-context_nodes - context_attributes = rs_controller-context_attributes - context_mappings = rs_controller-context_mappings - fieldgroups = rs_controller-fieldgroups - controller_exceptions = rs_controller-controller_exceptions - controller_exception_texts = rs_controller-controller_exception_texts - psmodilog = lt_psmodilog " not optional in all versions - psmodisrc = lt_psmodisrc " not optional in all versions - EXCEPTIONS - not_existing = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error from WDYC_GET_OBJECT'. - ENDIF. - - APPEND LINES OF lt_components TO mt_components. - APPEND LINES OF lt_sources TO mt_sources. - - READ TABLE lt_definition INDEX 1 INTO rs_controller-definition. - IF sy-subrc <> 0. - _raise 'WDYC, definition not found'. - ENDIF. - - CLEAR: rs_controller-definition-author, - rs_controller-definition-createdon, - rs_controller-definition-changedby, - rs_controller-definition-changedon. - - ENDMETHOD. "read_controller - - METHOD read_definition. - - DATA: lt_definition TYPE TABLE OF wdy_component, - lt_psmodilog TYPE TABLE OF smodilog, - lt_psmodisrc TYPE TABLE OF smodisrc. - - - CALL FUNCTION 'WDYD_GET_OBJECT' - EXPORTING - component_key = is_key - get_all_translations = abap_false - TABLES - definition = lt_definition - descriptions = rs_definition-descriptions - component_usages = rs_definition-component_usages - interface_implementings = rs_definition-interface_implementings - library_usages = rs_definition-library_usages - ext_ctlr_usages = rs_definition-ext_ctlr_usages - ext_ctx_mappings = rs_definition-ext_ctx_mappings - psmodilog = lt_psmodilog " not optional in all versions - psmodisrc = lt_psmodisrc " not optional in all versions - EXCEPTIONS - not_existing = 1 - OTHERS = 2. - IF sy-subrc = 1. - RETURN. - ELSEIF sy-subrc <> 0. - _raise 'error from WDYD_GET_OBJECT'. - ENDIF. - - READ TABLE lt_definition INDEX 1 INTO rs_definition-definition. - IF sy-subrc <> 0. - _raise 'WDYD, definition not found'. - ENDIF. - - CLEAR: rs_definition-definition-author, - rs_definition-definition-createdon, - rs_definition-definition-changedby, - rs_definition-definition-changedon, - rs_definition-definition-gendate, - rs_definition-definition-gentime. - - ENDMETHOD. "read_definition - - METHOD read_view. - - DATA: lt_definition TYPE TABLE OF wdy_view_vrs, - lt_psmodilog TYPE TABLE OF smodilog, - lt_psmodisrc TYPE TABLE OF smodisrc. - - FIELD-SYMBOLS: LIKE LINE OF lt_definition. - - - CALL FUNCTION 'WDYV_GET_OBJECT' - EXPORTING - view_key = is_key - get_all_translations = abap_false - TABLES - definition = lt_definition - descriptions = rs_view-descriptions - view_containers = rs_view-view_containers - view_container_texts = rs_view-view_container_texts - iobound_plugs = rs_view-iobound_plugs - iobound_plug_texts = rs_view-iobound_plug_texts - plug_parameters = rs_view-plug_parameters - plug_parameter_texts = rs_view-plug_parameter_texts - ui_elements = rs_view-ui_elements - ui_context_bindings = rs_view-ui_context_bindings - ui_event_bindings = rs_view-ui_event_bindings - ui_ddic_bindings = rs_view-ui_ddic_bindings - ui_properties = rs_view-ui_properties - navigation_links = rs_view-navigation_links - navigation_target_refs = rs_view-navigation_target_refs - vsh_nodes = rs_view-vsh_nodes - vsh_placeholders = rs_view-vsh_placeholders - viewset_properties = rs_view-viewset_properties - psmodilog = lt_psmodilog - psmodisrc = lt_psmodisrc - EXCEPTIONS - not_existing = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error from WDYV_GET_OBJECT'. - ENDIF. - - READ TABLE lt_definition INDEX 1 ASSIGNING . - ASSERT sy-subrc = 0. - MOVE-CORRESPONDING TO rs_view-definition. - - CLEAR: rs_view-definition-author, - rs_view-definition-createdon, - rs_view-definition-changedby, - rs_view-definition-changedon. - - ENDMETHOD. "read_view - - METHOD get_limu_objects. - - DATA: lv_name TYPE wdy_component_name. - - - lv_name = ms_item-obj_name. - CALL FUNCTION 'WDYN_GET_LIMU_OBJECTS' - EXPORTING - component_name = lv_name - IMPORTING - limu_objects = rt_objects. - - ENDMETHOD. "get_limu_objects - - METHOD read. - - DATA: lt_objects TYPE wdy_md_transport_keys, - ls_controller_key TYPE wdy_md_controller_key, - ls_component_key TYPE wdy_md_component_key, - ls_view_key TYPE wdy_md_view_key. - - FIELD-SYMBOLS: LIKE LINE OF lt_objects. - - - CLEAR mt_components. - CLEAR mt_sources. - - lt_objects = get_limu_objects( ). - - LOOP AT lt_objects ASSIGNING . - CASE -sub_type. - WHEN wdyn_limu_component_controller. - ls_controller_key = -sub_name. - APPEND read_controller( ls_controller_key ) TO rs_component-ctlr_metadata. - WHEN wdyn_limu_component_definition. - ls_component_key = -sub_name. - rs_component-comp_metadata = read_definition( ls_component_key ). - WHEN wdyn_limu_component_view. - ls_view_key = -sub_name. - APPEND read_view( ls_view_key ) TO rs_component-view_metadata. - WHEN OTHERS. - ASSERT 0 = 1. - ENDCASE. - ENDLOOP. - - SORT rs_component-ctlr_metadata BY - definition-component_name ASCENDING - definition-controller_name ASCENDING. - - SORT mt_components BY - component_name ASCENDING - controller_name ASCENDING - cmpname ASCENDING. - - SORT mt_sources BY - component_name ASCENDING - controller_name ASCENDING - cmpname ASCENDING - line_number ASCENDING. - - ENDMETHOD. "read - - METHOD lif_object~serialize. - - DATA: ls_component TYPE wdy_component_metadata. - - - ls_component = read( ). - - io_xml->add( iv_name = 'COMPONENT' - ig_data = ls_component ). - io_xml->add( ig_data = mt_components - iv_name = 'COMPONENTS' ). - io_xml->add( ig_data = mt_sources - iv_name = 'SOURCES' ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: ls_component TYPE wdy_component_metadata. - - FIELD-SYMBOLS: LIKE LINE OF ls_component-view_metadata, - LIKE LINE OF ls_component-ctlr_metadata. - - - io_xml->read( EXPORTING iv_name = 'COMPONENT' - CHANGING cg_data = ls_component ). - io_xml->read( EXPORTING iv_name = 'COMPONENTS' - CHANGING cg_data = mt_components ). - io_xml->read( EXPORTING iv_name = 'SOURCES' - CHANGING cg_data = mt_sources ). - - ls_component-comp_metadata-definition-author = sy-uname. - ls_component-comp_metadata-definition-createdon = sy-datum. - recover_definition( ls_component-comp_metadata ). - - LOOP AT ls_component-ctlr_metadata ASSIGNING . - -definition-author = sy-uname. - -definition-createdon = sy-datum. - recover_controller( ). - ENDLOOP. - LOOP AT ls_component-view_metadata ASSIGNING . - -definition-author = sy-uname. - -definition-createdon = sy-datum. - recover_view( ). - ENDLOOP. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lo_component TYPE REF TO cl_wdy_wb_component, - lo_request TYPE REF TO cl_wb_request, - li_state TYPE REF TO if_wb_program_state, - lv_object_name TYPE seu_objkey. - - - CREATE OBJECT lo_component. - - lv_object_name = ms_item-obj_name. - CREATE OBJECT lo_request - EXPORTING - p_object_type = 'YC' - p_object_name = lv_object_name - p_operation = swbm_c_op_delete_no_dialog. - - lo_component->if_wb_program~process_wb_request( - p_wb_request = lo_request - p_wb_program_state = li_state ). - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = ms_item-obj_type - in_new_window = abap_true. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_wdyn IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_wdya DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_wdya DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - METHODS read - EXPORTING es_app TYPE wdy_application - et_properties TYPE wdy_app_property_table - RAISING lcx_exception. - - METHODS save - IMPORTING is_app TYPE wdy_application - it_properties TYPE wdy_app_property_table - iv_package TYPE devclass - RAISING lcx_exception. - -ENDCLASS. "lcl_object_wdya DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_wdya IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_wdya IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_name TYPE wdy_application_name. - - - lv_name = ms_item-obj_name. - - TRY. - cl_wdy_md_application=>get_object_by_key( - name = lv_name - version = 'A' ). - rv_bool = abap_true. - CATCH cx_wdy_md_not_existing. - rv_bool = abap_false. - CATCH cx_wdy_md_permission_failure. - _raise 'WDYA, permission failure'. - ENDTRY. - - ENDMETHOD. "lif_object~exists - - METHOD read. - - DATA: li_app TYPE REF TO if_wdy_md_application, - li_map TYPE REF TO if_object_map, - lo_prop TYPE REF TO cl_wdy_md_application_property, - ls_prop LIKE LINE OF et_properties, - lv_name TYPE wdy_application_name. - - - CLEAR es_app. - CLEAR et_properties. - - lv_name = ms_item-obj_name. - TRY. - li_app = cl_wdy_md_application=>get_object_by_key( - name = lv_name - version = 'A' ). - CATCH cx_wdy_md_not_existing. - RETURN. - CATCH cx_wdy_md_permission_failure. - _raise 'WDYA, permission failure'. - ENDTRY. - - li_app->if_wdy_md_object~get_definition( IMPORTING definition = es_app ). - CLEAR: es_app-author, - es_app-createdon, - es_app-changedby, - es_app-changedon. - - li_map = li_app->get_properties( ). - DO li_map->size( ) TIMES. - lo_prop ?= li_map->get_by_position( sy-index ). - lo_prop->get_definition( IMPORTING definition = ls_prop ). - APPEND ls_prop TO et_properties. - ENDDO. - - ENDMETHOD. "read - - METHOD lif_object~serialize. - - DATA: ls_app TYPE wdy_application, - lt_properties TYPE wdy_app_property_table. - - - read( IMPORTING es_app = ls_app - et_properties = lt_properties ). - - io_xml->add( iv_name = 'APP' - ig_data = ls_app ). - io_xml->add( iv_name = 'PROPERTIES' - ig_data = lt_properties ). - - ENDMETHOD. "serialize - - METHOD save. - - DATA: li_prop TYPE REF TO if_wdy_md_application_property, - lo_app TYPE REF TO cl_wdy_md_application. - - FIELD-SYMBOLS: LIKE LINE OF it_properties. - - - TRY. - CREATE OBJECT lo_app - EXPORTING - name = is_app-application_name - definition = is_app - devclass = iv_package. - - LOOP AT it_properties ASSIGNING . - li_prop = lo_app->if_wdy_md_application~create_property( -name ). - li_prop->set_value( -value ). - ENDLOOP. - - lo_app->if_wdy_md_lockable_object~save_to_database( ). - CATCH cx_wdy_md_exception. - _raise 'error saving WDYA'. - ENDTRY. - - ENDMETHOD. "save - - METHOD lif_object~deserialize. - - DATA: ls_app TYPE wdy_application, - lt_properties TYPE wdy_app_property_table. - - - io_xml->read( EXPORTING iv_name = 'APP' - CHANGING cg_data = ls_app ). - io_xml->read( EXPORTING iv_name = 'PROPERTIES' - CHANGING cg_data = lt_properties ). - - save( is_app = ls_app - it_properties = lt_properties - iv_package = iv_package ). - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: li_app TYPE REF TO if_wdy_md_application, - lv_objkey TYPE wdy_wb_appl_name, - lv_type TYPE seu_type, - lv_name TYPE wdy_application_name. - - - lv_name = ms_item-obj_name. - TRY. - li_app = cl_wdy_md_application=>get_object_by_key( - name = lv_name - version = 'A' ). - li_app->if_wdy_md_object~delete( ). - li_app->if_wdy_md_lockable_object~save_to_database( ). - -* method save_to_database calls function module TR_TADIR_INTERFACE -* with test mode = X, so it does not delete the TADIR entry. -* Instead the standard code uses RS_TREE_OBJECT_PLACEMENT to delete -* the TADIR entry - lv_objkey = ms_item-obj_name. - CONCATENATE 'O' swbm_c_type_wdy_application INTO lv_type. - CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT' - EXPORTING - object = lv_objkey - type = lv_type - operation = 'DELETE'. - - CATCH cx_wdy_md_not_existing. - RETURN. - CATCH cx_wdy_md_exception. - _raise 'WDYA, error deleting'. - ENDTRY. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = ms_item-obj_type - in_new_window = abap_true. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_wdya IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_susc DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_susc DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_susc DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_suso IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_suso IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_objct TYPE tobj-objct. - - - SELECT SINGLE objct FROM tobj INTO lv_objct - WHERE objct = ms_item-obj_name. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: ls_tobj TYPE tobj, - ls_tobjt TYPE tobjt, - ls_tobjvorflg TYPE tobjvorflg, - lt_tactz TYPE TABLE OF tactz, - lt_tobjvordat TYPE TABLE OF tobjvordat, - lt_tobjvor TYPE TABLE OF tobjvor. - - - SELECT SINGLE * FROM tobj INTO ls_tobj - WHERE objct = ms_item-obj_name. - IF sy-subrc <> 0. - RETURN. - ENDIF. - CLEAR ls_tobj-bname. - - SELECT SINGLE * FROM tobjt INTO ls_tobjt - WHERE object = ms_item-obj_name - AND langu = mv_language. "#EC CI_GENBUFF - IF sy-subrc <> 0. - _raise 'TOBJT no english description'. - ENDIF. - - SELECT SINGLE * FROM tobjvorflg INTO ls_tobjvorflg - WHERE objct = ms_item-obj_name. "#EC CI_SUBRC - - SELECT * FROM tactz INTO TABLE lt_tactz - WHERE brobj = ms_item-obj_name - ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF - - SELECT * FROM tobjvordat INTO TABLE lt_tobjvordat - WHERE objct = ms_item-obj_name - ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF - - SELECT * FROM tobjvor INTO TABLE lt_tobjvor - WHERE objct = ms_item-obj_name - ORDER BY PRIMARY KEY. "#EC CI_SUBRC - - io_xml->add( iv_name = 'TOBJ' - ig_data = ls_tobj ). - io_xml->add( iv_name = 'TOBJT' - ig_data = ls_tobjt ). - io_xml->add( iv_name = 'TOBJVORFLG' - ig_data = ls_tobjvorflg ). - io_xml->add( ig_data = lt_tactz - iv_name = 'TACTZ' ). - io_xml->add( ig_data = lt_tobjvordat - iv_name = 'TOBJVORDAT' ). - io_xml->add( ig_data = lt_tobjvor - iv_name = 'TOBJVOR' ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. -* see function group SUSA - - DATA: lv_objectname TYPE e071-obj_name, - ls_tobj TYPE tobj, - ls_tobjt TYPE tobjt, - ls_tobjvorflg TYPE tobjvorflg, - lt_tactz TYPE TABLE OF tactz, - lt_tobjvordat TYPE TABLE OF tobjvordat, - lt_tobjvor TYPE TABLE OF tobjvor. - - - ASSERT NOT ms_item-obj_name IS INITIAL. - - io_xml->read( EXPORTING iv_name = 'TOBJ' - CHANGING cg_data = ls_tobj ). - ls_tobj-bname = sy-uname. - io_xml->read( EXPORTING iv_name = 'TOBJT' - CHANGING cg_data = ls_tobjt ). - io_xml->read( EXPORTING iv_name = 'TOBJVORFLG' - CHANGING cg_data = ls_tobjvorflg ). - io_xml->read( EXPORTING iv_name = 'TACTZ' - CHANGING cg_data = lt_tactz ). - io_xml->read( EXPORTING iv_name = 'TOBJVORDAT' - CHANGING cg_data = lt_tobjvordat ). - io_xml->read( EXPORTING iv_name = 'TOBJVOR' - CHANGING cg_data = lt_tobjvor ). - - lv_objectname = ms_item-obj_name. - CALL FUNCTION 'SUSR_COMMEDITCHECK' - EXPORTING - objectname = lv_objectname - transobjecttype = 'O'. - - MODIFY tobj FROM ls_tobj. "#EC CI_SUBRC - MODIFY tobjt FROM ls_tobjt. "#EC CI_SUBRC - MODIFY tobjvorflg FROM ls_tobjvorflg. "#EC CI_SUBRC - DELETE FROM tactz WHERE brobj = ms_item-obj_name. "#EC CI_SUBRC - INSERT tactz FROM TABLE lt_tactz. "#EC CI_SUBRC - DELETE FROM tobjvordat WHERE objct = ms_item-obj_name. "#EC CI_SUBRC - INSERT tobjvordat FROM TABLE lt_tobjvordat. "#EC CI_SUBRC - DELETE FROM tobjvor WHERE objct = ms_item-obj_name. "#EC CI_SUBRC - INSERT tobjvor FROM TABLE lt_tobjvor. "#EC CI_SUBRC - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lv_object TYPE tobj-objct. - - - lv_object = ms_item-obj_name. - CALL FUNCTION 'SUSR_DELETE_OBJECT' - EXPORTING - object = lv_object. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - DATA: lv_object TYPE tobj-objct. - - - lv_object = ms_item-obj_name. - CALL FUNCTION 'SUSR_SHOW_OBJECT' - EXPORTING - object = lv_object. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_suso IMPLEMENTATION - - -*----------------------------------------------------------------------* -* CLASS lcl_object_susc IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_susc IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_oclss TYPE tobc-oclss. - - - SELECT SINGLE oclss FROM tobc INTO lv_oclss - WHERE oclss = ms_item-obj_name. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: ls_tobc TYPE tobc, - ls_tobct TYPE tobct. - - - SELECT SINGLE * FROM tobc INTO ls_tobc - WHERE oclss = ms_item-obj_name. - IF sy-subrc <> 0. - RETURN. - ENDIF. - - SELECT SINGLE * FROM tobct INTO ls_tobct - WHERE oclss = ms_item-obj_name - AND langu = mv_language. - IF sy-subrc <> 0. - _raise 'TOBCT no english description'. - ENDIF. - - io_xml->add( iv_name = 'TOBC' - ig_data = ls_tobc ). - io_xml->add( iv_name = 'TOBCT' - ig_data = ls_tobct ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. -* see function group SUSA - - DATA: ls_tobc TYPE tobc, - lv_objectname TYPE e071-obj_name, - ls_tobct TYPE tobct. - - - io_xml->read( EXPORTING iv_name = 'TOBC' - CHANGING cg_data = ls_tobc ). - io_xml->read( EXPORTING iv_name = 'TOBCT' - CHANGING cg_data = ls_tobct ). - - lv_objectname = ms_item-obj_name. - CALL FUNCTION 'SUSR_COMMEDITCHECK' - EXPORTING - objectname = lv_objectname - transobjecttype = 'C'. - - INSERT tobc FROM ls_tobc. "#EC CI_SUBRC -* ignore sy-subrc as all fields are key fields - - MODIFY tobct FROM ls_tobct. "#EC CI_SUBRC - ASSERT sy-subrc = 0. - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lv_objclass TYPE tobc-oclss. - - - lv_objclass = ms_item-obj_name. - CALL FUNCTION 'SUSR_DELETE_OBJECT_CLASS' - EXPORTING - objclass = lv_objclass. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - DATA: lv_objclass TYPE tobc-oclss. - - - lv_objclass = ms_item-obj_name. - CALL FUNCTION 'SUSR_SHOW_OBJECT_CLASS' - EXPORTING - objclass = lv_objclass. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_susc IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_type DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_type DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - METHODS read - EXPORTING ev_ddtext TYPE ddtypet-ddtext - et_source TYPE abaptxt255_tab - RAISING lcx_exception - lcx_not_found. - - METHODS create - IMPORTING iv_ddtext TYPE ddtypet-ddtext - it_source TYPE abaptxt255_tab - iv_devclass TYPE devclass - RAISING lcx_exception. - -ENDCLASS. "lcl_object_type DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_type IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_type IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - TRY. - read( ). - rv_bool = abap_true. - CATCH lcx_not_found. - rv_bool = abap_false. - ENDTRY. - - ENDMETHOD. "lif_object~exists - - METHOD read. - - DATA: lv_typdname TYPE rsedd0-typegroup, - lt_psmodisrc TYPE TABLE OF smodisrc, - lt_psmodilog TYPE TABLE OF smodilog, - lt_ptrdir TYPE TABLE OF trdir. - - - SELECT SINGLE ddtext FROM ddtypet - INTO ev_ddtext - WHERE typegroup = ms_item-obj_name - AND ddlanguage = mv_language. - IF sy-subrc <> 0. - RAISE EXCEPTION TYPE lcx_not_found. - ENDIF. - - lv_typdname = ms_item-obj_name. - CALL FUNCTION 'TYPD_GET_OBJECT' - EXPORTING - typdname = lv_typdname - TABLES - psmodisrc = lt_psmodisrc - psmodilog = lt_psmodilog - psource = et_source - ptrdir = lt_ptrdir - EXCEPTIONS - version_not_found = 1 - reps_not_exist = 2 - OTHERS = 3. - IF sy-subrc <> 0. - _raise 'error from TYPD_GET_OBJECT'. - ENDIF. - - ENDMETHOD. "read - - METHOD lif_object~serialize. - - DATA: lv_ddtext TYPE ddtypet-ddtext, - lt_source TYPE abaptxt255_tab. - - - TRY. - read( IMPORTING - ev_ddtext = lv_ddtext - et_source = lt_source ). - CATCH lcx_not_found. - RETURN. - ENDTRY. - - io_xml->add( iv_name = 'DDTEXT' - ig_data = lv_ddtext ). - - mo_files->add_abap( lt_source ). - - ENDMETHOD. "serialize - - METHOD create. - - DATA: lv_progname TYPE reposrc-progname, - lv_typegroup TYPE rsedd0-typegroup. - - - lv_typegroup = ms_item-obj_name. - - IF lif_object~exists( ) = abap_true. - lif_object~delete( ). - ENDIF. - - CALL FUNCTION 'RS_DD_TYGR_INSERT_SOURCES' - EXPORTING - typegroupname = lv_typegroup - ddtext = iv_ddtext - corrnum = '' - devclass = iv_devclass - TABLES - source = it_source - EXCEPTIONS - already_exists = 1 - not_executed = 2 - permission_failure = 3 - object_not_specified = 4 - illegal_name = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from RS_DD_TYGR_INSERT_SOURCES'. - ENDIF. - - CONCATENATE '%_C' lv_typegroup INTO lv_progname. - UPDATE progdir SET uccheck = abap_true - WHERE name = lv_progname. - IF sy-subrc <> 0. - _raise 'error setting uccheck'. - ENDIF. - - ENDMETHOD. "create - - METHOD lif_object~deserialize. - - DATA: lv_ddtext TYPE ddtypet-ddtext, - lt_source TYPE abaptxt255_tab. - - - io_xml->read( EXPORTING iv_name = 'DDTEXT' - CHANGING cg_data = lv_ddtext ). - - lt_source = mo_files->read_abap( ). - - create( iv_ddtext = lv_ddtext - it_source = lt_source - iv_devclass = iv_package ). - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lv_objname TYPE rsedd0-ddobjname. - - - lv_objname = ms_item-obj_name. - - CALL FUNCTION 'RS_DD_DELETE_OBJ' - EXPORTING - no_ask = abap_true - objname = lv_objname - objtype = 'G' - EXCEPTIONS - not_executed = 1 - object_not_found = 2 - object_not_specified = 3 - permission_failure = 4 - dialog_needed = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error deleting TYPE'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - jump_se11( iv_radio = 'RSRD1-TYMA' - iv_field = 'RSRD1-TYMA_VAL' ). - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_type IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_para DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_para DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_para DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_para IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_para IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_paramid TYPE tpara-paramid. - - - SELECT SINGLE paramid FROM tpara INTO lv_paramid - WHERE paramid = ms_item-obj_name. "#EC CI_GENBUFF - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: ls_tpara TYPE tpara, - ls_tparat TYPE tparat. - - - SELECT SINGLE * FROM tpara INTO ls_tpara - WHERE paramid = ms_item-obj_name. "#EC CI_GENBUFF - IF sy-subrc <> 0. - RETURN. - ENDIF. - - SELECT SINGLE * FROM tparat INTO ls_tparat - WHERE paramid = ms_item-obj_name - AND sprache = mv_language. "#EC CI_GENBUFF - IF sy-subrc <> 0. - _raise 'PARA no english description'. - ENDIF. - - io_xml->add( iv_name = 'TPARA' - ig_data = ls_tpara ). - io_xml->add( iv_name = 'TPARAT' - ig_data = ls_tparat ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. -* see fm RS_PARAMETER_ADD and RS_PARAMETER_EDIT - - DATA: lv_mode TYPE c LENGTH 1, - ls_tpara TYPE tpara, - ls_tparat TYPE tparat. - - - SELECT SINGLE * FROM tpara INTO ls_tpara - WHERE paramid = ms_item-obj_name. "#EC CI_GENBUFF - IF sy-subrc = 0. - lv_mode = 'M'. - ELSE. - lv_mode = 'I'. - ENDIF. - - io_xml->read( EXPORTING iv_name = 'TPARA' - CHANGING cg_data = ls_tpara ). - io_xml->read( EXPORTING iv_name = 'TPARAT' - CHANGING cg_data = ls_tparat ). - - CALL FUNCTION 'RS_CORR_INSERT' - EXPORTING - object = ms_item-obj_name - object_class = 'PARA' - mode = lv_mode - global_lock = abap_true - devclass = iv_package - master_language = mv_language - EXCEPTIONS - cancelled = 1 - permission_failure = 2 - unknown_objectclass = 3 - OTHERS = 4. - IF sy-subrc <> 0. - _raise 'error from RS_CORR_INSERT, PARA'. - ENDIF. - - MODIFY tpara FROM ls_tpara. "#EC CI_SUBRC - ASSERT sy-subrc = 0. - - MODIFY tparat FROM ls_tparat. "#EC CI_SUBRC - ASSERT sy-subrc = 0. - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lv_paramid TYPE tpara-paramid. - - - lv_paramid = ms_item-obj_name. - CALL FUNCTION 'RS_PARAMETER_DELETE' - EXPORTING - objectname = lv_paramid - EXCEPTIONS - cancelled = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error from RS_PRAMETER_DELETE'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = 'PARA' - in_new_window = abap_true. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_para IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_splo DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_splo DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_splo DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_splo IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_splo IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~serialize. - - DATA: ls_tsp1t TYPE tsp1t, - ls_tsp1d TYPE tsp1d, - ls_tsp0p TYPE tsp0p. - - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - SELECT SINGLE * FROM tsp1t INTO ls_tsp1t - WHERE papart = ms_item-obj_name - AND spras = mv_language. "#EC CI_GENBUFF "#EC CI_SUBRC - SELECT SINGLE * FROM tsp1d INTO ls_tsp1d - WHERE papart = ms_item-obj_name. "#EC CI_SUBRC - SELECT SINGLE * FROM tsp0p INTO ls_tsp0p - WHERE pdpaper = ms_item-obj_name. "#EC CI_SUBRC - - CLEAR: ls_tsp1d-chgname1, - ls_tsp1d-chgtstmp1, - ls_tsp1d-chgsaprel1, - ls_tsp1d-chgsapsys1. - - io_xml->add( iv_name = 'TSPLT' - ig_data = ls_tsp1t ). - io_xml->add( iv_name = 'TSPLD' - ig_data = ls_tsp1d ). - io_xml->add( iv_name = 'TSP0P' - ig_data = ls_tsp0p ). - - ENDMETHOD. "lif_object~serialize - - METHOD lif_object~deserialize. - - DATA: lv_obj_name TYPE e071-obj_name, - ls_tsp1t TYPE tsp1t, - ls_tsp1d TYPE tsp1d, - ls_tsp0p TYPE tsp0p. - - - io_xml->read( EXPORTING iv_name = 'TSPLT' - CHANGING cg_data = ls_tsp1t ). - io_xml->read( EXPORTING iv_name = 'TSPLD' - CHANGING cg_data = ls_tsp1d ). - io_xml->read( EXPORTING iv_name = 'TSP0P' - CHANGING cg_data = ls_tsp0p ). - - MODIFY tsp1t FROM ls_tsp1t. "#EC CI_SUBRC - MODIFY tsp1d FROM ls_tsp1d. "#EC CI_SUBRC - MODIFY tsp0p FROM ls_tsp0p. "#EC CI_SUBRC - - lv_obj_name = ms_item-obj_name. - - CALL FUNCTION 'TR_TADIR_POPUP_ENTRY_E071' - EXPORTING - wi_e071_pgmid = 'R3TR' - wi_e071_object = ms_item-obj_type - wi_e071_obj_name = lv_obj_name - wi_tadir_devclass = iv_package. - - ENDMETHOD. "lif_object~deserialize - - METHOD lif_object~delete. - - DELETE FROM tsp1t WHERE papart = ms_item-obj_name. "#EC CI_NOFIRST "#EC CI_SUBRC - DELETE FROM tsp1d WHERE papart = ms_item-obj_name. "#EC CI_SUBRC - DELETE FROM tsp0p WHERE pdpaper = ms_item-obj_name. "#EC CI_SUBRC - - CALL FUNCTION 'TR_TADIR_INTERFACE' - EXPORTING - wi_delete_tadir_entry = abap_true - wi_tadir_pgmid = 'R3TR' - wi_tadir_object = ms_item-obj_type - wi_tadir_obj_name = ms_item-obj_name - wi_test_modus = abap_false. - - ENDMETHOD. "lif_object~delete - - METHOD lif_object~exists. - - DATA: lv_papart TYPE tsp1d-papart. - - - SELECT SINGLE papart INTO lv_papart FROM tsp1d - WHERE papart = ms_item-obj_name. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - _raise 'todo, jump, SPLO'. - ENDMETHOD. "lif_object~jump - -ENDCLASS. "lcl_object_splo IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_ssfo DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_ssfo DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_dtel DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_dtel IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_ssfo IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_formname TYPE stxfadm-formname. - - - SELECT SINGLE formname FROM stxfadm INTO lv_formname - WHERE formname = ms_item-obj_name. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - DATA: lt_bdcdata TYPE TABLE OF bdcdata. - - FIELD-SYMBOLS: LIKE LINE OF lt_bdcdata. - - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -program = 'SAPMSSFO'. - -dynpro = '0100'. - -dynbegin = abap_true. - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -fnam = 'BDC_OKCODE'. - -fval = '=DISPLAY'. - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -fnam = 'RB_SF'. - -fval = abap_true. - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -fnam = 'SSFSCREEN-FNAME'. - -fval = ms_item-obj_name. - - CALL FUNCTION 'ABAP4_CALL_TRANSACTION' - STARTING NEW TASK 'GIT' - EXPORTING - tcode = 'SMARTFORMS' - mode_val = 'E' - TABLES - using_tab = lt_bdcdata - EXCEPTIONS - system_failure = 1 - communication_failure = 2 - resource_failure = 3 - OTHERS = 4 - ##fm_subrc_ok. "#EC CI_SUBRC - - ENDMETHOD. "jump - - METHOD lif_object~delete. - - DATA: lv_formname TYPE tdsfname. - - - lv_formname = ms_item-obj_name. - - CALL FUNCTION 'FB_DELETE_FORM' - EXPORTING - i_formname = lv_formname - i_with_dialog = abap_false - i_with_confirm_dialog = abap_false - EXCEPTIONS - no_name = 1 - no_form = 2 - form_locked = 3 - no_access_permission = 4 - illegal_language = 5 - illegal_formtype = 6 - OTHERS = 7. - IF sy-subrc <> 0 AND sy-subrc <> 2. - _raise 'Error from FB_DELETE_FORM'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~serialize. -* see function module FB_DOWNLOAD_FORM - - DATA: lo_sf TYPE REF TO cl_ssf_fb_smart_form, - lv_name TYPE string, - li_node TYPE REF TO if_ixml_node, - li_element TYPE REF TO if_ixml_element, - li_iterator TYPE REF TO if_ixml_node_iterator, - li_attr TYPE REF TO if_ixml_named_node_map, - lv_formname TYPE tdsfname, - li_ixml TYPE REF TO if_ixml, - li_xml_doc TYPE REF TO if_ixml_document. - - - li_ixml = cl_ixml=>create( ). - li_xml_doc = li_ixml->create_document( ). - - CREATE OBJECT lo_sf. - lv_formname = ms_item-obj_name. " convert type - TRY. - lo_sf->load( im_formname = lv_formname - im_language = '' ). - CATCH cx_ssf_fb. -* the smartform is not present in system, or other error occured - RETURN. - ENDTRY. - - lo_sf->xml_download( EXPORTING parent = li_xml_doc - CHANGING document = li_xml_doc ). - - li_iterator = li_xml_doc->create_iterator( ). - li_node = li_iterator->get_next( ). - WHILE NOT li_node IS INITIAL. - - lv_name = li_node->get_name( ). - IF lv_name = 'DEVCLASS' - OR lv_name = 'LASTDATE' - OR lv_name = 'LASTTIME'. - li_node->set_value( '' ). - ENDIF. - IF lv_name = 'FIRSTUSER' - OR lv_name = 'LASTUSER'. - li_node->set_value( 'DUMMY' ). - ENDIF. - -* remove IDs it seems that they are not used for anything -* the IDs are "random" so it caused diff files - IF lv_name = 'NODE' OR lv_name = 'WINDOW'. - li_attr = li_node->get_attributes( ). - li_attr->remove_named_item( 'ID' ). - ENDIF. - - li_node = li_iterator->get_next( ). - ENDWHILE. - - li_element = li_xml_doc->get_root_element( ). - li_element->set_attribute( - name = 'sf' - namespace = 'xmlns' - value = 'urn:sap-com:SmartForms:2000:internal-structure' ). "#EC NOTEXT - li_element->set_attribute( - name = 'xmlns' - value = 'urn:sap-com:sdixml-ifr:2000' ). "#EC NOTEXT - - io_xml->set_raw( li_xml_doc->get_root_element( ) ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. -* see function module FB_UPLOAD_FORM - - DATA: li_node TYPE REF TO if_ixml_node, - lv_formname TYPE tdsfname, - lv_name TYPE string, - li_iterator TYPE REF TO if_ixml_node_iterator, - lo_sf TYPE REF TO cl_ssf_fb_smart_form, - lo_res TYPE REF TO cl_ssf_fb_smart_form. - - - CREATE OBJECT lo_sf. - -* set "created by" and "changed by" to current user - li_iterator = io_xml->get_raw( )->create_iterator( ). - li_node = li_iterator->get_next( ). - WHILE NOT li_node IS INITIAL. - lv_name = li_node->get_name( ). - CASE lv_name. - WHEN 'LASTDATE'. - li_node->set_value( - sy-datum(4) && '-' && sy-datum+4(2) && '-' && sy-datum+6(2) ). - WHEN 'LASTTIME'. - li_node->set_value( - sy-uzeit(2) && ':' && sy-uzeit+2(2) && ':' && sy-uzeit+4(2) ). - WHEN 'FIRSTUSER' OR 'LASTUSER'. - li_node->set_value( sy-uname && '' ). - ENDCASE. - - li_node = li_iterator->get_next( ). - ENDWHILE. - -* todo, iv_package? - lv_formname = ms_item-obj_name. - lo_sf->enqueue( suppress_corr_check = space - master_language = mv_language - mode = 'INSERT' - formname = lv_formname ). - - lo_sf->xml_upload( EXPORTING dom = io_xml->get_raw( ) - formname = lv_formname - language = mv_language - CHANGING sform = lo_res ). - - lo_res->store( im_formname = lo_res->header-formname - im_language = mv_language - im_active = abap_true ). - - lo_sf->dequeue( lv_formname ). - - ENDMETHOD. "deserialize - -ENDCLASS. "lcl_object_ssfo IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_tabl DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_tabl DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_dtel DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_tabl IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_tabl IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_tabname TYPE dd02l-tabname. - - - SELECT SINGLE tabname FROM dd02l INTO lv_tabname - WHERE tabname = ms_item-obj_name - AND as4local = 'A' - AND as4vers = '0000'. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - jump_se11( iv_radio = 'RSRD1-DDTYPE' - iv_field = 'RSRD1-DDTYPE_VAL' ). - - ENDMETHOD. "jump - - METHOD lif_object~delete. - - DATA: lv_objname TYPE rsedd0-ddobjname. - - - lv_objname = ms_item-obj_name. - - CALL FUNCTION 'RS_DD_DELETE_OBJ' - EXPORTING - no_ask = abap_false - objname = lv_objname - objtype = 'T' - EXCEPTIONS - not_executed = 1 - object_not_found = 2 - object_not_specified = 3 - permission_failure = 4. - IF sy-subrc <> 0. - _raise 'error from RS_DD_DELETE_OBJ, TABL'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~serialize. - - DATA: lv_name TYPE ddobjname, - ls_dd02v TYPE dd02v, - ls_dd09l TYPE dd09l, - lt_dd03p TYPE TABLE OF dd03p, - lt_dd05m TYPE TABLE OF dd05m, - lt_dd08v TYPE TABLE OF dd08v, - lt_dd12v TYPE dd12vtab, - lt_dd17v TYPE dd17vtab, - lt_dd35v TYPE TABLE OF dd35v, - lt_dd36m TYPE dd36mttyp. - - FIELD-SYMBOLS: LIKE LINE OF lt_dd12v, - LIKE LINE OF lt_dd03p. - - - lv_name = ms_item-obj_name. - - CALL FUNCTION 'DDIF_TABL_GET' - EXPORTING - name = lv_name - langu = mv_language - IMPORTING - dd02v_wa = ls_dd02v - dd09l_wa = ls_dd09l - TABLES - dd03p_tab = lt_dd03p - dd05m_tab = lt_dd05m - dd08v_tab = lt_dd08v - dd12v_tab = lt_dd12v - dd17v_tab = lt_dd17v - dd35v_tab = lt_dd35v - dd36m_tab = lt_dd36m - EXCEPTIONS - illegal_input = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error from DDIF_TABL_GET'. - ENDIF. - IF ls_dd02v IS INITIAL. - RETURN. " object does not exits - ENDIF. - - CLEAR: ls_dd02v-as4user, - ls_dd02v-as4date, - ls_dd02v-as4time. - - CLEAR: ls_dd09l-as4user, - ls_dd09l-as4date, - ls_dd09l-as4time. - - LOOP AT lt_dd12v ASSIGNING . - CLEAR: -as4user, - -as4date, - -as4time. - ENDLOOP. - - LOOP AT lt_dd03p ASSIGNING WHERE NOT rollname IS INITIAL. - CLEAR: -ddlanguage, - -dtelmaster, - -ddtext, - -reptext, - -scrtext_s, - -scrtext_m, - -scrtext_l. - -* XML output assumes correct field content - IF -routputlen = ' '. - CLEAR -routputlen. - ENDIF. - ENDLOOP. - - io_xml->add( iv_name = 'DD02V' - ig_data = ls_dd02v ). - io_xml->add( iv_name = 'DD09L' - ig_data = ls_dd09l ). - io_xml->add( ig_data = lt_dd03p - iv_name = 'DD03P_TABLE' ). - io_xml->add( ig_data = lt_dd05m - iv_name = 'DD05M_TABLE' ). - io_xml->add( ig_data = lt_dd08v - iv_name = 'DD08V_TABLE' ). - io_xml->add( iv_name = 'DD12V' - ig_data = lt_dd12v ). - io_xml->add( iv_name = 'DD17V' - ig_data = lt_dd17v ). - io_xml->add( ig_data = lt_dd35v - iv_name = 'DD35V_TALE' ). - io_xml->add( iv_name = 'DD36M' - ig_data = lt_dd36m ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_name TYPE ddobjname, - lv_tname TYPE trobj_name, - ls_dd02v TYPE dd02v, - ls_dd09l TYPE dd09l, - lt_dd03p TYPE TABLE OF dd03p, - lt_dd05m TYPE TABLE OF dd05m, - lt_dd08v TYPE TABLE OF dd08v, - lt_dd12v TYPE dd12vtab, - lt_dd17v TYPE dd17vtab, - ls_dd17v LIKE LINE OF lt_dd17v, - lt_secondary LIKE lt_dd17v, - lt_dd35v TYPE TABLE OF dd35v, - lt_dd36m TYPE dd36mttyp, - ls_dd12v LIKE LINE OF lt_dd12v. - - - io_xml->read( EXPORTING iv_name = 'DD02V' - CHANGING cg_data = ls_dd02v ). - io_xml->read( EXPORTING iv_name = 'DD09L' - CHANGING cg_data = ls_dd09l ). - io_xml->read( EXPORTING iv_name = 'DD03P_TABLE' - CHANGING cg_data = lt_dd03p ). - io_xml->read( EXPORTING iv_name = 'DD05M_TABLE' - CHANGING cg_data = lt_dd05m ). - io_xml->read( EXPORTING iv_name = 'DD08V_TABLE' - CHANGING cg_data = lt_dd08v ). - io_xml->read( EXPORTING iv_name = 'DD12V' - CHANGING cg_data = lt_dd12v ). - io_xml->read( EXPORTING iv_name = 'DD17V' - CHANGING cg_data = lt_dd17v ). - io_xml->read( EXPORTING iv_name = 'DD35V_TALE' - CHANGING cg_data = lt_dd35v ). - io_xml->read( EXPORTING iv_name = 'DD36M' - CHANGING cg_data = lt_dd36m ). - - corr_insert( iv_package ). - - lv_name = ms_item-obj_name. " type conversion - - CALL FUNCTION 'DDIF_TABL_PUT' - EXPORTING - name = lv_name - dd02v_wa = ls_dd02v - dd09l_wa = ls_dd09l - TABLES - dd03p_tab = lt_dd03p - dd05m_tab = lt_dd05m - dd08v_tab = lt_dd08v - dd35v_tab = lt_dd35v - dd36m_tab = lt_dd36m - EXCEPTIONS - tabl_not_found = 1 - name_inconsistent = 2 - tabl_inconsistent = 3 - put_failure = 4 - put_refused = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from DDIF_TABL_PUT'. - ENDIF. - - lcl_objects_activation=>add_item( ms_item ). - -* handle indexes - LOOP AT lt_dd12v INTO ls_dd12v. - -* todo, call corr_insert? - - CLEAR lt_secondary. - LOOP AT lt_dd17v INTO ls_dd17v - WHERE sqltab = ls_dd12v-sqltab AND indexname = ls_dd12v-indexname. - APPEND ls_dd17v TO lt_secondary. - ENDLOOP. - - CALL FUNCTION 'DDIF_INDX_PUT' - EXPORTING - name = ls_dd12v-sqltab - id = ls_dd12v-indexname - dd12v_wa = ls_dd12v - TABLES - dd17v_tab = lt_secondary - EXCEPTIONS - indx_not_found = 1 - name_inconsistent = 2 - indx_inconsistent = 3 - put_failure = 4 - put_refused = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from DDIF_INDX_PUT'. - ENDIF. - - CALL FUNCTION 'DD_DD_TO_E071' - EXPORTING - type = 'INDX' - name = ls_dd12v-sqltab - id = ls_dd12v-indexname - IMPORTING - obj_name = lv_tname. - - lcl_objects_activation=>add( iv_type = 'INDX' - iv_name = lv_tname ). - - ENDLOOP. - - ENDMETHOD. "deserialize - -ENDCLASS. "lcl_object_TABL IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_enho DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL. -* For complete list of tool_type - see ENHTOOLS table - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - METHODS deserialize_badi - IMPORTING io_xml TYPE REF TO lcl_xml_input - iv_package TYPE devclass - RAISING lcx_exception. - METHODS deserialize_hook - IMPORTING io_xml TYPE REF TO lcl_xml_input - iv_package TYPE devclass - RAISING lcx_exception. - - METHODS serialize_badi - IMPORTING io_xml TYPE REF TO lcl_xml_output - iv_tool TYPE enhtooltype - ii_enh_tool TYPE REF TO if_enh_tool - RAISING lcx_exception. - METHODS serialize_hook - IMPORTING io_xml TYPE REF TO lcl_xml_output - iv_tool TYPE enhtooltype - ii_enh_tool TYPE REF TO if_enh_tool - RAISING lcx_exception. - -ENDCLASS. "lcl_object_enho DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_enho IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_enho IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: ls_tadir TYPE tadir. - -* todo, it should look up in the ENHO database tables or call some methods -* to see if the object exists, looking in TADIR will not work - ls_tadir = lcl_tadir=>read_single( - iv_object = ms_item-obj_type - iv_obj_name = ms_item-obj_name ). - IF ls_tadir IS NOT INITIAL. - rv_bool = abap_true. - ENDIF. - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: lv_enh_id TYPE enhname, - lv_tool TYPE enhtooltype, - li_enh_tool TYPE REF TO if_enh_tool. - - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - lv_enh_id = ms_item-obj_name. - TRY. - li_enh_tool = cl_enh_factory=>get_enhancement( lv_enh_id ). - CATCH cx_enh_root. - _raise 'Error from CL_ENH_FACTORY'. - ENDTRY. - lv_tool = li_enh_tool->get_tool( ). - - CASE lv_tool. - WHEN cl_enh_tool_badi_impl=>tooltype. - serialize_badi( io_xml = io_xml - iv_tool = lv_tool - ii_enh_tool = li_enh_tool ). - WHEN cl_enh_tool_hook_impl=>tooltype. - serialize_hook( io_xml = io_xml - iv_tool = lv_tool - ii_enh_tool = li_enh_tool ). -* ToDo: -* WHEN cl_enh_tool_class=>tooltype. -* WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr -* WHEN cl_enh_tool_intf=>tooltype. -* WHEN cl_wdr_cfg_enhancement=>tooltype. -* WHEN 'ENHWDYN'. "cl_enh_tool_wdy - WHEN OTHERS. - _raise 'Unsupported ENHO type'. - ENDCASE. - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_tool TYPE enhtooltype. - - IF lif_object~exists( ) = abap_true. - lif_object~delete( ). - ENDIF. - - io_xml->read( EXPORTING iv_name = 'TOOL' - CHANGING cg_data = lv_tool ). - - CASE lv_tool. - WHEN cl_enh_tool_badi_impl=>tooltype. - deserialize_badi( io_xml = io_xml - iv_package = iv_package ). - WHEN cl_enh_tool_hook_impl=>tooltype. - deserialize_hook( io_xml = io_xml - iv_package = iv_package ). -* ToDo: -* WHEN cl_enh_tool_class=>tooltype. -* WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr -* WHEN cl_enh_tool_intf=>tooltype. -* WHEN cl_wdr_cfg_enhancement=>tooltype. -* WHEN 'ENHWDYN'. "cl_enh_tool_wdy - WHEN OTHERS. - _raise 'Unsupported ENHO type'. - ENDCASE. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - - METHOD deserialize_badi. - - DATA: lv_spot_name TYPE enhspotname, - lv_shorttext TYPE string, - lv_enhname TYPE enhname, - lo_badi TYPE REF TO cl_enh_tool_badi_impl, - li_tool TYPE REF TO if_enh_tool, - lv_package TYPE devclass, - lt_impl TYPE enh_badi_impl_data_it. - - FIELD-SYMBOLS: LIKE LINE OF lt_impl. - - - io_xml->read( EXPORTING iv_name = 'SHORTTEXT' - CHANGING cg_data = lv_shorttext ). - io_xml->read( EXPORTING iv_name = 'SPOT_NAME' - CHANGING cg_data = lv_spot_name ). - io_xml->read( EXPORTING iv_name = 'IMPL' - CHANGING cg_data = lt_impl ). - - lv_enhname = ms_item-obj_name. - lv_package = iv_package. - TRY. - cl_enh_factory=>create_enhancement( - EXPORTING - enhname = lv_enhname - enhtype = cl_abstract_enh_tool_redef=>credefinition - enhtooltype = cl_enh_tool_badi_impl=>tooltype - IMPORTING - enhancement = li_tool - CHANGING - devclass = lv_package ). - lo_badi ?= li_tool. - - lo_badi->set_spot_name( lv_spot_name ). - lo_badi->if_enh_object_docu~set_shorttext( lv_shorttext ). - LOOP AT lt_impl ASSIGNING . - lo_badi->add_implementation( ). - ENDLOOP. - lo_badi->if_enh_object~save( ). - lo_badi->if_enh_object~unlock( ). - CATCH cx_enh_root. - _raise 'error deserializing ENHO badi'. - ENDTRY. - - ENDMETHOD. "deserialize_badi - - METHOD deserialize_hook. - - DATA: lv_shorttext TYPE string, - lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl, - li_tool TYPE REF TO if_enh_tool, - lv_enhname TYPE enhname, - lv_package TYPE devclass, - ls_original_object TYPE enh_hook_admin, - lt_enhancements TYPE enh_hook_impl_it. - - FIELD-SYMBOLS: LIKE LINE OF lt_enhancements. - - - io_xml->read( EXPORTING iv_name = 'SHORTTEXT' - CHANGING cg_data = lv_shorttext ). - io_xml->read( EXPORTING iv_name = 'ORIGINAL_OBJECT' - CHANGING cg_data = ls_original_object ). - io_xml->read( EXPORTING iv_name = 'ENHANCEMENTS' - CHANGING cg_data = lt_enhancements ). - - lv_enhname = ms_item-obj_name. - lv_package = iv_package. - TRY. - cl_enh_factory=>create_enhancement( - EXPORTING - enhname = lv_enhname - enhtype = cl_abstract_enh_tool_redef=>credefinition - enhtooltype = cl_enh_tool_hook_impl=>tooltype - IMPORTING - enhancement = li_tool - CHANGING - devclass = lv_package ). - lo_hook_impl ?= li_tool. - - lo_hook_impl->if_enh_object_docu~set_shorttext( lv_shorttext ). - lo_hook_impl->set_original_object( - pgmid = ls_original_object-pgmid - obj_name = ls_original_object-org_obj_name - obj_type = ls_original_object-org_obj_type - program = ls_original_object-programname - main_type = ls_original_object-org_main_type - main_name = ls_original_object-org_main_name ). - lo_hook_impl->set_include_bound( ls_original_object-include_bound ). - - LOOP AT lt_enhancements ASSIGNING . - lo_hook_impl->add_hook_impl( - overwrite = -overwrite - method = -method - enhmode = -enhmode - full_name = -full_name - source = -source - spot = -spotname - parent_full_name = -parent_full_name ). - ENDLOOP. - lo_hook_impl->if_enh_object~save( ). - lo_hook_impl->if_enh_object~unlock( ). - CATCH cx_enh_root. - _raise 'error deserializing ENHO hook'. - ENDTRY. - - ENDMETHOD. "deserialize_hook - - METHOD serialize_badi. - - DATA: lo_badi_impl TYPE REF TO cl_enh_tool_badi_impl, - lv_spot_name TYPE enhspotname, - lv_shorttext TYPE string, - lt_impl TYPE enh_badi_impl_data_it. - - lo_badi_impl ?= ii_enh_tool. - - lv_shorttext = lo_badi_impl->if_enh_object_docu~get_shorttext( ). - lv_spot_name = lo_badi_impl->get_spot_name( ). - lt_impl = lo_badi_impl->get_implementations( ). - - io_xml->add( iv_name = 'TOOL' - ig_data = iv_tool ). - io_xml->add( ig_data = lv_shorttext - iv_name = 'SHORTTEXT' ). - io_xml->add( iv_name = 'SPOT_NAME' - ig_data = lv_spot_name ). - io_xml->add( iv_name = 'IMPL' - ig_data = lt_impl ). - - ENDMETHOD. "serialize_badi - - METHOD serialize_hook. - - DATA: lv_shorttext TYPE string, - lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl, - ls_original_object TYPE enh_hook_admin, - lt_enhancements TYPE enh_hook_impl_it. - - - lo_hook_impl ?= ii_enh_tool. - - lv_shorttext = lo_hook_impl->if_enh_object_docu~get_shorttext( ). - lo_hook_impl->get_original_object( - IMPORTING - pgmid = ls_original_object-pgmid - obj_name = ls_original_object-org_obj_name - obj_type = ls_original_object-org_obj_type - main_type = ls_original_object-org_main_type - main_name = ls_original_object-org_main_name - program = ls_original_object-programname ). - ls_original_object-include_bound = lo_hook_impl->get_include_bound( ). - lt_enhancements = lo_hook_impl->get_hook_impls( ). - - io_xml->add( iv_name = 'TOOL' - ig_data = iv_tool ). - io_xml->add( ig_data = lv_shorttext - iv_name = 'SHORTTEXT' ). - io_xml->add( ig_data = ls_original_object - iv_name = 'ORIGINAL_OBJECT' ). - io_xml->add( iv_name = 'ENHANCEMENTS' - ig_data = lt_enhancements ). - - ENDMETHOD. "serialize_hook - - METHOD lif_object~delete. - - DATA: lv_enh_id TYPE enhname, - li_enh_object TYPE REF TO if_enh_object. - - - lv_enh_id = ms_item-obj_name. - TRY. - li_enh_object = cl_enh_factory=>get_enhancement( - enhancement_id = lv_enh_id - lock = abap_true ). - li_enh_object->delete( ). - li_enh_object->save( ). - li_enh_object->unlock( ). - CATCH cx_enh_root. - _raise 'Error deleting ENHO'. - ENDTRY. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = 'ENHO' - in_new_window = abap_true. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_enho IMPLEMENTATION -*----------------------------------------------------------------------* -* CLASS lcl_object_enhs DEFINITION -*----------------------------------------------------------------------* -CLASS lcl_object_enhs DEFINITION INHERITING FROM lcl_objects_super FINAL. - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_enhs - -*----------------------------------------------------------------------* -* CLASS lcl_object_enhs IMPLEMENTATION -*----------------------------------------------------------------------* -CLASS lcl_object_enhs IMPLEMENTATION. - - METHOD lif_object~deserialize. - DATA: lv_message TYPE string, - lv_parent TYPE enhspotcompositename, - lv_spot_name TYPE enhspotname, - lv_enh_shtext TYPE string, - ls_enh_badi TYPE enh_badi_data, - lt_enh_badi TYPE enh_badi_data_it, - lx_root TYPE REF TO cx_root, - lv_package LIKE iv_package, - li_spot_ref TYPE REF TO if_enh_spot_tool, - lo_badidef_tool TYPE REF TO cl_enh_tool_badi_def. - - - lv_spot_name = ms_item-obj_name. - - io_xml->read( EXPORTING iv_name = 'PARENT_COMP' - CHANGING cg_data = lv_parent ). - io_xml->read( EXPORTING iv_name = 'SHORTTEXT' - CHANGING cg_data = lv_enh_shtext ). - io_xml->read( EXPORTING iv_name = 'BADI_DATA' - CHANGING cg_data = lt_enh_badi ). - - IF lif_object~exists( ) = abap_true. - lif_object~delete( ). - ENDIF. - - lv_package = iv_package. - - TRY. - cl_enh_factory=>create_enhancement_spot( - EXPORTING - spot_name = lv_spot_name - tooltype = cl_enh_tool_badi_def=>tooltype - dark = abap_true - compositename = lv_parent - IMPORTING - spot = li_spot_ref - CHANGING - devclass = lv_package ). - - lo_badidef_tool ?= li_spot_ref. - - lo_badidef_tool->if_enh_object_docu~set_shorttext( lv_enh_shtext ). - - LOOP AT lt_enh_badi INTO ls_enh_badi. - lo_badidef_tool->add_badi_def( ls_enh_badi ). - ENDLOOP. - - lo_badidef_tool->if_enh_object~save( ). - lo_badidef_tool->if_enh_object~activate( ). - lo_badidef_tool->if_enh_object~unlock( ). - - CATCH cx_enh_root INTO lx_root. - lv_message = `Error occured while deserializing EHNS: ` - && lx_root->get_text( ) ##NO_TEXT. - _raise lv_message. - ENDTRY. - - ENDMETHOD. "deserialize - - METHOD lif_object~serialize. - DATA: lv_message TYPE string, - lv_spot_name TYPE enhspotname, - lv_enh_shtext TYPE string, - lv_parent TYPE enhspotcompositename, - lt_enh_badi TYPE enh_badi_data_it, - lx_root TYPE REF TO cx_root, - li_spot_ref TYPE REF TO if_enh_spot_tool, - lo_badidef_tool TYPE REF TO cl_enh_tool_badi_def. - - lv_spot_name = ms_item-obj_name. - - TRY. - li_spot_ref = cl_enh_factory=>get_enhancement_spot( lv_spot_name ). - - lo_badidef_tool ?= li_spot_ref. - - lv_enh_shtext = lo_badidef_tool->if_enh_object_docu~get_shorttext( ). - - "get parent = composite enhs (ENHC) - lv_parent = cl_r3standard_persistence=>enh_find_parent_composite( lv_spot_name ). - "get subsequent BADI definitions - lt_enh_badi = lo_badidef_tool->get_badi_defs( ). - - io_xml->add( ig_data = lv_parent - iv_name = 'PARENT_COMP' ). - io_xml->add( ig_data = lv_enh_shtext - iv_name = 'SHORTTEXT' ). - io_xml->add( ig_data = lt_enh_badi - iv_name = 'BADI_DATA' ). - - CATCH cx_enh_root INTO lx_root. - lv_message = `Error occured while serializing EHNS: ` - && lx_root->get_text( ) ##NO_TEXT. - _raise lv_message. - ENDTRY. - - ENDMETHOD. "serialize - - METHOD lif_object~exists. - - DATA: lv_spot_name TYPE enhspotname, - li_spot_ref TYPE REF TO if_enh_spot_tool. - - - lv_spot_name = ms_item-obj_name. - - TRY. - li_spot_ref = cl_enh_factory=>get_enhancement_spot( lv_spot_name ). - -* Check that is is realy a BAdI - IF li_spot_ref->get_tool( ) = cl_enh_tool_badi_def=>tooltype. - rv_bool = abap_true. - ELSE. - rv_bool = abap_false. - ENDIF. - CATCH cx_enh_root. - rv_bool = abap_false. - ENDTRY. - - ENDMETHOD. "exists - - METHOD lif_object~delete. - DATA: lv_spot_name TYPE enhspotname, - lv_message TYPE string, - lx_root TYPE REF TO cx_root, - li_spot_ref TYPE REF TO if_enh_spot_tool, - lo_badidef_tool TYPE REF TO cl_enh_tool_badi_def. - - lv_spot_name = ms_item-obj_name. - - TRY. - li_spot_ref = cl_enh_factory=>get_enhancement_spot( - spot_name = lv_spot_name - lock = 'X' ). - - IF li_spot_ref IS BOUND. - lo_badidef_tool ?= li_spot_ref. - lo_badidef_tool->if_enh_object~delete( - nevertheless_delete = 'X' - run_dark = 'X' ). - ENDIF. - lo_badidef_tool->if_enh_object~unlock( ). - CATCH cx_enh_root INTO lx_root. - lv_message = `Error occured while deleting EHNS: ` - && lx_root->get_text( ) ##NO_TEXT. - _raise lv_message. - ENDTRY. - - ENDMETHOD. "delete - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "get_metadata - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = 'ENHS' - in_new_window = abap_true. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_ensc - -CLASS lcl_object_ensc DEFINITION INHERITING FROM lcl_objects_super FINAL. - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_ensc - -*----------------------------------------------------------------------* -* CLASS lcl_object_ensc IMPLEMENTATION -*----------------------------------------------------------------------* -CLASS lcl_object_ensc IMPLEMENTATION. - - METHOD lif_object~deserialize. - - DATA: lv_spot_name TYPE enhspotcompositename, - lv_message TYPE string, - lv_enh_shtext TYPE string, - lv_enh_spot TYPE enhspotname, - lt_enh_spots TYPE enhspotname_it, - lt_comp_spots TYPE enhspotname_it, - lx_root TYPE REF TO cx_root, - lv_package LIKE iv_package, - li_spot_ref TYPE REF TO if_enh_spot_composite, - lo_spot_ref TYPE REF TO cl_enh_spot_composite. - - - lv_spot_name = ms_item-obj_name. - - io_xml->read( EXPORTING iv_name = 'SHORTTEXT' - CHANGING cg_data = lv_enh_shtext ). - io_xml->read( EXPORTING iv_name = 'ENH_SPOTS' "Enhancement spots - CHANGING cg_data = lt_enh_spots ). - io_xml->read( EXPORTING iv_name = 'COMP_ENH_SPOTS' "Composite enhancement spots - CHANGING cg_data = lt_comp_spots ). - - IF lif_object~exists( ) = abap_true. - lif_object~delete( ). - ENDIF. - - lv_package = iv_package. - - TRY. - cl_enh_factory=>create_enhancement_spot_comp( - EXPORTING - name = lv_spot_name - run_dark = abap_true - IMPORTING - composite = li_spot_ref - CHANGING - devclass = lv_package ). - - lo_spot_ref ?= li_spot_ref. - - lo_spot_ref->if_enh_object_docu~set_shorttext( lv_enh_shtext ). - "Add subsequent enhancement spots - LOOP AT lt_enh_spots INTO lv_enh_spot. - lo_spot_ref->if_enh_spot_composite~add_enh_spot_child( lv_enh_spot ). - ENDLOOP. - "Add subsequent composite enhancement spots - LOOP AT lt_comp_spots INTO lv_enh_spot. - lo_spot_ref->if_enh_spot_composite~add_composite_child( lv_enh_spot ). - ENDLOOP. - - lo_spot_ref->if_enh_object~save( ). - lo_spot_ref->if_enh_object~activate( ). - lo_spot_ref->if_enh_object~unlock( ). - - CATCH cx_enh_root INTO lx_root. - lv_message = `Error occured while deserializing ENSC: ` - && lx_root->get_text( ) ##NO_TEXT. - _raise lv_message. - ENDTRY. - - ENDMETHOD. "deserialize - - METHOD lif_object~serialize. - - DATA: lv_spot_name TYPE enhspotcompositename, - lv_message TYPE string, - lv_enh_shtext TYPE string, - lv_parent TYPE enhspotcompositename, - lt_enh_spots TYPE enhspotname_it, - lt_comp_spots TYPE enhspotname_it, - lx_root TYPE REF TO cx_root, - li_spot_ref TYPE REF TO if_enh_spot_composite, - lo_spot_ref TYPE REF TO cl_enh_spot_composite. - - - lv_spot_name = ms_item-obj_name. - - TRY. - li_spot_ref = cl_enh_factory=>get_enhancement_spot_comp( - lock = '' - name = lv_spot_name ). - - lo_spot_ref ?= li_spot_ref. - - lv_enh_shtext = li_spot_ref->if_enh_object_docu~get_shorttext( ). - "find parent = composite enhancement (ENSC) - lv_parent = cl_r3standard_persistence=>enh_find_parent_composite( lv_spot_name ). - "find subsequent enhancement spots - lt_enh_spots = lo_spot_ref->if_enh_spot_composite~get_enh_spot_childs( ). - "find subsequent composite enhancement spots - lt_comp_spots = lo_spot_ref->if_enh_spot_composite~get_composite_childs( ). - - io_xml->add( ig_data = lv_enh_shtext - iv_name = 'SHORTTEXT' ). - io_xml->add( ig_data = lt_enh_spots - iv_name = 'ENH_SPOTS' ). "Enhancement spots - io_xml->add( ig_data = lt_comp_spots - iv_name = 'COMP_ENH_SPOTS' ). "Composite enhancement spots - - CATCH cx_enh_root INTO lx_root. - lv_message = `Error occured while serializing ENSC: ` - && lx_root->get_text( ) ##NO_TEXT. - _raise lv_message. - ENDTRY. - - ENDMETHOD. "serialize - - METHOD lif_object~exists. - - DATA: lv_spot_name TYPE enhspotcompositename, - li_spot_ref TYPE REF TO if_enh_spot_composite. - - - lv_spot_name = ms_item-obj_name. - - TRY. - li_spot_ref = cl_enh_factory=>get_enhancement_spot_comp( - lock = '' - name = lv_spot_name ). - rv_bool = abap_true. - CATCH cx_enh_root. - rv_bool = abap_false. - ENDTRY. - - ENDMETHOD. "exists - - METHOD lif_object~delete. - DATA: lv_spot_name TYPE enhspotcompositename, - lv_message TYPE string, - lx_root TYPE REF TO cx_root, - li_spot_ref TYPE REF TO if_enh_spot_composite. - - lv_spot_name = ms_item-obj_name. - - TRY. - li_spot_ref = cl_enh_factory=>get_enhancement_spot_comp( - lock = 'X' - name = lv_spot_name ). - - IF li_spot_ref IS BOUND. - li_spot_ref->if_enh_object~delete( - nevertheless_delete = 'X' - run_dark = 'X' ). - ENDIF. - li_spot_ref->if_enh_object~unlock( ). - CATCH cx_enh_root INTO lx_root. - lv_message = `Error occured while deleting ENSC: ` - && lx_root->get_text( ) ##NO_TEXT. - _raise lv_message. - ENDTRY. - - ENDMETHOD. "delete - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "get_metadata - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = 'ENSC' - in_new_window = abap_true. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_ensc - -*----------------------------------------------------------------------* -* CLASS lcl_object_enqu DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_enqu DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_dtel DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_dtel IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_enqu IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_viewname TYPE dd25l-viewname. - - - SELECT SINGLE viewname FROM dd25l INTO lv_viewname - WHERE viewname = ms_item-obj_name - AND as4local = 'A' - AND as4vers = '0000'. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - jump_se11( iv_radio = 'RSRD1-ENQU' - iv_field = 'RSRD1-ENQU_VAL' ). - - ENDMETHOD. "jump - - METHOD lif_object~delete. - - DATA: lv_objname TYPE rsedd0-ddobjname. - - - lv_objname = ms_item-obj_name. - - CALL FUNCTION 'RS_DD_DELETE_OBJ' - EXPORTING - no_ask = abap_true - objname = lv_objname - objtype = 'L' - EXCEPTIONS - not_executed = 1 - object_not_found = 2 - object_not_specified = 3 - permission_failure = 4. - IF sy-subrc <> 0. - _raise 'error from RS_DD_DELETE_OBJ, ENQU'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~serialize. - - DATA: lv_name TYPE ddobjname, - ls_dd25v TYPE dd25v, - lt_dd26e TYPE TABLE OF dd26e, - lt_dd27p TYPE TABLE OF dd27p. - - - lv_name = ms_item-obj_name. - - CALL FUNCTION 'DDIF_ENQU_GET' - EXPORTING - name = lv_name - state = 'A' - langu = mv_language - IMPORTING - dd25v_wa = ls_dd25v - TABLES - dd26e_tab = lt_dd26e - dd27p_tab = lt_dd27p - EXCEPTIONS - illegal_input = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error from DDIF_ENQU_GET'. - ENDIF. - IF ls_dd25v IS INITIAL. - RETURN. " does not exist in system - ENDIF. - - CLEAR: ls_dd25v-as4user, - ls_dd25v-as4date, - ls_dd25v-as4time. - - io_xml->add( iv_name = 'DD25V' - ig_data = ls_dd25v ). - io_xml->add( ig_data = lt_dd26e - iv_name = 'DD26E_TABLE' ). - io_xml->add( ig_data = lt_dd27p - iv_name = 'DD27P_TABLE' ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_name TYPE ddobjname, - ls_dd25v TYPE dd25v, - lt_dd26e TYPE TABLE OF dd26e, - lt_dd27p TYPE TABLE OF dd27p. - - - io_xml->read( EXPORTING iv_name = 'DD25V' - CHANGING cg_data = ls_dd25v ). - io_xml->read( EXPORTING iv_name = 'DD26E_TABLE' - CHANGING cg_data = lt_dd26e ). - io_xml->read( EXPORTING iv_name = 'DD27P_TABLE' - CHANGING cg_data = lt_dd27p ). - - corr_insert( iv_package ). - - lv_name = ms_item-obj_name. - - CALL FUNCTION 'DDIF_ENQU_PUT' - EXPORTING - name = lv_name - dd25v_wa = ls_dd25v - TABLES - dd26e_tab = lt_dd26e - dd27p_tab = lt_dd27p - EXCEPTIONS - enqu_not_found = 1 - name_inconsistent = 2 - enqu_inconsistent = 3 - put_failure = 4 - put_refused = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from DDIF_ENQU_PUT'. - ENDIF. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - -ENDCLASS. "lcl_object_enqu IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_shlp DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_shlp DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_dtel DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_dtel IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_shlp IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_shlpname TYPE dd30l-shlpname. - - - SELECT SINGLE shlpname FROM dd30l INTO lv_shlpname - WHERE shlpname = ms_item-obj_name - AND as4local = 'A'. "#EC CI_GENBUFF - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - jump_se11( iv_radio = 'RSRD1-SHMA' - iv_field = 'RSRD1-SHMA_VAL' ). - - ENDMETHOD. "jump - - METHOD lif_object~delete. - - DATA: lv_objname TYPE rsedd0-ddobjname. - - - lv_objname = ms_item-obj_name. - - CALL FUNCTION 'RS_DD_DELETE_OBJ' - EXPORTING - no_ask = abap_true - objname = lv_objname - objtype = 'H' - EXCEPTIONS - not_executed = 1 - object_not_found = 2 - object_not_specified = 3 - permission_failure = 4. - IF sy-subrc <> 0. - _raise 'error from RS_DD_DELETE_OBJ, SHLP'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~serialize. - - DATA: lv_name TYPE ddobjname, - ls_dd30v TYPE dd30v, - lt_dd31v TYPE TABLE OF dd31v, - lt_dd32p TYPE TABLE OF dd32p, - lt_dd33v TYPE TABLE OF dd33v. - - - lv_name = ms_item-obj_name. - - CALL FUNCTION 'DDIF_SHLP_GET' - EXPORTING - name = lv_name - state = 'A' - langu = mv_language - IMPORTING - dd30v_wa = ls_dd30v - TABLES - dd31v_tab = lt_dd31v - dd32p_tab = lt_dd32p - dd33v_tab = lt_dd33v - EXCEPTIONS - illegal_input = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error from DDIF_SHLP_GET'. - ENDIF. - IF ls_dd30v IS INITIAL. - RETURN. " does not exist in system - ENDIF. - - CLEAR: ls_dd30v-as4user, - ls_dd30v-as4date, - ls_dd30v-as4time. - - io_xml->add( iv_name = 'DD30V' - ig_data = ls_dd30v ). - io_xml->add( ig_data = lt_dd31v - iv_name = 'DD31V_TABLE' ). - io_xml->add( ig_data = lt_dd32p - iv_name = 'DD32P_TABLE' ). - io_xml->add( ig_data = lt_dd33v - iv_name = 'DD33V_TABLE' ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_name TYPE ddobjname, - ls_dd30v TYPE dd30v, - lt_dd31v TYPE TABLE OF dd31v, - lt_dd32p TYPE TABLE OF dd32p, - lt_dd33v TYPE TABLE OF dd33v. - - - io_xml->read( EXPORTING iv_name = 'DD30V' - CHANGING cg_data = ls_dd30v ). - io_xml->read( EXPORTING iv_name = 'DD31V_TABLE' - CHANGING cg_data = lt_dd31v ). - io_xml->read( EXPORTING iv_name = 'DD32P_TABLE' - CHANGING cg_data = lt_dd32p ). - io_xml->read( EXPORTING iv_name = 'DD33V_TABLE' - CHANGING cg_data = lt_dd33v ). - - corr_insert( iv_package ). - - lv_name = ms_item-obj_name. - - CALL FUNCTION 'DDIF_SHLP_PUT' - EXPORTING - name = lv_name - dd30v_wa = ls_dd30v - TABLES - dd31v_tab = lt_dd31v - dd32p_tab = lt_dd32p - dd33v_tab = lt_dd33v - EXCEPTIONS - shlp_not_found = 1 - name_inconsistent = 2 - shlp_inconsistent = 3 - put_failure = 4 - put_refused = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from DDIF_SHLP_PUT'. - ENDIF. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - -ENDCLASS. "lcl_object_shlp IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_tran DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_tran DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - PRIVATE SECTION. - - CONSTANTS: c_oo_program(9) VALUE '\PROGRAM=', - c_oo_class(7) VALUE '\CLASS=', - c_oo_method(8) VALUE '\METHOD=', - c_oo_tcode TYPE tcode VALUE 'OS_APPLICATION', - c_oo_frclass(30) VALUE 'CLASS', - c_oo_frmethod(30) VALUE 'METHOD', - c_oo_frupdtask(30) VALUE 'UPDATE_MODE', - c_oo_synchron VALUE 'S', - c_oo_asynchron VALUE 'U', - c_true TYPE c VALUE 'X', - c_false TYPE c VALUE space. - - METHODS: - split_parameters - CHANGING ct_rsparam TYPE s_param - cs_rsstcd TYPE rsstcd - cs_tstcp TYPE tstcp - cs_tstc TYPE tstc, - split_parameters_comp - IMPORTING iv_type TYPE any - iv_param TYPE any - CHANGING cg_value TYPE any. - -ENDCLASS. "lcl_object_TRAN DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_msag IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_tran IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD split_parameters_comp. - DATA: lv_off TYPE i. - - IF iv_param CS iv_type. - lv_off = sy-fdpos + strlen( iv_type ). - cg_value = iv_param+lv_off. - IF cg_value CA '\'. - CLEAR cg_value+sy-fdpos. - ENDIF. - ENDIF. - ENDMETHOD. "split_parameters_comp - - METHOD split_parameters. -* see subroutine split_parameters in include LSEUKF01 - - DATA: lv_off TYPE i, - lv_param_beg TYPE i, - lv_length TYPE i, - ls_param LIKE LINE OF ct_rsparam. - - FIELD-SYMBOLS TYPE any. - - - CLEAR cs_rsstcd-s_vari. - - IF cs_tstcp-param(1) = '\'. " OO-Transaktion ohne FR - split_parameters_comp( EXPORTING iv_type = c_oo_program - iv_param = cs_tstcp-param - CHANGING cg_value = cs_tstc-pgmna ). - split_parameters_comp( EXPORTING iv_type = c_oo_class - iv_param = cs_tstcp-param - CHANGING cg_value = cs_rsstcd-classname ). - split_parameters_comp( EXPORTING iv_type = c_oo_method - iv_param = cs_tstcp-param - CHANGING cg_value = cs_rsstcd-method ). - - IF NOT cs_tstc-pgmna IS INITIAL. - cs_rsstcd-s_local = c_true. - ENDIF. - RETURN. - ELSEIF cs_tstcp-param(1) = '@'. " Transaktionsvariante - cs_rsstcd-s_vari = c_true. - IF cs_tstcp-param(2) = '@@'. - cs_rsstcd-s_ind_vari = c_true. - lv_off = 2. - ELSE. - CLEAR cs_rsstcd-s_ind_vari. - lv_off = 1. - ENDIF. - sy-fdpos = sy-fdpos - lv_off. - IF sy-fdpos > 0. - cs_rsstcd-call_tcode = cs_tstcp-param+lv_off(sy-fdpos). - sy-fdpos = sy-fdpos + 1 + lv_off. - cs_rsstcd-variant = cs_tstcp-param+sy-fdpos. - ENDIF. - ELSEIF cs_tstcp-param(1) = '/'. - cs_rsstcd-st_tcode = c_true. - cs_rsstcd-st_prog = space. - IF cs_tstcp-param+1(1) = '*'. - cs_rsstcd-st_skip_1 = c_true. - ELSE. - CLEAR cs_rsstcd-st_skip_1. - ENDIF. - lv_param_beg = sy-fdpos + 1. - sy-fdpos = sy-fdpos - 2. - IF sy-fdpos > 0. - cs_rsstcd-call_tcode = cs_tstcp-param+2(sy-fdpos). - ENDIF. - SHIFT cs_tstcp-param BY lv_param_beg PLACES. - ELSE. - cs_rsstcd-st_tcode = space. - cs_rsstcd-st_prog = c_true. - ENDIF. - - DO 254 TIMES. - IF cs_tstcp-param = space. - EXIT. - ENDIF. - CLEAR ls_param. - IF cs_tstcp-param CA '='. - CHECK sy-fdpos <> 0. - ASSIGN cs_tstcp-param(sy-fdpos) TO . - ls_param-field = . - IF ls_param-field(1) = space. - SHIFT ls_param-field. - ENDIF. - sy-fdpos = sy-fdpos + 1. - SHIFT cs_tstcp-param BY sy-fdpos PLACES. - IF cs_tstcp-param CA ';'. - IF sy-fdpos <> 0. - ASSIGN cs_tstcp-param(sy-fdpos) TO . - ls_param-value = . - IF ls_param-value(1) = space. - SHIFT ls_param-value. - ENDIF. - ENDIF. - sy-fdpos = sy-fdpos + 1. - SHIFT cs_tstcp-param BY sy-fdpos PLACES. - APPEND ls_param TO ct_rsparam. - ELSE. - lv_length = strlen( cs_tstcp-param ). - CHECK lv_length > 0. - ASSIGN cs_tstcp-param(lv_length) TO . - ls_param-value = . - IF ls_param-value(1) = space. - SHIFT ls_param-value. - ENDIF. - lv_length = lv_length + 1. - SHIFT cs_tstcp-param BY lv_length PLACES. - APPEND ls_param TO ct_rsparam. - ENDIF. - ENDIF. - ENDDO. -* oo-Transaktion mit Framework - IF cs_rsstcd-call_tcode = c_oo_tcode. - cs_rsstcd-s_trframe = c_true. - LOOP AT ct_rsparam INTO ls_param. - CASE ls_param-field. - WHEN c_oo_frclass. - cs_rsstcd-classname = ls_param-value. - WHEN c_oo_frmethod. - cs_rsstcd-method = ls_param-value. - WHEN c_oo_frupdtask. - IF ls_param-value = c_oo_synchron. - cs_rsstcd-s_upddir = c_true. - cs_rsstcd-s_updtask = c_false. - cs_rsstcd-s_updlok = c_false. - ELSEIF ls_param-value = c_oo_asynchron. - cs_rsstcd-s_upddir = c_false. - cs_rsstcd-s_updtask = c_true. - cs_rsstcd-s_updlok = c_false. - ELSE. - cs_rsstcd-s_upddir = c_false. - cs_rsstcd-s_updtask = c_false. - cs_rsstcd-s_updlok = c_true. - ENDIF. - ENDCASE. - ENDLOOP. - ENDIF. - ENDMETHOD. "split_parameters - - METHOD lif_object~exists. - - DATA: lv_tcode TYPE tstc-tcode. - - - SELECT SINGLE tcode FROM tstc INTO lv_tcode - WHERE tcode = ms_item-obj_name. "#EC CI_GENBUFF - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - DATA: lt_bdcdata TYPE TABLE OF bdcdata. - - FIELD-SYMBOLS: LIKE LINE OF lt_bdcdata. - - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -program = 'SAPLSEUK'. - -dynpro = '0390'. - -dynbegin = abap_true. - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -fnam = 'BDC_OKCODE'. - -fval = '=SHOW'. - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -fnam = 'TSTC-TCODE'. - -fval = ms_item-obj_name. - - CALL FUNCTION 'ABAP4_CALL_TRANSACTION' - STARTING NEW TASK 'GIT' - EXPORTING - tcode = 'SE93' - mode_val = 'E' - TABLES - using_tab = lt_bdcdata - EXCEPTIONS - system_failure = 1 - communication_failure = 2 - resource_failure = 3 - OTHERS = 4 - ##fm_subrc_ok - . "#EC CI_SUBRC - - ENDMETHOD. "jump - - METHOD lif_object~delete. - - DATA: lv_transaction TYPE tstc-tcode. - - - lv_transaction = ms_item-obj_name. - - CALL FUNCTION 'RPY_TRANSACTION_DELETE' - EXPORTING - transaction = lv_transaction - EXCEPTIONS - not_excecuted = 1 - object_not_found = 2 - OTHERS = 3. - IF sy-subrc <> 0. - _raise 'Error from RPY_TRANSACTION_DELETE'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~deserialize. - - CONSTANTS: lc_hex_tra TYPE x VALUE '00', -* c_hex_men TYPE x VALUE '01', - lc_hex_par TYPE x VALUE '02', - lc_hex_rep TYPE x VALUE '80'. -* c_hex_rpv TYPE x VALUE '10', -* c_hex_obj TYPE x VALUE '08', -* c_hex_chk TYPE x VALUE '04', -* c_hex_enq TYPE x VALUE '20'. - - DATA: lv_dynpro TYPE d020s-dnum, - ls_tstc TYPE tstc, - lv_type TYPE rglif-docutype, - ls_tstct TYPE tstct, - ls_tstcc TYPE tstcc, - ls_tstcp TYPE tstcp, - lt_param_values TYPE TABLE OF rsparam, - ls_rsstcd TYPE rsstcd. - - io_xml->read( EXPORTING iv_name = 'TSTC' - CHANGING cg_data = ls_tstc ). - io_xml->read( EXPORTING iv_name = 'TSTCC' - CHANGING cg_data = ls_tstcc ). - io_xml->read( EXPORTING iv_name = 'TSTCT' - CHANGING cg_data = ls_tstct ). - io_xml->read( EXPORTING iv_name = 'TSTCP' - CHANGING cg_data = ls_tstcp ). - - lv_dynpro = ls_tstc-dypno. - - CASE ls_tstc-cinfo. - WHEN lc_hex_tra. - lv_type = ststc_c_type_dialog. - WHEN lc_hex_rep. - lv_type = ststc_c_type_report. - WHEN lc_hex_par. - lv_type = ststc_c_type_parameters. -* todo, or ststc_c_type_variant? - WHEN OTHERS. - _raise 'Transaction, unknown CINFO'. - ENDCASE. - - IF ls_tstcp IS NOT INITIAL. - split_parameters( - CHANGING - ct_rsparam = lt_param_values - cs_rsstcd = ls_rsstcd - cs_tstcp = ls_tstcp - cs_tstc = ls_tstc ). - ENDIF. - - CALL FUNCTION 'RPY_TRANSACTION_INSERT' - EXPORTING - transaction = ls_tstc-tcode - program = ls_tstc-pgmna - dynpro = lv_dynpro - language = mv_language - development_class = iv_package - transaction_type = lv_type - shorttext = ls_tstct-ttext - called_transaction = ls_rsstcd-call_tcode - called_transaction_skip = ls_rsstcd-st_skip_1 - variant = ls_rsstcd-variant - cl_independend = ls_rsstcd-s_ind_vari - html_enabled = ls_tstcc-s_webgui - java_enabled = ls_tstcc-s_platin - wingui_enabled = ls_tstcc-s_win32 - TABLES - param_values = lt_param_values - EXCEPTIONS - cancelled = 1 - already_exist = 2 - permission_error = 3 - name_not_allowed = 4 - name_conflict = 5 - illegal_type = 6 - object_inconsistent = 7 - db_access_error = 8 - OTHERS = 9. - IF sy-subrc <> 0. - _raise 'Error from RPY_TRANSACTION_INSERT'. - ENDIF. - - ENDMETHOD. "deserialize - - METHOD lif_object~serialize. - - DATA: lv_transaction TYPE tstc-tcode, - lt_tcodes TYPE TABLE OF tstc, - ls_tcode LIKE LINE OF lt_tcodes, - ls_tstct TYPE tstct, - ls_tstcp TYPE tstcp, - lt_gui_attr TYPE TABLE OF tstcc, - ls_gui_attr LIKE LINE OF lt_gui_attr. - - - lv_transaction = ms_item-obj_name. - - CALL FUNCTION 'RPY_TRANSACTION_READ' - EXPORTING - transaction = lv_transaction - TABLES - tcodes = lt_tcodes - gui_attributes = lt_gui_attr - EXCEPTIONS - permission_error = 1 - cancelled = 2 - not_found = 3 - object_not_found = 4 - OTHERS = 5. - IF sy-subrc = 4 OR sy-subrc = 3. - RETURN. - ELSEIF sy-subrc <> 0. - _raise 'Error from RPY_TRANSACTION_READ'. - ENDIF. - - SELECT SINGLE * FROM tstct INTO ls_tstct - WHERE sprsl = mv_language - AND tcode = lv_transaction. "#EC CI_GENBUFF - IF sy-subrc <> 0. - _raise 'Transaction description not found'. - ENDIF. - - SELECT SINGLE * FROM tstcp INTO ls_tstcp - WHERE tcode = lv_transaction. "#EC CI_SUBRC "#EC CI_GENBUFF - - READ TABLE lt_tcodes INDEX 1 INTO ls_tcode. - ASSERT sy-subrc = 0. - READ TABLE lt_gui_attr INDEX 1 INTO ls_gui_attr. - ASSERT sy-subrc = 0. - - io_xml->add( iv_name = 'TSTC' - ig_data = ls_tcode ). - io_xml->add( iv_name = 'TSTCC' - ig_data = ls_gui_attr ). - io_xml->add( iv_name = 'TSTCT' - ig_data = ls_tstct ). - IF ls_tstcp IS NOT INITIAL. - io_xml->add( iv_name = 'TSTCP' - ig_data = ls_tstcp ). - ENDIF. - - ENDMETHOD. "serialize - -ENDCLASS. "lcl_object_tran IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_tobj DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_tobj DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_tobj DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_tobj IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_tobj IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - rs_metadata-late_deser = abap_true. - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_objectname TYPE objh-objectname, - lv_type_pos TYPE i. - - lv_type_pos = strlen( ms_item-obj_name ) - 1. - - SELECT SINGLE objectname FROM objh INTO lv_objectname - WHERE objectname = ms_item-obj_name(lv_type_pos) - AND objecttype = ms_item-obj_name+lv_type_pos. "#EC CI_GENBUFF - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: ls_objh TYPE objh, - ls_objt TYPE objt, - lt_objs TYPE tt_objs, - lt_objsl TYPE tt_objsl, - lt_objm TYPE tt_objm, - lv_type_pos TYPE i. - - lv_type_pos = strlen( ms_item-obj_name ) - 1. - - ls_objh-objectname = ms_item-obj_name(lv_type_pos). - ls_objh-objecttype = ms_item-obj_name+lv_type_pos. - - CALL FUNCTION 'CTO_OBJECT_GET' - EXPORTING - iv_objectname = ls_objh-objectname - iv_objecttype = ls_objh-objecttype - iv_language = mv_language - iv_sel_objt = abap_true - iv_sel_objs = abap_true - iv_sel_objsl = abap_true - iv_sel_objm = abap_true - IMPORTING - es_objh = ls_objh - es_objt = ls_objt - TABLES - tt_objs = lt_objs - tt_objsl = lt_objsl - tt_objm = lt_objm - EXCEPTIONS - object_not_defined = 1 - OTHERS = 2. - IF sy-subrc = 1. - RETURN. - ELSEIF sy-subrc <> 0. - _raise 'error from CTO_OBJECT_GET'. - ENDIF. - - CLEAR: ls_objh-luser, - ls_objh-ldate. - - io_xml->add( iv_name = 'OBJH' - ig_data = ls_objh ). - io_xml->add( iv_name = 'OBJT' - ig_data = ls_objt ). - io_xml->add( iv_name = 'OBJS' - ig_data = lt_objs ). - io_xml->add( iv_name = 'OBJSL' - ig_data = lt_objsl ). - io_xml->add( iv_name = 'OBJM' - ig_data = lt_objm ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: ls_objh TYPE objh, - ls_objt TYPE objt, - lt_objs TYPE tt_objs, - lt_objsl TYPE tt_objsl, - lt_objm TYPE tt_objm. - - - io_xml->read( EXPORTING iv_name = 'OBJH' - CHANGING cg_data = ls_objh ). - io_xml->read( EXPORTING iv_name = 'OBJT' - CHANGING cg_data = ls_objt ). - io_xml->read( EXPORTING iv_name = 'OBJS' - CHANGING cg_data = lt_objs ). - io_xml->read( EXPORTING iv_name = 'OBJSL' - CHANGING cg_data = lt_objsl ). - io_xml->read( EXPORTING iv_name = 'OBJM' - CHANGING cg_data = lt_objm ). - - CALL FUNCTION 'OBJ_GENERATE' - EXPORTING - iv_objectname = ls_objh-objectname - iv_objecttype = ls_objh-objecttype - iv_maint_mode = 'I' - iv_objecttext = ls_objt-ddtext - iv_objcateg = ls_objh-objcateg - iv_objtransp = ls_objh-objtransp - iv_devclass = iv_package - TABLES - tt_v_obj_s = lt_objs - tt_objm = lt_objm - EXCEPTIONS - illegal_call = 1 - object_not_found = 2 - generate_error = 3 - transport_error = 4 - object_enqueue_failed = 5 - OTHERS = 6. - IF sy-subrc <> 0. -* TOBJ has to be saved/generated after the DDIC tables have been -* activated - fixed with late deserialization - _raise 'error from OBJ_GENERATE'. - ENDIF. - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: ls_objh TYPE objh, - lv_type_pos TYPE i. - - lv_type_pos = strlen( ms_item-obj_name ) - 1. - - ls_objh-objectname = ms_item-obj_name(lv_type_pos). - ls_objh-objecttype = ms_item-obj_name+lv_type_pos. - - CALL FUNCTION 'OBJ_GENERATE' - EXPORTING - iv_objectname = ls_objh-objectname - iv_objecttype = ls_objh-objecttype - iv_maint_mode = 'D' - EXCEPTIONS - illegal_call = 1 - object_not_found = 2 - generate_error = 3 - transport_error = 4 - object_enqueue_failed = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from OBJ_GENERATE'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - _raise 'todo, TOBJ jump'. - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_tobj IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_msag DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_msag DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_msag DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_view IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_msag IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_arbgb TYPE t100a-arbgb. - - - SELECT SINGLE arbgb FROM t100a INTO lv_arbgb - WHERE arbgb = ms_item-obj_name. "#EC CI_GENBUFF - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = 'MSAG' - in_new_window = abap_true. - - ENDMETHOD. "jump - - METHOD lif_object~delete. - -* parameter SUPPRESS_DIALOG doesnt exist in all versions - CALL FUNCTION 'RS_DELETE_MESSAGE_ID' - EXPORTING - nachrichtenklasse = ms_item-obj_name - EXCEPTIONS - not_executed = 1 - not_found = 2 - no_permission = 3 - OTHERS = 4. - IF sy-subrc <> 0. - _raise 'Error from RS_DELETE_MESSAGE_ID'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~deserialize. -* fm RPY_MESSAGE_ID_INSERT almost works, but not in older versions - - DATA: ls_t100a TYPE t100a, - ls_t100t TYPE t100t, - ls_t100u TYPE t100u, - lt_t100 TYPE TABLE OF t100. - - FIELD-SYMBOLS: LIKE LINE OF lt_t100. - - - io_xml->read( EXPORTING iv_name = 'T100A' - CHANGING cg_data = ls_t100a ). - io_xml->read( EXPORTING iv_name = 'T100' - CHANGING cg_data = lt_t100 ). - - CALL FUNCTION 'RS_CORR_INSERT' - EXPORTING - global_lock = abap_true - devclass = iv_package - object = ls_t100a-arbgb - object_class = 'T100' - mode = 'INSERT' - EXCEPTIONS - cancelled = 01 - permission_failure = 02 - unknown_objectclass = 03. - IF sy-subrc <> 0. - _raise 'Error from RS_CORR_INSERT'. - ENDIF. - - LOOP AT lt_t100 ASSIGNING . - MODIFY t100 FROM . "#EC CI_SUBRC - ASSERT sy-subrc = 0. - - CLEAR ls_t100u. - MOVE-CORRESPONDING TO ls_t100u ##enh_ok. - ls_t100u-name = sy-uname. - ls_t100u-datum = sy-datum. - ls_t100u-selfdef = '3'. - MODIFY t100u FROM ls_t100u. "#EC CI_SUBRC - ASSERT sy-subrc = 0. - ENDLOOP. - - ls_t100a-masterlang = mv_language. - ls_t100a-lastuser = sy-uname. - ls_t100a-respuser = sy-uname. - ls_t100a-ldate = sy-datum. - ls_t100a-ltime = sy-uzeit. - MODIFY t100a FROM ls_t100a. "#EC CI_SUBRC - ASSERT sy-subrc = 0. - - ls_t100t-sprsl = mv_language. - ls_t100t-arbgb = ls_t100a-arbgb. - ls_t100t-stext = ls_t100a-stext. - MODIFY t100t FROM ls_t100t. "#EC CI_SUBRC - ASSERT sy-subrc = 0. - - ENDMETHOD. "deserialize - - METHOD lif_object~serialize. - - DATA: lv_msg_id TYPE rglif-message_id, - ls_inf TYPE t100a, - lt_source TYPE TABLE OF t100. - - - lv_msg_id = ms_item-obj_name. - - SELECT SINGLE * FROM t100a INTO ls_inf - WHERE arbgb = lv_msg_id. "#EC CI_GENBUFF - IF sy-subrc <> 0. - RETURN. - ENDIF. - CLEAR ls_inf-respuser. - - SELECT * FROM t100 INTO TABLE lt_source - WHERE sprsl = mv_language - AND arbgb = lv_msg_id - ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF - - CLEAR: ls_inf-lastuser, - ls_inf-ldate, - ls_inf-ltime. - - io_xml->add( iv_name = 'T100A' - ig_data = ls_inf ). - io_xml->add( ig_data = lt_source - iv_name = 'T100' ). - - ENDMETHOD. "serialize - -ENDCLASS. "lcl_object_view IMPLEMENTATION - *----------------------------------------------------------------------* * CLASS lcl_object_fugr DEFINITION *----------------------------------------------------------------------* @@ -7989,493 +2033,6 @@ CLASS lcl_object_fugr IMPLEMENTATION. ENDCLASS. "lcl_object_fugr IMPLEMENTATION -*----------------------------------------------------------------------* -* CLASS lcl_object_view DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_view DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_dtel DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_view IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_view IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_viewname TYPE dd25l-viewname. - - - SELECT SINGLE viewname FROM dd25l INTO lv_viewname - WHERE viewname = ms_item-obj_name - AND as4local = 'A' - AND as4vers = '0000'. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - jump_se11( iv_radio = 'RSRD1-VIMA' - iv_field = 'RSRD1-VIMA_VAL' ). - - ENDMETHOD. "jump - - METHOD lif_object~delete. - - DATA: lv_objname TYPE rsedd0-ddobjname. - - - lv_objname = ms_item-obj_name. - - CALL FUNCTION 'RS_DD_DELETE_OBJ' - EXPORTING - no_ask = abap_true - objname = lv_objname - objtype = 'V' - EXCEPTIONS - not_executed = 1 - object_not_found = 2 - object_not_specified = 3 - permission_failure = 4. - IF sy-subrc <> 0. - _raise 'error from RS_DD_DELETE_OBJ, VIEW'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~serialize. - - DATA: lv_name TYPE ddobjname, - ls_dd25v TYPE dd25v, - ls_dd09l TYPE dd09l, - lt_dd26v TYPE TABLE OF dd26v, - lt_dd27p TYPE TABLE OF dd27p, - lt_dd28j TYPE TABLE OF dd28j, - lt_dd28v TYPE TABLE OF dd28v. - - - lv_name = ms_item-obj_name. - - CALL FUNCTION 'DDIF_VIEW_GET' - EXPORTING - name = lv_name - state = 'A' - langu = mv_language - IMPORTING - dd25v_wa = ls_dd25v - dd09l_wa = ls_dd09l - TABLES - dd26v_tab = lt_dd26v - dd27p_tab = lt_dd27p - dd28j_tab = lt_dd28j - dd28v_tab = lt_dd28v - EXCEPTIONS - illegal_input = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error from DDIF_VIEW_GET'. - ENDIF. - IF ls_dd25v IS INITIAL. - RETURN. " does not exist in system - ENDIF. - - CLEAR: ls_dd25v-as4user, - ls_dd25v-as4date, - ls_dd25v-as4time. - - CLEAR: ls_dd09l-as4user, - ls_dd09l-as4date, - ls_dd09l-as4time. - - io_xml->add( iv_name = 'DD25V' - ig_data = ls_dd25v ). - io_xml->add( iv_name = 'DD09L' - ig_data = ls_dd09l ). - io_xml->add( ig_data = lt_dd26v - iv_name = 'DD26V_TABLE' ). - io_xml->add( ig_data = lt_dd27p - iv_name = 'DD27P_TABLE' ). - io_xml->add( ig_data = lt_dd28j - iv_name = 'DD28J_TABLE' ). - io_xml->add( ig_data = lt_dd28v - iv_name = 'DD28V_TABLE' ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_name TYPE ddobjname, - ls_dd25v TYPE dd25v, - ls_dd09l TYPE dd09l, - lt_dd26v TYPE TABLE OF dd26v, - lt_dd27p TYPE TABLE OF dd27p, - lt_dd28j TYPE TABLE OF dd28j, - lt_dd28v TYPE TABLE OF dd28v. - - - io_xml->read( EXPORTING iv_name = 'DD25V' - CHANGING cg_data = ls_dd25v ). - io_xml->read( EXPORTING iv_name = 'DD09L' - CHANGING cg_data = ls_dd09l ). - io_xml->read( EXPORTING iv_name = 'DD26V_TABLE' - CHANGING cg_data = lt_dd26v ). - io_xml->read( EXPORTING iv_name = 'DD27P_TABLE' - CHANGING cg_data = lt_dd27p ). - io_xml->read( EXPORTING iv_name = 'DD28J_TABLE' - CHANGING cg_data = lt_dd28j ). - io_xml->read( EXPORTING iv_name = 'DD28V_TABLE' - CHANGING cg_data = lt_dd28v ). - - corr_insert( iv_package ). - - lv_name = ms_item-obj_name. " type conversion - - CALL FUNCTION 'DDIF_VIEW_PUT' - EXPORTING - name = lv_name - dd25v_wa = ls_dd25v - dd09l_wa = ls_dd09l - TABLES - dd26v_tab = lt_dd26v - dd27p_tab = lt_dd27p - dd28j_tab = lt_dd28j - dd28v_tab = lt_dd28v - EXCEPTIONS - view_not_found = 1 - name_inconsistent = 2 - view_inconsistent = 3 - put_failure = 4 - put_refused = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from DDIF_VIEW_PUT'. - ENDIF. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - -ENDCLASS. "lcl_object_view IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_nrob DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_nrob DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_nrob DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_nrob IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_nrob IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_object TYPE tnro-object. - - - SELECT SINGLE object FROM tnro INTO lv_object - WHERE object = ms_item-obj_name. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: lv_object TYPE tnro-object, - ls_attributes TYPE tnro, - ls_text TYPE tnrot. - - - lv_object = ms_item-obj_name. - - CALL FUNCTION 'NUMBER_RANGE_OBJECT_READ' - EXPORTING - language = mv_language - object = lv_object - IMPORTING - object_attributes = ls_attributes - object_text = ls_text - EXCEPTIONS - object_not_found = 1 - OTHERS = 2. - IF sy-subrc = 1. - RETURN. - ELSEIF sy-subrc <> 0. - _raise 'error from NUMBER_RANGE_OBJECT_READ'. - ENDIF. - - io_xml->add( iv_name = 'ATTRIBUTES' - ig_data = ls_attributes ). - io_xml->add( iv_name = 'TEXT' - ig_data = ls_text ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lt_errors TYPE TABLE OF inoer, - ls_attributes TYPE tnro, - ls_text TYPE tnrot. - - - io_xml->read( EXPORTING iv_name = 'ATTRIBUTES' - CHANGING cg_data = ls_attributes ). - io_xml->read( EXPORTING iv_name = 'TEXT' - CHANGING cg_data = ls_text ). - - CALL FUNCTION 'NUMBER_RANGE_OBJECT_UPDATE' - EXPORTING - indicator = 'I' - object_attributes = ls_attributes - object_text = ls_text - TABLES - errors = lt_errors - EXCEPTIONS - object_already_exists = 1 - object_attributes_missing = 2 - object_not_found = 3 - object_text_missing = 4 - wrong_indicator = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from NUMBER_RANGE_OBJECT_UPDATE'. - ENDIF. - - CALL FUNCTION 'NUMBER_RANGE_OBJECT_CLOSE' - EXPORTING - object = ls_attributes-object - EXCEPTIONS - object_not_initialized = 1. - IF sy-subrc <> 0. - _raise 'error from NUMBER_RANGE_OBJECT_CLOSE'. - ENDIF. - - CALL FUNCTION 'TR_TADIR_INTERFACE' - EXPORTING - wi_test_modus = abap_false - wi_tadir_pgmid = 'R3TR' - wi_tadir_object = 'NROB' - wi_tadir_obj_name = ms_item-obj_name - wi_tadir_author = sy-uname - wi_tadir_devclass = iv_package - wi_tadir_masterlang = mv_language - wi_set_genflag = abap_true - EXCEPTIONS - OTHERS = 1. - IF sy-subrc <> 0. - _raise 'error from TR_TADIR_INTERFACE'. - ENDIF. - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lv_object TYPE tnro-object. - - - lv_object = ms_item-obj_name. - - CALL FUNCTION 'NUMBER_RANGE_OBJECT_DELETE' - EXPORTING - language = mv_language - object = lv_object - EXCEPTIONS - delete_not_allowed = 1 - object_not_found = 2 - wrong_indicator = 3 - OTHERS = 4. - IF sy-subrc <> 0. - _raise 'error from NUMBER_RANGE_OBJECT_DELETE'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - _raise 'todo'. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_nrob IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_ttyp DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_ttyp DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_dtel DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_ttyp IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_ttyp IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: lv_typename TYPE dd40l-typename. - - - SELECT SINGLE typename FROM dd40l INTO lv_typename - WHERE typename = ms_item-obj_name - AND as4local = 'A'. - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - - jump_se11( iv_radio = 'RSRD1-DDTYPE' - iv_field = 'RSRD1-DDTYPE_VAL' ). - - ENDMETHOD. "jump - - METHOD lif_object~delete. - - DATA: lv_objname TYPE rsedd0-ddobjname. - - - lv_objname = ms_item-obj_name. - - CALL FUNCTION 'RS_DD_DELETE_OBJ' - EXPORTING - no_ask = abap_true - objname = lv_objname - objtype = 'A' - EXCEPTIONS - not_executed = 1 - object_not_found = 2 - object_not_specified = 3 - permission_failure = 4. - IF sy-subrc <> 0. - _raise 'error from RS_DD_DELETE_OBJ, TTYP'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~serialize. - - DATA: lv_name TYPE ddobjname, - lt_dd42v TYPE dd42v_tab, - lt_dd43v TYPE dd43v_tab, - ls_dd40v TYPE dd40v. - - - lv_name = ms_item-obj_name. - - CALL FUNCTION 'DDIF_TTYP_GET' - EXPORTING - name = lv_name - state = 'A' - langu = mv_language - IMPORTING - dd40v_wa = ls_dd40v - TABLES - dd42v_tab = lt_dd42v - dd43v_tab = lt_dd43v - EXCEPTIONS - illegal_input = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'error from DDIF_TTYP_GET'. - ENDIF. - IF ls_dd40v IS INITIAL. - RETURN. " does not exist in system - ENDIF. - - CLEAR: ls_dd40v-as4user, - ls_dd40v-as4date, - ls_dd40v-as4time. - - io_xml->add( iv_name = 'DD40V' - ig_data = ls_dd40v ). - io_xml->add( iv_name = 'DD42V' - ig_data = lt_dd42v ). - io_xml->add( iv_name = 'DD43V' - ig_data = lt_dd43v ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_name TYPE ddobjname, - lt_dd42v TYPE dd42v_tab, - lt_dd43v TYPE dd43v_tab, - ls_dd40v TYPE dd40v. - - - io_xml->read( EXPORTING iv_name = 'DD40V' - CHANGING cg_data = ls_dd40v ). - io_xml->read( EXPORTING iv_name = 'DD42V' - CHANGING cg_data = lt_dd42v ). - io_xml->read( EXPORTING iv_name = 'DD43V' - CHANGING cg_data = lt_dd43v ). - - corr_insert( iv_package ). - - lv_name = ms_item-obj_name. " type conversion - - CALL FUNCTION 'DDIF_TTYP_PUT' - EXPORTING - name = lv_name - dd40v_wa = ls_dd40v - TABLES - dd42v_tab = lt_dd42v - dd43v_tab = lt_dd43v - EXCEPTIONS - ttyp_not_found = 1 - name_inconsistent = 2 - ttyp_inconsistent = 3 - put_failure = 4 - put_refused = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error from DDIF_TTYP_PUT'. - ENDIF. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - -ENDCLASS. "lcl_object_ttyp IMPLEMENTATION - *----------------------------------------------------------------------* * CLASS lcl_object_prog DEFINITION *----------------------------------------------------------------------* @@ -8615,1420 +2172,4 @@ CLASS lcl_object_prog IMPLEMENTATION. ENDMETHOD. "lif_serialize~deserialize -ENDCLASS. "lcl_object_prog IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_vcls DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_vcls DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - - PRIVATE SECTION. -* See include MTOBJCON: - CONSTANTS: c_cluster_type TYPE c VALUE 'C'. - CONSTANTS: c_mode_insert TYPE obj_para-maint_mode VALUE 'I'. - -ENDCLASS. "lcl_object_vcls DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_vcls IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_vcls IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - DATA lv_vclname TYPE vcl_name. - - SELECT SINGLE vclname INTO lv_vclname FROM vcldir - WHERE vclname = ms_item-obj_name. - - rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: lv_vclname TYPE vcl_name, - ls_vcldir_entry TYPE v_vcldir, - lt_vclstruc TYPE TABLE OF v_vclstruc, - lt_vclstrudep TYPE TABLE OF v_vclstdep, - lt_vclmf TYPE TABLE OF v_vclmf. - - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - lv_vclname = ms_item-obj_name. - - CALL FUNCTION 'VIEWCLUSTER_GET_DEFINITION' - EXPORTING - vclname = lv_vclname - IMPORTING - vcldir_entry = ls_vcldir_entry - TABLES - vclstruc_tab = lt_vclstruc - vclstrudep_tab = lt_vclstrudep - vclmf_tab = lt_vclmf - EXCEPTIONS - viewcluster_not_found = 1 - incomplete_viewcluster = 2 - OTHERS = 3. - IF sy-subrc <> 0. - _raise 'error in VIEWCLUSTER_GET_DEFINITION'. - ENDIF. - - CLEAR ls_vcldir_entry-author. - - io_xml->add( iv_name = 'VCLDIR' - ig_data = ls_vcldir_entry ). - io_xml->add( iv_name = 'VLCSTRUC_TAB' - ig_data = lt_vclstruc ). - io_xml->add( iv_name = 'VCLSTRUDEP_TAB' - ig_data = lt_vclstrudep ). - io_xml->add( iv_name = 'VCLMF_TAB' - ig_data = lt_vclmf ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: ls_vcldir_entry TYPE v_vcldir, - lt_vclstruc TYPE TABLE OF v_vclstruc, - lt_vclstrudep TYPE TABLE OF v_vclstdep, - lt_vclmf TYPE TABLE OF v_vclmf, - lv_objectname TYPE ob_object. - - - io_xml->read( EXPORTING iv_name = 'VCLDIR' - CHANGING cg_data = ls_vcldir_entry ). - io_xml->read( EXPORTING iv_name = 'VLCSTRUC_TAB' - CHANGING cg_data = lt_vclstruc ). - io_xml->read( EXPORTING iv_name = 'VCLSTRUDEP_TAB' - CHANGING cg_data = lt_vclstrudep ). - io_xml->read( EXPORTING iv_name = 'lt_vclstrudep' - CHANGING cg_data = lt_vclmf ). - - ls_vcldir_entry-author = sy-uname. - - CALL FUNCTION 'VIEWCLUSTER_SAVE_DEFINITION' - EXPORTING - vcldir_entry = ls_vcldir_entry - TABLES - vclstruc_tab = lt_vclstruc - vclstrudep_tab = lt_vclstrudep - vclmf_tab = lt_vclmf. - - lv_objectname = ls_vcldir_entry-vclname. - CALL FUNCTION 'OBJ_GENERATE' - EXPORTING - iv_objectname = lv_objectname - iv_objecttype = c_cluster_type - iv_maint_mode = c_mode_insert - iv_devclass = iv_package - EXCEPTIONS - illegal_call = 1 - object_not_found = 2 - generate_error = 3 - transport_error = 4 - object_enqueue_failed = 5 - OTHERS = 6. - IF sy-subrc <> 0. - _raise 'error in OBJ_GENERATE for VCLS'. - ENDIF. - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. -* Do the same as in VIEWCLUSTER_SAVE_DEFINITION - DATA: lv_vclname TYPE vcl_name. - - - lv_vclname = ms_item-obj_name. - - DELETE FROM vcldir WHERE vclname = lv_vclname. "#EC CI_SUBRC - DELETE FROM vcldirt WHERE vclname = lv_vclname. "#EC CI_NOFIRST "#EC CI_SUBRC - DELETE FROM vclstruc WHERE vclname = lv_vclname. "#EC CI_SUBRC - DELETE FROM vclstruct WHERE vclname = lv_vclname. "#EC CI_NOFIRST "#EC CI_SUBRC - DELETE FROM vclstrudep WHERE vclname = lv_vclname. "#EC CI_SUBRC - DELETE FROM vclmf WHERE vclname = lv_vclname. "#EC CI_SUBRC - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - DATA: lv_vclname TYPE vcl_name. - - lv_vclname = ms_item-obj_name. - CALL FUNCTION 'VIEWCLUSTER_MAINTENANCE_CALL' - EXPORTING - viewcluster_name = lv_vclname - maintenance_action = 'S' - EXCEPTIONS - client_reference = 1 - foreign_lock = 2 - viewcluster_not_found = 3 - viewcluster_is_inconsistent = 4 - missing_generated_function = 5 - no_upd_auth = 6 - no_show_auth = 7 - object_not_found = 8 - no_tvdir_entry = 9 - no_clientindep_auth = 10 - invalid_action = 11 - saving_correction_failed = 12 - system_failure = 13 - unknown_field_in_dba_sellist = 14 - missing_corr_number = 15 - OTHERS = 16. - IF sy-subrc <> 0. - _raise 'error in VIEWCLUSTER_MAINTENANCE_CALL'. - ENDIF. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_vcls IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_sfsw DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_sfsw DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - -ENDCLASS. "lcl_object_sfsw DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_sfsw IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_sfsw IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: ls_tadir TYPE tadir, - lv_switch_id TYPE sfw_switch_id. - - lv_switch_id = ms_item-obj_name. - IF cl_sfw_sw=>check_existence( lv_switch_id ) = abap_false. - RETURN. - ENDIF. - - ls_tadir = lcl_tadir=>read_single( - iv_object = ms_item-obj_type - iv_obj_name = ms_item-obj_name ). - IF ls_tadir IS INITIAL. - RETURN. - ENDIF. - - rv_bool = abap_true. - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: lv_switch_id TYPE sfw_switch_id, - lo_switch TYPE REF TO cl_sfw_sw, - ls_header TYPE sfw_switch, - lv_name_32 TYPE sfw_name32, - lv_name_80 TYPE sfw_name80, - lt_parent_bf TYPE sfw_bf_sw_outtab, - lt_conflicts TYPE sfw_confl_outtab. - - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - lv_switch_id = ms_item-obj_name. - - TRY. - lo_switch = cl_sfw_sw=>get_switch_from_db( lv_switch_id ). - CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. - _raise 'Error from CL_SFW_SW=>GET_SWITCH'. - ENDTRY. - - ls_header = lo_switch->get_header_data( ). - CLEAR: ls_header-author, - ls_header-createdon, - ls_header-changedby, - ls_header-changedon, - ls_header-timestamp. - - lo_switch->get_texts( - IMPORTING - p_32 = lv_name_32 - p_80 = lv_name_80 ). - - lt_parent_bf = lo_switch->get_parent_bf( ). - lt_conflicts = lo_switch->get_conflicts( ). - - io_xml->add( ig_data = ls_header - iv_name = 'HEADER' ). - io_xml->add( ig_data = lv_name_32 - iv_name = 'NAME32' ). - io_xml->add( ig_data = lv_name_80 - iv_name = 'NAME80' ). - - io_xml->add( ig_data = lt_parent_bf - iv_name = 'PARENT_BF' ). - io_xml->add( ig_data = lt_conflicts - iv_name = 'CONFLICTS' ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lo_switch TYPE REF TO cl_sfw_sw, - lv_switch_id TYPE sfw_switch_id, - ls_header TYPE sfw_switch, - lv_name_32 TYPE sfw_name32, - lv_name_80 TYPE sfw_name80, - lt_parent_bf TYPE sfw_bf_sw_outtab, - lt_conflicts TYPE sfw_confl_outtab. - - - io_xml->read( EXPORTING iv_name = 'HEADER' - CHANGING cg_data = ls_header ). - io_xml->read( EXPORTING iv_name = 'NAME32' - CHANGING cg_data = lv_name_32 ). - io_xml->read( EXPORTING iv_name = 'NAME80' - CHANGING cg_data = lv_name_80 ). - - io_xml->read( EXPORTING iv_name = 'PARENT_BF' - CHANGING cg_data = lt_parent_bf ). - io_xml->read( EXPORTING iv_name = 'CONFLICTS' - CHANGING cg_data = lt_conflicts ). - - lv_switch_id = ms_item-obj_name. - TRY. - lo_switch = cl_sfw_sw=>create_switch( lv_switch_id ). - CATCH cx_pak_not_authorized cx_pak_invalid_state cx_pak_invalid_data. - _raise 'error in CL_SFW_SW=>CREATE_SWITCH'. - ENDTRY. - - ls_header-author = sy-uname. - ls_header-createdon = sy-datum. - lo_switch->set_header_data( ls_header ). - - lo_switch->set_texts( p_32 = lv_name_32 - p_80 = lv_name_80 ). - - lo_switch->set_parent_bf( lt_parent_bf ). - lo_switch->set_conflicts( lt_conflicts ). - - lo_switch->save_all( - EXCEPTIONS - not_saved = 1 - OTHERS = 2 ). - IF sy-subrc <> 0. - _raise 'error in CL_SFW_SW->SAVE_ALL'. - ENDIF. - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lv_switch_id TYPE sfw_switch_id, - lo_switch TYPE REF TO cl_sfw_sw. - - - lv_switch_id = ms_item-obj_name. - TRY. - lo_switch = cl_sfw_sw=>get_switch( lv_switch_id ). - lo_switch->set_delete_flag( lv_switch_id ). - lo_switch->save_all( ). - CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. - _raise 'Error deleting Switch'. - ENDTRY. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = 'SFSW' - in_new_window = abap_true. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_sfsw IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_SFBF DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_sfbf DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - -ENDCLASS. "lcl_object_SFBF DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_SFBF IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_sfbf IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: ls_tadir TYPE tadir, - lv_bf TYPE sfw_bfunction. - - lv_bf = ms_item-obj_name. - IF cl_sfw_bf=>check_existence( lv_bf ) = abap_false. - RETURN. - ENDIF. - - ls_tadir = lcl_tadir=>read_single( - iv_object = ms_item-obj_type - iv_obj_name = ms_item-obj_name ). - IF ls_tadir IS INITIAL. - RETURN. - ENDIF. - - rv_bool = abap_true. - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: lv_bf TYPE sfw_bfunction, - lo_bf TYPE REF TO cl_sfw_bf, - ls_header TYPE sfw_bf, - lv_name_32 TYPE sfw_name32, - lv_name_80 TYPE sfw_name80, - lt_assigned_switches TYPE sfw_swbf_outtab, - lt_dependancies TYPE sfw_depend_outtab, - ls_sfw_bfc_kw TYPE sfw_bfc_kw, - ls_sfw_bfc_tc TYPE sfw_bfc_tc, - ls_sfw_bfc_rn TYPE sfw_bfc_rn, - lt_parent_bfs TYPE sfw_bs_bf_outtab. - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - lv_bf = ms_item-obj_name. - - TRY. -* make sure to clear cache, method GET_BF_FROM_DB does not exist in 702 - lo_bf = cl_sfw_bf=>get_bf( lv_bf ). - lo_bf->free( ). - lo_bf = cl_sfw_bf=>get_bf( lv_bf ). - CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. - _raise 'Error from CL_SFW_BF=>GET_BF'. - ENDTRY. - - ls_header = lo_bf->get_header_data( ). - CLEAR: ls_header-author, - ls_header-createdon, - ls_header-changedby, - ls_header-changedon, - ls_header-timestamp. - - lo_bf->get_texts( - IMPORTING - p_32 = lv_name_32 - p_80 = lv_name_80 ). - - lt_assigned_switches = lo_bf->get_assigned_switches( ). - lt_dependancies = lo_bf->get_excluded_bf( ). - lo_bf->get_content_data( - IMPORTING - ex_sfw_bfc_kw = ls_sfw_bfc_kw - ex_sfw_bfc_tc = ls_sfw_bfc_tc - ex_sfw_bfc_rn = ls_sfw_bfc_rn ). - lt_parent_bfs = lo_bf->get_parent_bfs( ). - - io_xml->add( ig_data = ls_header - iv_name = 'HEADER' ). - io_xml->add( ig_data = lv_name_32 - iv_name = 'NAME32' ). - io_xml->add( ig_data = lv_name_80 - iv_name = 'NAME80' ). - - io_xml->add( ig_data = lt_assigned_switches - iv_name = 'ASSIGNED_SWITCHES' ). - io_xml->add( ig_data = lt_dependancies - iv_name = 'DEPENDANCIES' ). - io_xml->add( ig_data = ls_sfw_bfc_kw - iv_name = 'CONTENT_KW' ). - io_xml->add( ig_data = ls_sfw_bfc_tc - iv_name = 'CONTENT_TC' ). - io_xml->add( ig_data = ls_sfw_bfc_rn - iv_name = 'CONTENT_RN' ). - io_xml->add( ig_data = lt_parent_bfs - iv_name = 'PARENT_BFS' ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_bf TYPE sfw_bfunction, - lo_bf TYPE REF TO cl_sfw_bf, - ls_header TYPE sfw_bf, - lv_name_32 TYPE sfw_name32, - lv_name_80 TYPE sfw_name80, - lt_assigned_switches TYPE sfw_swbf_outtab, - lt_dependancies TYPE sfw_depend_outtab, - ls_sfw_bfc_kw TYPE sfw_bfc_kw, - ls_sfw_bfc_tc TYPE sfw_bfc_tc, - ls_sfw_bfc_rn TYPE sfw_bfc_rn, - lt_parent_bfs TYPE sfw_bs_bf_outtab. - - - io_xml->read( EXPORTING iv_name = 'HEADER' - CHANGING cg_data = ls_header ). - io_xml->read( EXPORTING iv_name = 'NAME32' - CHANGING cg_data = lv_name_32 ). - io_xml->read( EXPORTING iv_name = 'NAME80' - CHANGING cg_data = lv_name_80 ). - - io_xml->read( EXPORTING iv_name = 'ASSIGNED_SWITCHES' - CHANGING cg_data = lt_assigned_switches ). - io_xml->read( EXPORTING iv_name = 'DEPENDANCIES' - CHANGING cg_data = lt_dependancies ). - io_xml->read( EXPORTING iv_name = 'CONTENT_KW' - CHANGING cg_data = ls_sfw_bfc_kw ). - io_xml->read( EXPORTING iv_name = 'CONTENT_TC' - CHANGING cg_data = ls_sfw_bfc_tc ). - io_xml->read( EXPORTING iv_name = 'CONTENT_RN' - CHANGING cg_data = ls_sfw_bfc_rn ). - io_xml->read( EXPORTING iv_name = 'PARENT_BFS' - CHANGING cg_data = lt_parent_bfs ). - - lv_bf = ms_item-obj_name. - TRY. - lo_bf = cl_sfw_bf=>create_bf( lv_bf ). - CATCH cx_pak_not_authorized cx_pak_invalid_state cx_pak_invalid_data. - _raise 'error in CL_SFW_BF=>CREATE_BF'. - ENDTRY. - - ls_header-author = sy-uname. - ls_header-createdon = sy-datum. - lo_bf->set_header_data( ls_header ). - - lo_bf->set_texts( p_32 = lv_name_32 - p_80 = lv_name_80 ). - - lo_bf->set_assigned_switches( lt_assigned_switches ). - lo_bf->set_excluded_bf( lt_dependancies ). - lo_bf->set_content_data( - im_sfw_bfc_kw = ls_sfw_bfc_kw - im_sfw_bfc_rn = ls_sfw_bfc_rn - im_sfw_bfc_tc = ls_sfw_bfc_tc ). - lo_bf->set_parent_bfs( lt_parent_bfs ). - - lo_bf->save_all( ). - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lv_bf TYPE sfw_bfunction, - lo_bf TYPE REF TO cl_sfw_bf. - - - lv_bf = ms_item-obj_name. - TRY. - lo_bf = cl_sfw_bf=>get_bf( lv_bf ). - lo_bf->set_delete_flag( lv_bf ). - lo_bf->save_all( ). - CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. - _raise 'Error deleting BF'. - ENDTRY. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = 'SFBF' - in_new_window = abap_true. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_SFBF IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_SFBS DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_sfbs DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - -ENDCLASS. "lcl_object_SFBS DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_SFBS IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_sfbs IMPLEMENTATION. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - - DATA: ls_tadir TYPE tadir, - lv_bfset TYPE sfw_bset. - - lv_bfset = ms_item-obj_name. - IF cl_sfw_bfs=>check_existence( lv_bfset ) = abap_false. - RETURN. - ENDIF. - - ls_tadir = lcl_tadir=>read_single( - iv_object = ms_item-obj_type - iv_obj_name = ms_item-obj_name ). - IF ls_tadir IS INITIAL. - RETURN. - ENDIF. - - rv_bool = abap_true. - ENDMETHOD. "lif_object~exists - - METHOD lif_object~serialize. - - DATA: lv_bfset TYPE sfw_bset, - lo_bfs TYPE REF TO cl_sfw_bfs, - ls_header TYPE sfw_bs, - lv_name_32 TYPE sfw_name32, - lv_name_80 TYPE sfw_name80, - lt_assigned_bf TYPE sfw_bfbs_outtab, - lt_nested_bfs TYPE sfw_bsbs_outtab, - lt_parent_bfs TYPE sfw_bs_bs_parent_outtab. - - IF lif_object~exists( ) = abap_false. - RETURN. - ENDIF. - - lv_bfset = ms_item-obj_name. - - TRY. - lo_bfs = cl_sfw_bfs=>get_bfs( lv_bfset ). - lo_bfs->free( ). - lo_bfs = cl_sfw_bfs=>get_bfs( lv_bfset ). - CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. - _raise 'Error from CL_SFW_BFS=>GET_BFS'. - ENDTRY. - - ls_header = lo_bfs->get_header_data( ). - CLEAR: ls_header-author, - ls_header-createdon, - ls_header-changedby, - ls_header-changedon, - ls_header-timestamp. - - lo_bfs->get_texts( - IMPORTING - p_32 = lv_name_32 - p_80 = lv_name_80 ). - - lt_assigned_bf = lo_bfs->get_assigned_bf( ). - lt_nested_bfs = lo_bfs->get_nested_bfs( ). - lt_parent_bfs = lo_bfs->get_nested_parent( ). - - io_xml->add( ig_data = ls_header - iv_name = 'HEADER' ). - io_xml->add( ig_data = lv_name_32 - iv_name = 'NAME32' ). - io_xml->add( ig_data = lv_name_80 - iv_name = 'NAME80' ). - - io_xml->add( ig_data = lt_assigned_bf - iv_name = 'ASSIGNED_BF' ). - io_xml->add( ig_data = lt_nested_bfs - iv_name = 'NESTED_BFS' ). - io_xml->add( ig_data = lt_parent_bfs - iv_name = 'PARENT_BFS' ). - - ENDMETHOD. "serialize - - METHOD lif_object~deserialize. - - DATA: lv_bfset TYPE sfw_bset, - lo_bfs TYPE REF TO cl_sfw_bfs, - ls_header TYPE sfw_bs, - lv_name_32 TYPE sfw_name32, - lv_name_80 TYPE sfw_name80, - lt_assigned_bf TYPE sfw_bfbs_outtab, - lt_nested_bfs TYPE sfw_bsbs_outtab, - lt_parent_bfs TYPE sfw_bs_bs_parent_outtab. - - - io_xml->read( EXPORTING iv_name = 'HEADER' - CHANGING cg_data = ls_header ). - io_xml->read( EXPORTING iv_name = 'NAME32' - CHANGING cg_data = lv_name_32 ). - io_xml->read( EXPORTING iv_name = 'NAME80' - CHANGING cg_data = lv_name_80 ). - - io_xml->read( EXPORTING iv_name = 'ASSIGNED_BF' - CHANGING cg_data = lt_assigned_bf ). - io_xml->read( EXPORTING iv_name = 'NESTED_BFS' - CHANGING cg_data = lt_nested_bfs ). - io_xml->read( EXPORTING iv_name = 'PARENT_BFS' - CHANGING cg_data = lt_parent_bfs ). - - lv_bfset = ms_item-obj_name. - TRY. - lo_bfs = cl_sfw_bfs=>create_bfs( lv_bfset ). - CATCH cx_pak_not_authorized cx_pak_invalid_state cx_pak_invalid_data. - _raise 'error in CL_SFW_BFS=>CREATE_BFS'. - ENDTRY. - - ls_header-author = sy-uname. - ls_header-createdon = sy-datum. - lo_bfs->set_header_data( ls_header ). - - lo_bfs->set_texts( p_32 = lv_name_32 - p_80 = lv_name_80 ). - - lo_bfs->set_assigned_bf( lt_assigned_bf ). - lo_bfs->set_assigned_bfs( lt_nested_bfs ). - lo_bfs->set_nested_parent( lt_parent_bfs ). - - lo_bfs->save_all( ). - - lcl_objects_activation=>add_item( ms_item ). - - ENDMETHOD. "deserialize - - METHOD lif_object~delete. - - DATA: lv_bfset TYPE sfw_bset, - lo_bfs TYPE REF TO cl_sfw_bfs. - - - lv_bfset = ms_item-obj_name. - TRY. - lo_bfs = cl_sfw_bfs=>get_bfs( lv_bfset ). - lo_bfs->set_delete_flag( lv_bfset ). - lo_bfs->save_all( ). - CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. - _raise 'Error deleting BF'. - ENDTRY. - - ENDMETHOD. "delete - - METHOD lif_object~jump. - - CALL FUNCTION 'RS_TOOL_ACCESS' - EXPORTING - operation = 'SHOW' - object_name = ms_item-obj_name - object_type = 'SFBS' - in_new_window = abap_true. - - ENDMETHOD. "jump - -ENDCLASS. "lcl_object_SFBS IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_W3SUPER DEFINITION -*----------------------------------------------------------------------* -* Web Reporting/Internet Transaction Server MIME Types (super class) -*----------------------------------------------------------------------* -CLASS lcl_object_w3super DEFINITION INHERITING FROM lcl_objects_super ABSTRACT. - - PUBLIC SECTION. - INTERFACES lif_object. - - PRIVATE SECTION. - METHODS init_key RETURNING VALUE(rs_key) TYPE wwwdatatab. - -ENDCLASS. "lcl_object_W3SUPER DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_W3SUPER IMPLEMENTATION -*----------------------------------------------------------------------* -* Web Reporting/Internet Transaction Server MIME Types (super class) -*----------------------------------------------------------------------* -CLASS lcl_object_w3super IMPLEMENTATION. - - METHOD init_key. - rs_key-relid = ms_item-obj_type+2(2). - rs_key-objid = ms_item-obj_name. - ENDMETHOD. " init_key - - METHOD lif_object~jump. - " No idea how to just to SMW0 - _raise 'Please go to SMW0 for W3MI object'. - ENDMETHOD. "jump - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - " W3xx EXISTS - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - METHOD lif_object~exists. - DATA ls_key TYPE wwwdatatab. - - ls_key = init_key( ). - - SELECT SINGLE objid INTO ls_key-objid - FROM wwwdata - WHERE relid = ls_key-relid - AND objid = ls_key-objid - AND srtf2 = 0. - - IF sy-subrc IS NOT INITIAL. - RETURN. - ENDIF. - - rv_bool = abap_true. - - ENDMETHOD. "lif_object~exists - - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - " W3xx SERIALIZE - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - METHOD lif_object~serialize. - DATA ls_key TYPE wwwdatatab. - DATA lt_w3mime TYPE STANDARD TABLE OF w3mime. - DATA lt_w3html TYPE STANDARD TABLE OF w3html. - DATA lt_w3params TYPE STANDARD TABLE OF wwwparams. - DATA lv_xstring TYPE xstring. - DATA ls_wwwparam LIKE LINE OF lt_w3params. - DATA lv_size TYPE int4. - DATA lv_base64str TYPE string. - DATA lo_utility TYPE REF TO cl_http_utility. - - ls_key = init_key( ). - - SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_key - FROM wwwdata - WHERE relid = ls_key-relid - AND objid = ls_key-objid - AND srtf2 = 0. - - IF sy-subrc IS NOT INITIAL. - RETURN. - ENDIF. - - CALL FUNCTION 'WWWDATA_IMPORT' - EXPORTING - key = ls_key - TABLES - mime = lt_w3mime - html = lt_w3html - EXCEPTIONS - wrong_object_type = 1 - import_error = 2. - - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot read W3xx data'. - ENDIF. - - CALL FUNCTION 'WWWPARAMS_READ_ALL' - EXPORTING - type = ls_key-relid - objid = ls_key-objid - TABLES - params = lt_w3params - EXCEPTIONS - entry_not_exists = 1. - - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot read W3xx data'. - ENDIF. - - READ TABLE lt_w3params INTO ls_wwwparam WITH KEY name = 'filesize' ##NO_TEXT. - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot read W3xx filesize'. - ENDIF. - - lv_size = ls_wwwparam-value. - - CASE ls_key-relid. - WHEN 'MI'. - CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' - EXPORTING - input_length = lv_size - IMPORTING - buffer = lv_xstring - TABLES - binary_tab = lt_w3mime - EXCEPTIONS - failed = 1. - WHEN 'HT'. - CALL FUNCTION 'SCMS_TEXT_TO_XSTRING' - IMPORTING - buffer = lv_xstring - TABLES - text_tab = lt_w3html - EXCEPTIONS - failed = 1. - WHEN OTHERS. - _raise 'Wrong W3xx type'. - ENDCASE. - - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot convert W3xx to xstring'. - ENDIF. - - CREATE OBJECT lo_utility. - lv_base64str = lo_utility->encode_x_base64( lv_xstring ). - - io_xml->add( iv_name = 'NAME' - ig_data = ls_key-objid ). - - io_xml->add( iv_name = 'TEXT' - ig_data = ls_key-text ). - - io_xml->add( iv_name = 'DATA' - ig_data = lv_base64str ). - - io_xml->add( iv_name = 'PARAMS' - ig_data = lt_w3params ). - - ENDMETHOD. "serialize - - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - " W3xx DESERIALIZE - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - METHOD lif_object~deserialize. - - DATA ls_key TYPE wwwdatatab. - DATA lv_base64str TYPE string. - DATA lt_w3params TYPE STANDARD TABLE OF wwwparams. - DATA lv_xstring TYPE xstring. - DATA lo_utility TYPE REF TO cl_http_utility. - DATA lt_w3mime TYPE STANDARD TABLE OF w3mime. - DATA lt_w3html TYPE STANDARD TABLE OF w3html. - DATA lv_size TYPE int4. - DATA lv_tadir_obj TYPE tadir-object. - - ls_key = init_key( ). - - io_xml->read( EXPORTING iv_name = 'TEXT' - CHANGING cg_data = ls_key-text ). - - io_xml->read( EXPORTING iv_name = 'DATA' - CHANGING cg_data = lv_base64str ). - - io_xml->read( EXPORTING iv_name = 'PARAMS' - CHANGING cg_data = lt_w3params ). - - CREATE OBJECT lo_utility. - lv_xstring = lo_utility->decode_x_base64( lv_base64str ). - - CASE ls_key-relid. - WHEN 'MI'. - CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' - EXPORTING - buffer = lv_xstring - IMPORTING - output_length = lv_size - TABLES - binary_tab = lt_w3mime. - WHEN 'HT'. - CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' - EXPORTING - buffer = lv_xstring - IMPORTING - output_length = lv_size - TABLES - binary_tab = lt_w3mime. - - CALL FUNCTION 'SCMS_BINARY_TO_TEXT' - EXPORTING - input_length = lv_size - IMPORTING - output_length = lv_size - TABLES - binary_tab = lt_w3mime - text_tab = lt_w3html - EXCEPTIONS - failed = 1. - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot update W3xx params'. - ENDIF. - - CLEAR lt_w3mime. - WHEN OTHERS. - _raise 'Wrong W3xx type'. - ENDCASE. - - CALL FUNCTION 'WWWPARAMS_UPDATE' - TABLES - params = lt_w3params - EXCEPTIONS - update_error = 1. - - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot update W3xx params'. - ENDIF. - - ls_key-tdate = sy-datum. - ls_key-ttime = sy-uzeit. - ls_key-chname = sy-uname. - ls_key-devclass = iv_package. - - CALL FUNCTION 'WWWDATA_EXPORT' - EXPORTING - key = ls_key - TABLES - mime = lt_w3mime - html = lt_w3html - EXCEPTIONS - wrong_object_type = 1 - export_error = 2. - - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot upload W3xx data'. - ENDIF. - - CONCATENATE 'W3' ls_key-relid INTO lv_tadir_obj. - - CALL FUNCTION 'TR_TADIR_INTERFACE' - EXPORTING - wi_tadir_pgmid = 'R3TR' - wi_tadir_object = lv_tadir_obj - wi_tadir_devclass = iv_package - wi_tadir_obj_name = ls_key-objid - wi_test_modus = space - EXCEPTIONS - tadir_entry_not_existing = 1 - tadir_entry_ill_type = 2 - no_systemname = 3 - no_systemtype = 4 - original_system_conflict = 5 - object_reserved_for_devclass = 6 - object_exists_global = 7 - object_exists_local = 8 - object_is_distributed = 9 - obj_specification_not_unique = 10 - no_authorization_to_delete = 11 - devclass_not_existing = 12 - simultanious_set_remove_repair = 13 - order_missing = 14 - no_modification_of_head_syst = 15 - pgmid_object_not_allowed = 16 - masterlanguage_not_specified = 17 - devclass_not_specified = 18 - specify_owner_unique = 19 - loc_priv_objs_no_repair = 20 - gtadir_not_reached = 21 - object_locked_for_order = 22 - change_of_class_not_allowed = 23 - no_change_from_sap_to_tmp = 24 - OTHERS = 99. - - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot update TADIR for W3xx'. - ENDIF. - - ENDMETHOD. "lif_object~deserialize - - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - " W3xx DELETE - """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - METHOD lif_object~delete. - DATA ls_key TYPE wwwdatatab. - - ls_key = init_key( ). - - CALL FUNCTION 'WWWDATA_DELETE' - EXPORTING - key = ls_key - EXCEPTIONS - wrong_object_type = 1 - delete_error = 2. - - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot delete W3xx data'. - ENDIF. - - CALL FUNCTION 'WWWPARAMS_DELETE_ALL' - EXPORTING - key = ls_key - EXCEPTIONS - delete_error = 1. - - IF sy-subrc IS NOT INITIAL. - _raise 'Cannot delete W3xx params'. - ENDIF. - - ENDMETHOD. "lif_object~delete - -ENDCLASS. "lcl_object_W3SUPER IMPLEMENTATION - -*----------------------------------------------------------------------* -* CLASS lcl_object_W3MI DEFINITION -*----------------------------------------------------------------------* -* Web Reporting/Internet Transaction Server MIME Types (binary data) -*----------------------------------------------------------------------* -CLASS lcl_object_w3mi DEFINITION INHERITING FROM lcl_object_w3super FINAL. -ENDCLASS. "lcl_object_W3MI DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_W3HT DEFINITION -*----------------------------------------------------------------------* -* Web Reporting/Internet Transaction Server MIME Types (html data) -*----------------------------------------------------------------------* -CLASS lcl_object_w3ht DEFINITION INHERITING FROM lcl_object_w3super FINAL. -ENDCLASS. "lcl_object_W3HT DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_shi3 DEFINITION -*----------------------------------------------------------------------* -CLASS lcl_object_shi3 DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - - METHODS constructor - IMPORTING - is_item TYPE ty_item - iv_language TYPE spras. - - - PRIVATE SECTION. - - TYPES: BEGIN OF ty_id_map, - old TYPE ttree-id, - new TYPE ttree-id, - END OF ty_id_map. - TYPES tt_id_map TYPE STANDARD TABLE OF ty_id_map. - TYPES ts_id_map TYPE SORTED TABLE OF ty_id_map WITH UNIQUE KEY old. - - DATA: mv_tree_id TYPE ttree-id, - mt_map TYPE ts_id_map. " SORTED ! - - METHODS jump_se43 - RAISING lcx_exception. - - METHODS strip_stamps - CHANGING cs_head TYPE ttree - ct_nodes TYPE hier_iface_t. - - METHODS regenerate_ids - CHANGING ct_nodes TYPE hier_iface_t - ct_refs TYPE hier_ref_t - ct_texts TYPE hier_texts_t - RAISING lcx_exception. - - METHODS replace_id - IMPORTING iv_id TYPE clike - RETURNING VALUE(rv_new_id) TYPE ttree-id - RAISING lcx_exception. - -ENDCLASS. "lcl_object_shi3 DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_shi3 IMPLEMENTATION -*----------------------------------------------------------------------* -CLASS lcl_object_shi3 IMPLEMENTATION. - - METHOD constructor. - super->constructor( is_item = is_item iv_language = iv_language ). - mv_tree_id = ms_item-obj_name. - ENDMETHOD. "constructor - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD jump_se43. - - DATA: lt_bdcdata TYPE TABLE OF bdcdata. - - FIELD-SYMBOLS: LIKE LINE OF lt_bdcdata. - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -program = 'SAPLBMEN'. - -dynpro = '0200'. - -dynbegin = abap_true. - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -fnam = 'BDC_OKCODE'. - -fval = '=SHOW'. - - APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . - -fnam = 'BMENUNAME-ID'. - -fval = ms_item-obj_name. - - CALL FUNCTION 'ABAP4_CALL_TRANSACTION' - STARTING NEW TASK 'GIT' - EXPORTING - tcode = 'SE43' - mode_val = 'E' - TABLES - using_tab = lt_bdcdata - EXCEPTIONS - system_failure = 1 - communication_failure = 2 - resource_failure = 3 - OTHERS = 4. - - IF sy-subrc <> 0. - _raise 'error from ABAP4_CALL_TRANSACTION, SHI3'. - ENDIF. - - ENDMETHOD. "jump_se43 - - METHOD lif_object~jump. - jump_se43( ). - ENDMETHOD. "jump - - METHOD lif_object~exists. - - DATA: ls_msg TYPE hier_mess, - ls_header TYPE ttree, - ls_tadir TYPE tadir. - - CALL FUNCTION 'STREE_STRUCTURE_EXIST' - EXPORTING - structure_id = mv_tree_id - do_not_read_devclass = '' - IMPORTING - message = ls_msg - structure_header = ls_header - structure_tadir = ls_tadir. - - rv_bool = boolc( ls_header-id IS NOT INITIAL ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~delete. - - CALL FUNCTION 'BMENU_DELETE_TREE' - EXPORTING - tree_id = mv_tree_id - EXCEPTIONS - trees_do_not_exist = 1 - no_authority = 2 - canceled = 3 - OTHERS = 4. - - IF sy-subrc <> 0. - _raise 'error from BMENU_DELETE_TREE, SHI3'. - ENDIF. - - ENDMETHOD. "delete - - METHOD lif_object~serialize. - - DATA: ls_msg TYPE hier_mess, - ls_head TYPE ttree, - lt_titles TYPE TABLE OF ttreet, - lt_nodes TYPE TABLE OF hier_iface, - lt_texts TYPE TABLE OF hier_texts, - lt_refs TYPE TABLE OF hier_ref. - - CALL FUNCTION 'STREE_STRUCTURE_READ' - EXPORTING - structure_id = mv_tree_id - IMPORTING - message = ls_msg - structure_header = ls_head - TABLES - description = lt_titles. - - IF sy-subrc <> 0. - _raise 'Error from STREE_STRUCTURE_READ, SHI3'. - ENDIF. - - CALL FUNCTION 'STREE_HIERARCHY_READ' - EXPORTING - structure_id = mv_tree_id - read_also_texts = 'X' - all_languages = 'X' - IMPORTING - message = ls_msg - TABLES - list_of_nodes = lt_nodes - list_of_references = lt_refs - list_of_texts = lt_texts. - IF sy-subrc <> 0. - _raise 'Error from STREE_HIERARCHY_READ, SHI3'. - ENDIF. - - strip_stamps( CHANGING cs_head = ls_head - ct_nodes = lt_nodes ). - - io_xml->add( iv_name = 'TREE_HEAD' - ig_data = ls_head ). - io_xml->add( iv_name = 'TREE_TITLES' - ig_data = lt_titles ). - io_xml->add( iv_name = 'TREE_NODES' - ig_data = lt_nodes ). - io_xml->add( iv_name = 'TREE_REFS' - ig_data = lt_refs ). - io_xml->add( iv_name = 'TREE_TEXTS' - ig_data = lt_texts ). - - ENDMETHOD. "serialize - - METHOD strip_stamps. - - FIELD-SYMBOLS LIKE LINE OF ct_nodes. - - CLEAR: cs_head-luser, cs_head-ldate, cs_head-ltime. - CLEAR: cs_head-fuser, cs_head-fdate, cs_head-ftime. - CLEAR: cs_head-responsibl. - - LOOP AT ct_nodes ASSIGNING . - CLEAR: -luser, -ldate, -ltime. - CLEAR: -fuser, -fdate, -ftime. - ENDLOOP. - - ENDMETHOD. "strip_stamps - - METHOD regenerate_ids. - - DATA: ls_uid TYPE sys_uid, - lt_map TYPE tt_id_map. - - FIELD-SYMBOLS: LIKE LINE OF ct_nodes, - LIKE LINE OF ct_refs, - LIKE LINE OF ct_texts, - LIKE LINE OF mt_map. - - "Build map - LOOP AT ct_nodes ASSIGNING . - APPEND INITIAL LINE TO lt_map ASSIGNING . - IF -parent_id IS INITIAL. - -old = -node_id. - -new = -node_id. "Root node - ELSE. - CALL FUNCTION 'STREE_GET_UNIQUE_ID' - IMPORTING - unique_id = ls_uid. - - -old = -node_id. - -new = ls_uid-id. - ENDIF. - -node_id = -new. "Replace id - ENDLOOP. - - mt_map = lt_map. "Sort - - LOOP AT ct_nodes ASSIGNING . - -parent_id = replace_id( -parent_id ). - -brother_id = replace_id( -brother_id ). - ENDLOOP. - - LOOP AT ct_refs ASSIGNING . - -node_id = replace_id( -node_id ). - ENDLOOP. - - LOOP AT ct_texts ASSIGNING . - -node_id = replace_id( -node_id ). - ENDLOOP. - - ENDMETHOD. "regenerate_ids - - METHOD replace_id. - - DATA ls_map LIKE LINE OF mt_map. - - IF iv_id IS INITIAL. - RETURN. "No substitution for empty values - ENDIF. - - READ TABLE mt_map WITH TABLE KEY old = iv_id INTO ls_map. - IF sy-subrc <> 0. - _raise 'Cannot replace id, SHI3'. - ENDIF. - - rv_new_id = ls_map-new. - - ENDMETHOD. "replace_id - - METHOD lif_object~deserialize. - - DATA: ls_msg TYPE hier_mess, - ls_head TYPE ttree, - lt_titles TYPE TABLE OF ttreet, - lt_nodes TYPE TABLE OF hier_iface, - lt_texts TYPE TABLE OF hier_texts, - lt_refs TYPE TABLE OF hier_ref. - - io_xml->read( EXPORTING iv_name = 'TREE_HEAD' - CHANGING cg_data = ls_head ). - io_xml->read( EXPORTING iv_name = 'TREE_TITLES' - CHANGING cg_data = lt_titles ). - io_xml->read( EXPORTING iv_name = 'TREE_NODES' - CHANGING cg_data = lt_nodes ). - io_xml->read( EXPORTING iv_name = 'TREE_REFS' - CHANGING cg_data = lt_refs ). - io_xml->read( EXPORTING iv_name = 'TREE_TEXTS' - CHANGING cg_data = lt_texts ). - - regenerate_ids( CHANGING ct_nodes = lt_nodes - ct_refs = lt_refs - ct_texts = lt_texts ). - - IF lif_object~exists( ) = abap_true. - lif_object~delete( ). - ENDIF. - - CALL FUNCTION 'STREE_HIERARCHY_SAVE' - EXPORTING - structure_id = mv_tree_id - structure_type = 'BMENU' - structure_description = space - structure_masterlanguage = mv_language - structure_responsible = sy-uname - development_class = iv_package - IMPORTING - message = ls_msg - TABLES - list_of_nodes = lt_nodes - list_of_references = lt_refs - list_of_texts = lt_texts - structure_descriptions = lt_titles - EXCEPTIONS - no_nodes_given = 1 - OTHERS = 2. - IF sy-subrc <> 0. - _raise 'Error from STREE_HIERARCHY_SAVE, SHI3'. - ENDIF. - - ENDMETHOD. "deserialize - -ENDCLASS. "lcl_object_shi3 IMPLEMENTATION \ No newline at end of file +ENDCLASS. "lcl_object_prog IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_acid.prog.abap b/src/zabapgit_object_acid.prog.abap new file mode 100644 index 000000000..532b29615 --- /dev/null +++ b/src/zabapgit_object_acid.prog.abap @@ -0,0 +1,133 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_ACID +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_acid DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_acid DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS: create_object + RETURNING VALUE(ro_aab) TYPE REF TO cl_aab_id + RAISING lcx_exception. + +ENDCLASS. "lcl_object_acid DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_acid IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_acid IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD create_object. + + DATA: lv_name TYPE aab_id_name. + + + lv_name = ms_item-obj_name. + + CREATE OBJECT ro_aab + EXPORTING + im_name = lv_name + EXCEPTIONS + name_not_allowed = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error creating CL_AAB_ID object'. + ENDIF. + + ENDMETHOD. "create_object + + METHOD lif_object~serialize. + + DATA: lo_aab TYPE REF TO cl_aab_id, + lv_description TYPE aab_id_descript. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + lo_aab = create_object( ). + + lo_aab->get_descript( IMPORTING ex_descript = lv_description ). + + io_xml->add( iv_name = 'DESCRIPTION' + ig_data = lv_description ). + + ENDMETHOD. "lif_object~serialize + + METHOD lif_object~deserialize. + + DATA: lv_description TYPE aab_id_descript, + lo_aab TYPE REF TO cl_aab_id. + + + io_xml->read( EXPORTING iv_name = 'DESCRIPTION' + CHANGING cg_data = lv_description ). + + lo_aab = create_object( ). + lo_aab->enqueue( ). + lo_aab->set_descript( lv_description ). + lo_aab->save( ). + + ENDMETHOD. "lif_object~deserialize + + METHOD lif_object~delete. + + DATA: lo_aab TYPE REF TO cl_aab_id. + + + lo_aab = create_object( ). + lo_aab->enqueue( ). + lo_aab->delete( + EXCEPTIONS + prop_error = 1 + propt_error = 2 + act_error = 3 + cts_error = 4 + cts_devclass = 5 + id_not_found = 6 + no_authorization = 7 + id_still_used = 8 + where_used_error = 9 + OTHERS = 10 ). + IF sy-subrc <> 0. + _raise 'error deleting ACID object'. + ENDIF. + lo_aab->dequeue( ). + + ENDMETHOD. "lif_object~delete + + METHOD lif_object~exists. + + DATA: lv_state TYPE flag, + lo_aab TYPE REF TO cl_aab_id. + + + lo_aab = create_object( ). + + lo_aab->get_state( + IMPORTING + ex_state = lv_state ). + rv_bool = boolc( lv_state = abap_true ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + _raise 'todo, jump, ACID'. + ENDMETHOD. "lif_object~jump + +ENDCLASS. "lcl_object_acid IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_acid.prog.xml b/src/zabapgit_object_acid.prog.xml new file mode 100644 index 000000000..8c047a765 --- /dev/null +++ b/src/zabapgit_object_acid.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_ACID + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_ACID + 28 + + + + + + diff --git a/src/zabapgit_object_auth.prog.abap b/src/zabapgit_object_auth.prog.abap new file mode 100644 index 000000000..e823e624b --- /dev/null +++ b/src/zabapgit_object_auth.prog.abap @@ -0,0 +1,113 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_AUTH +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_auth DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_auth DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_auth DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_auth IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_auth IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~serialize. + + DATA: ls_authx TYPE authx. + + + SELECT SINGLE * FROM authx INTO ls_authx + WHERE fieldname = ms_item-obj_name. "#EC CI_GENBUFF + IF sy-subrc <> 0. + RETURN. + ENDIF. + + io_xml->add( iv_name = 'AUTHX' + ig_data = ls_authx ). + + ENDMETHOD. "lif_object~serialize + + METHOD lif_object~deserialize. +* see include LSAUT_FIELDF02 + + DATA: ls_authx TYPE authx, + lo_auth TYPE REF TO cl_auth_tools. + + + io_xml->read( EXPORTING iv_name = 'AUTHX' + CHANGING cg_data = ls_authx ). + + CREATE OBJECT lo_auth. + + IF lo_auth->add_afield_to_trkorr( ls_authx-fieldname ) <> 0. + _raise 'Error deserializing AUTH'. + ENDIF. + + MODIFY authx FROM ls_authx. + IF sy-subrc <> 0. + _raise 'Error deserializing AUTH'. + ENDIF. + + CALL FUNCTION 'DB_COMMIT'. + lo_auth->set_authfld_info_from_db( ls_authx-fieldname ). + + ENDMETHOD. "lif_object~deserialize + + METHOD lif_object~delete. + + DATA: lv_fieldname TYPE authx-fieldname. + + + lv_fieldname = ms_item-obj_name. + +* there is a bug in SAP standard, the TADIR entries are not deleted +* when the AUTH object is deleted in transaction SU20 + CALL FUNCTION 'SUSR_AUTF_DELETE_FIELD' + EXPORTING + fieldname = lv_fieldname + EXCEPTIONS + delete_not_possible = 1 + field_in_use = 2 + not_existing = 3 + no_authority = 4 + OTHERS = 5. + IF sy-subrc <> 0. + _raise 'error from SUSR_AUTF_DELETE_FIELD'. + ENDIF. + + ENDMETHOD. "lif_object~delete + + METHOD lif_object~exists. + + DATA: lv_fieldname TYPE authx-fieldname. + + + SELECT SINGLE fieldname FROM authx + INTO lv_fieldname + WHERE fieldname = ms_item-obj_name. "#EC CI_GENBUFF + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + _raise 'todo, AUTH jump'. + + ENDMETHOD. "lif_object~jump + +ENDCLASS. "lcl_object_auth IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_auth.prog.xml b/src/zabapgit_object_auth.prog.xml new file mode 100644 index 000000000..9206032e1 --- /dev/null +++ b/src/zabapgit_object_auth.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_AUTH + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_AUTH + 28 + + + + + + diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap new file mode 100644 index 000000000..1bf1a371f --- /dev/null +++ b/src/zabapgit_object_doma.prog.abap @@ -0,0 +1,154 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_DOMA +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_doma DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_doma DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_doma DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_doma IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_doma IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_domname TYPE dd01l-domname. + + + SELECT SINGLE domname FROM dd01l INTO lv_domname + WHERE domname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + jump_se11( iv_radio = 'RSRD1-DOMA' + iv_field = 'RSRD1-DOMA_VAL' ). + + ENDMETHOD. "jump + + METHOD lif_object~delete. +* see class CL_WB_DDIC + + DATA: lv_objname TYPE rsedd0-ddobjname. + + + lv_objname = ms_item-obj_name. + + CALL FUNCTION 'RS_DD_DELETE_OBJ' + EXPORTING + no_ask = abap_true + objname = lv_objname + objtype = 'D' + EXCEPTIONS + not_executed = 1 + object_not_found = 2 + object_not_specified = 3 + permission_failure = 4. + IF sy-subrc <> 0. + _raise 'error from RS_DD_DELETE_OBJ, DOMA'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. + + DATA: lv_name TYPE ddobjname, + ls_dd01v TYPE dd01v, + lt_dd07v TYPE TABLE OF dd07v. + + + lv_name = ms_item-obj_name. + + CALL FUNCTION 'DDIF_DOMA_GET' + EXPORTING + name = lv_name + langu = mv_language + IMPORTING + dd01v_wa = ls_dd01v + TABLES + dd07v_tab = lt_dd07v + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error from DDIF_DOMA_GET'. + ENDIF. + IF ls_dd01v IS INITIAL. + RETURN. " does not exist + ENDIF. + + CLEAR: ls_dd01v-as4user, + ls_dd01v-as4date, + ls_dd01v-as4time. + + io_xml->add( iv_name = 'DD01V' + ig_data = ls_dd01v ). + io_xml->add( iv_name = 'DD07V_TAB' + ig_data = lt_dd07v ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + +* package SEDD +* package SDIC + +* fm TR_TADIR_INTERFACE +* fm RS_CORR_INSERT ? + + DATA: ls_dd01v TYPE dd01v, + lv_name TYPE ddobjname, + lt_dd07v TYPE TABLE OF dd07v. + + + io_xml->read( EXPORTING iv_name = 'DD01V' + CHANGING cg_data = ls_dd01v ). + io_xml->read( EXPORTING iv_name = 'DD07V_TAB' + CHANGING cg_data = lt_dd07v ). + + corr_insert( iv_package ). + + lv_name = ms_item-obj_name. " type conversion + + CALL FUNCTION 'DDIF_DOMA_PUT' + EXPORTING + name = lv_name + dd01v_wa = ls_dd01v + TABLES + dd07v_tab = lt_dd07v + EXCEPTIONS + doma_not_found = 1 + name_inconsistent = 2 + doma_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from DDIF_DOMA_PUT'. + ENDIF. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + +ENDCLASS. "lcl_object_doma IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_doma.prog.xml b/src/zabapgit_object_doma.prog.xml new file mode 100644 index 000000000..fe2045f3b --- /dev/null +++ b/src/zabapgit_object_doma.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_DOMA + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_DOMA + 28 + + + + + + diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap new file mode 100644 index 000000000..b732f6ef3 --- /dev/null +++ b/src/zabapgit_object_dtel.prog.abap @@ -0,0 +1,144 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_DTEL +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_dtel DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_dtel DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_dtel IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_dtel IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_rollname TYPE dd04l-rollname. + + + SELECT SINGLE rollname FROM dd04l INTO lv_rollname + WHERE rollname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + jump_se11( iv_radio = 'RSRD1-DDTYPE' + iv_field = 'RSRD1-DDTYPE_VAL' ). + + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_objname TYPE rsedd0-ddobjname. + + + lv_objname = ms_item-obj_name. + + CALL FUNCTION 'RS_DD_DELETE_OBJ' + EXPORTING + no_ask = abap_true + objname = lv_objname + objtype = 'E' + EXCEPTIONS + not_executed = 1 + object_not_found = 2 + object_not_specified = 3 + permission_failure = 4. + IF sy-subrc <> 0. + _raise 'error from RS_DD_DELETE_OBJ, DTEL'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. + + DATA: lv_name TYPE ddobjname, + ls_dd04v TYPE dd04v, + ls_tpara TYPE tpara. + + + lv_name = ms_item-obj_name. + + CALL FUNCTION 'DDIF_DTEL_GET' + EXPORTING + name = lv_name + langu = mv_language + IMPORTING + dd04v_wa = ls_dd04v + tpara_wa = ls_tpara + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'Error from DDIF_DTEL_GET'. + ENDIF. + IF ls_dd04v IS INITIAL. + RETURN. " does not exist + ENDIF. + + CLEAR: ls_dd04v-as4user, + ls_dd04v-as4date, + ls_dd04v-as4time. + + io_xml->add( iv_name = 'DD04V' + ig_data = ls_dd04v ). + io_xml->add( iv_name = 'TPARA' + ig_data = ls_tpara ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: ls_dd04v TYPE dd04v, + lv_name TYPE ddobjname, + ls_tpara TYPE tpara. + + + io_xml->read( EXPORTING iv_name = 'DD04V' + CHANGING cg_data = ls_dd04v ). + io_xml->read( EXPORTING iv_name = 'TPARA' + CHANGING cg_data = ls_tpara ). + + corr_insert( iv_package ). + + lv_name = ms_item-obj_name. " type conversion + + CALL FUNCTION 'DDIF_DTEL_PUT' + EXPORTING + name = lv_name + dd04v_wa = ls_dd04v + EXCEPTIONS + dtel_not_found = 1 + name_inconsistent = 2 + dtel_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from DDIF_DTEL_PUT'. + ENDIF. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + +ENDCLASS. "lcl_object_dtel IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_dtel.prog.xml b/src/zabapgit_object_dtel.prog.xml new file mode 100644 index 000000000..f27be3dc9 --- /dev/null +++ b/src/zabapgit_object_dtel.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_DTEL + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_DTEL + 28 + + + + + + diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap new file mode 100644 index 000000000..1674f5f2d --- /dev/null +++ b/src/zabapgit_object_enho.prog.abap @@ -0,0 +1,333 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_ENHO +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_enho DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL. +* For complete list of tool_type - see ENHTOOLS table + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS deserialize_badi + IMPORTING io_xml TYPE REF TO lcl_xml_input + iv_package TYPE devclass + RAISING lcx_exception. + METHODS deserialize_hook + IMPORTING io_xml TYPE REF TO lcl_xml_input + iv_package TYPE devclass + RAISING lcx_exception. + + METHODS serialize_badi + IMPORTING io_xml TYPE REF TO lcl_xml_output + iv_tool TYPE enhtooltype + ii_enh_tool TYPE REF TO if_enh_tool + RAISING lcx_exception. + METHODS serialize_hook + IMPORTING io_xml TYPE REF TO lcl_xml_output + iv_tool TYPE enhtooltype + ii_enh_tool TYPE REF TO if_enh_tool + RAISING lcx_exception. + +ENDCLASS. "lcl_object_enho DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_enho IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_enho IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: ls_tadir TYPE tadir. + +* todo, it should look up in the ENHO database tables or call some methods +* to see if the object exists, looking in TADIR will not work + ls_tadir = lcl_tadir=>read_single( + iv_object = ms_item-obj_type + iv_obj_name = ms_item-obj_name ). + IF ls_tadir IS NOT INITIAL. + rv_bool = abap_true. + ENDIF. + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: lv_enh_id TYPE enhname, + lv_tool TYPE enhtooltype, + li_enh_tool TYPE REF TO if_enh_tool. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + lv_enh_id = ms_item-obj_name. + TRY. + li_enh_tool = cl_enh_factory=>get_enhancement( lv_enh_id ). + CATCH cx_enh_root. + _raise 'Error from CL_ENH_FACTORY'. + ENDTRY. + lv_tool = li_enh_tool->get_tool( ). + + CASE lv_tool. + WHEN cl_enh_tool_badi_impl=>tooltype. + serialize_badi( io_xml = io_xml + iv_tool = lv_tool + ii_enh_tool = li_enh_tool ). + WHEN cl_enh_tool_hook_impl=>tooltype. + serialize_hook( io_xml = io_xml + iv_tool = lv_tool + ii_enh_tool = li_enh_tool ). +* ToDo: +* WHEN cl_enh_tool_class=>tooltype. +* WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr +* WHEN cl_enh_tool_intf=>tooltype. +* WHEN cl_wdr_cfg_enhancement=>tooltype. +* WHEN 'ENHWDYN'. "cl_enh_tool_wdy + WHEN OTHERS. + _raise 'Unsupported ENHO type'. + ENDCASE. + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_tool TYPE enhtooltype. + + IF lif_object~exists( ) = abap_true. + lif_object~delete( ). + ENDIF. + + io_xml->read( EXPORTING iv_name = 'TOOL' + CHANGING cg_data = lv_tool ). + + CASE lv_tool. + WHEN cl_enh_tool_badi_impl=>tooltype. + deserialize_badi( io_xml = io_xml + iv_package = iv_package ). + WHEN cl_enh_tool_hook_impl=>tooltype. + deserialize_hook( io_xml = io_xml + iv_package = iv_package ). +* ToDo: +* WHEN cl_enh_tool_class=>tooltype. +* WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr +* WHEN cl_enh_tool_intf=>tooltype. +* WHEN cl_wdr_cfg_enhancement=>tooltype. +* WHEN 'ENHWDYN'. "cl_enh_tool_wdy + WHEN OTHERS. + _raise 'Unsupported ENHO type'. + ENDCASE. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + + METHOD deserialize_badi. + + DATA: lv_spot_name TYPE enhspotname, + lv_shorttext TYPE string, + lv_enhname TYPE enhname, + lo_badi TYPE REF TO cl_enh_tool_badi_impl, + li_tool TYPE REF TO if_enh_tool, + lv_package TYPE devclass, + lt_impl TYPE enh_badi_impl_data_it. + + FIELD-SYMBOLS: LIKE LINE OF lt_impl. + + + io_xml->read( EXPORTING iv_name = 'SHORTTEXT' + CHANGING cg_data = lv_shorttext ). + io_xml->read( EXPORTING iv_name = 'SPOT_NAME' + CHANGING cg_data = lv_spot_name ). + io_xml->read( EXPORTING iv_name = 'IMPL' + CHANGING cg_data = lt_impl ). + + lv_enhname = ms_item-obj_name. + lv_package = iv_package. + TRY. + cl_enh_factory=>create_enhancement( + EXPORTING + enhname = lv_enhname + enhtype = cl_abstract_enh_tool_redef=>credefinition + enhtooltype = cl_enh_tool_badi_impl=>tooltype + IMPORTING + enhancement = li_tool + CHANGING + devclass = lv_package ). + lo_badi ?= li_tool. + + lo_badi->set_spot_name( lv_spot_name ). + lo_badi->if_enh_object_docu~set_shorttext( lv_shorttext ). + LOOP AT lt_impl ASSIGNING . + lo_badi->add_implementation( ). + ENDLOOP. + lo_badi->if_enh_object~save( ). + lo_badi->if_enh_object~unlock( ). + CATCH cx_enh_root. + _raise 'error deserializing ENHO badi'. + ENDTRY. + + ENDMETHOD. "deserialize_badi + + METHOD deserialize_hook. + + DATA: lv_shorttext TYPE string, + lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl, + li_tool TYPE REF TO if_enh_tool, + lv_enhname TYPE enhname, + lv_package TYPE devclass, + ls_original_object TYPE enh_hook_admin, + lt_enhancements TYPE enh_hook_impl_it. + + FIELD-SYMBOLS: LIKE LINE OF lt_enhancements. + + + io_xml->read( EXPORTING iv_name = 'SHORTTEXT' + CHANGING cg_data = lv_shorttext ). + io_xml->read( EXPORTING iv_name = 'ORIGINAL_OBJECT' + CHANGING cg_data = ls_original_object ). + io_xml->read( EXPORTING iv_name = 'ENHANCEMENTS' + CHANGING cg_data = lt_enhancements ). + + lv_enhname = ms_item-obj_name. + lv_package = iv_package. + TRY. + cl_enh_factory=>create_enhancement( + EXPORTING + enhname = lv_enhname + enhtype = cl_abstract_enh_tool_redef=>credefinition + enhtooltype = cl_enh_tool_hook_impl=>tooltype + IMPORTING + enhancement = li_tool + CHANGING + devclass = lv_package ). + lo_hook_impl ?= li_tool. + + lo_hook_impl->if_enh_object_docu~set_shorttext( lv_shorttext ). + lo_hook_impl->set_original_object( + pgmid = ls_original_object-pgmid + obj_name = ls_original_object-org_obj_name + obj_type = ls_original_object-org_obj_type + program = ls_original_object-programname + main_type = ls_original_object-org_main_type + main_name = ls_original_object-org_main_name ). + lo_hook_impl->set_include_bound( ls_original_object-include_bound ). + + LOOP AT lt_enhancements ASSIGNING . + lo_hook_impl->add_hook_impl( + overwrite = -overwrite + method = -method + enhmode = -enhmode + full_name = -full_name + source = -source + spot = -spotname + parent_full_name = -parent_full_name ). + ENDLOOP. + lo_hook_impl->if_enh_object~save( ). + lo_hook_impl->if_enh_object~unlock( ). + CATCH cx_enh_root. + _raise 'error deserializing ENHO hook'. + ENDTRY. + + ENDMETHOD. "deserialize_hook + + METHOD serialize_badi. + + DATA: lo_badi_impl TYPE REF TO cl_enh_tool_badi_impl, + lv_spot_name TYPE enhspotname, + lv_shorttext TYPE string, + lt_impl TYPE enh_badi_impl_data_it. + + lo_badi_impl ?= ii_enh_tool. + + lv_shorttext = lo_badi_impl->if_enh_object_docu~get_shorttext( ). + lv_spot_name = lo_badi_impl->get_spot_name( ). + lt_impl = lo_badi_impl->get_implementations( ). + + io_xml->add( iv_name = 'TOOL' + ig_data = iv_tool ). + io_xml->add( ig_data = lv_shorttext + iv_name = 'SHORTTEXT' ). + io_xml->add( iv_name = 'SPOT_NAME' + ig_data = lv_spot_name ). + io_xml->add( iv_name = 'IMPL' + ig_data = lt_impl ). + + ENDMETHOD. "serialize_badi + + METHOD serialize_hook. + + DATA: lv_shorttext TYPE string, + lo_hook_impl TYPE REF TO cl_enh_tool_hook_impl, + ls_original_object TYPE enh_hook_admin, + lt_enhancements TYPE enh_hook_impl_it. + + + lo_hook_impl ?= ii_enh_tool. + + lv_shorttext = lo_hook_impl->if_enh_object_docu~get_shorttext( ). + lo_hook_impl->get_original_object( + IMPORTING + pgmid = ls_original_object-pgmid + obj_name = ls_original_object-org_obj_name + obj_type = ls_original_object-org_obj_type + main_type = ls_original_object-org_main_type + main_name = ls_original_object-org_main_name + program = ls_original_object-programname ). + ls_original_object-include_bound = lo_hook_impl->get_include_bound( ). + lt_enhancements = lo_hook_impl->get_hook_impls( ). + + io_xml->add( iv_name = 'TOOL' + ig_data = iv_tool ). + io_xml->add( ig_data = lv_shorttext + iv_name = 'SHORTTEXT' ). + io_xml->add( ig_data = ls_original_object + iv_name = 'ORIGINAL_OBJECT' ). + io_xml->add( iv_name = 'ENHANCEMENTS' + ig_data = lt_enhancements ). + + ENDMETHOD. "serialize_hook + + METHOD lif_object~delete. + + DATA: lv_enh_id TYPE enhname, + li_enh_object TYPE REF TO if_enh_object. + + + lv_enh_id = ms_item-obj_name. + TRY. + li_enh_object = cl_enh_factory=>get_enhancement( + enhancement_id = lv_enh_id + lock = abap_true ). + li_enh_object->delete( ). + li_enh_object->save( ). + li_enh_object->unlock( ). + CATCH cx_enh_root. + _raise 'Error deleting ENHO'. + ENDTRY. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = 'ENHO' + in_new_window = abap_true. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_enho IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_enho.prog.xml b/src/zabapgit_object_enho.prog.xml new file mode 100644 index 000000000..5e8fde11e --- /dev/null +++ b/src/zabapgit_object_enho.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_ENHO + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_ENHO + 28 + + + + + + diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap new file mode 100644 index 000000000..748edfbc3 --- /dev/null +++ b/src/zabapgit_object_enhs.prog.abap @@ -0,0 +1,186 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_ENHS +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_enhs DEFINITION +*----------------------------------------------------------------------* +CLASS lcl_object_enhs DEFINITION INHERITING FROM lcl_objects_super FINAL. + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_enhs + +*----------------------------------------------------------------------* +* CLASS lcl_object_enhs IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_object_enhs IMPLEMENTATION. + + METHOD lif_object~deserialize. + DATA: lv_message TYPE string, + lv_parent TYPE enhspotcompositename, + lv_spot_name TYPE enhspotname, + lv_enh_shtext TYPE string, + ls_enh_badi TYPE enh_badi_data, + lt_enh_badi TYPE enh_badi_data_it, + lx_root TYPE REF TO cx_root, + lv_package LIKE iv_package, + li_spot_ref TYPE REF TO if_enh_spot_tool, + lo_badidef_tool TYPE REF TO cl_enh_tool_badi_def. + + + lv_spot_name = ms_item-obj_name. + + io_xml->read( EXPORTING iv_name = 'PARENT_COMP' + CHANGING cg_data = lv_parent ). + io_xml->read( EXPORTING iv_name = 'SHORTTEXT' + CHANGING cg_data = lv_enh_shtext ). + io_xml->read( EXPORTING iv_name = 'BADI_DATA' + CHANGING cg_data = lt_enh_badi ). + + IF lif_object~exists( ) = abap_true. + lif_object~delete( ). + ENDIF. + + lv_package = iv_package. + + TRY. + cl_enh_factory=>create_enhancement_spot( + EXPORTING + spot_name = lv_spot_name + tooltype = cl_enh_tool_badi_def=>tooltype + dark = abap_true + compositename = lv_parent + IMPORTING + spot = li_spot_ref + CHANGING + devclass = lv_package ). + + lo_badidef_tool ?= li_spot_ref. + + lo_badidef_tool->if_enh_object_docu~set_shorttext( lv_enh_shtext ). + + LOOP AT lt_enh_badi INTO ls_enh_badi. + lo_badidef_tool->add_badi_def( ls_enh_badi ). + ENDLOOP. + + lo_badidef_tool->if_enh_object~save( ). + lo_badidef_tool->if_enh_object~activate( ). + lo_badidef_tool->if_enh_object~unlock( ). + + CATCH cx_enh_root INTO lx_root. + lv_message = `Error occured while deserializing EHNS: ` + && lx_root->get_text( ) ##NO_TEXT. + _raise lv_message. + ENDTRY. + + ENDMETHOD. "deserialize + + METHOD lif_object~serialize. + DATA: lv_message TYPE string, + lv_spot_name TYPE enhspotname, + lv_enh_shtext TYPE string, + lv_parent TYPE enhspotcompositename, + lt_enh_badi TYPE enh_badi_data_it, + lx_root TYPE REF TO cx_root, + li_spot_ref TYPE REF TO if_enh_spot_tool, + lo_badidef_tool TYPE REF TO cl_enh_tool_badi_def. + + lv_spot_name = ms_item-obj_name. + + TRY. + li_spot_ref = cl_enh_factory=>get_enhancement_spot( lv_spot_name ). + + lo_badidef_tool ?= li_spot_ref. + + lv_enh_shtext = lo_badidef_tool->if_enh_object_docu~get_shorttext( ). + + "get parent = composite enhs (ENHC) + lv_parent = cl_r3standard_persistence=>enh_find_parent_composite( lv_spot_name ). + "get subsequent BADI definitions + lt_enh_badi = lo_badidef_tool->get_badi_defs( ). + + io_xml->add( ig_data = lv_parent + iv_name = 'PARENT_COMP' ). + io_xml->add( ig_data = lv_enh_shtext + iv_name = 'SHORTTEXT' ). + io_xml->add( ig_data = lt_enh_badi + iv_name = 'BADI_DATA' ). + + CATCH cx_enh_root INTO lx_root. + lv_message = `Error occured while serializing EHNS: ` + && lx_root->get_text( ) ##NO_TEXT. + _raise lv_message. + ENDTRY. + + ENDMETHOD. "serialize + + METHOD lif_object~exists. + + DATA: lv_spot_name TYPE enhspotname, + li_spot_ref TYPE REF TO if_enh_spot_tool. + + + lv_spot_name = ms_item-obj_name. + + TRY. + li_spot_ref = cl_enh_factory=>get_enhancement_spot( lv_spot_name ). + +* Check that is is realy a BAdI + IF li_spot_ref->get_tool( ) = cl_enh_tool_badi_def=>tooltype. + rv_bool = abap_true. + ELSE. + rv_bool = abap_false. + ENDIF. + CATCH cx_enh_root. + rv_bool = abap_false. + ENDTRY. + + ENDMETHOD. "exists + + METHOD lif_object~delete. + DATA: lv_spot_name TYPE enhspotname, + lv_message TYPE string, + lx_root TYPE REF TO cx_root, + li_spot_ref TYPE REF TO if_enh_spot_tool, + lo_badidef_tool TYPE REF TO cl_enh_tool_badi_def. + + lv_spot_name = ms_item-obj_name. + + TRY. + li_spot_ref = cl_enh_factory=>get_enhancement_spot( + spot_name = lv_spot_name + lock = 'X' ). + + IF li_spot_ref IS BOUND. + lo_badidef_tool ?= li_spot_ref. + lo_badidef_tool->if_enh_object~delete( + nevertheless_delete = 'X' + run_dark = 'X' ). + ENDIF. + lo_badidef_tool->if_enh_object~unlock( ). + CATCH cx_enh_root INTO lx_root. + lv_message = `Error occured while deleting EHNS: ` + && lx_root->get_text( ) ##NO_TEXT. + _raise lv_message. + ENDTRY. + + ENDMETHOD. "delete + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "get_metadata + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = 'ENHS' + in_new_window = abap_true. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_enhs \ No newline at end of file diff --git a/src/zabapgit_object_enhs.prog.xml b/src/zabapgit_object_enhs.prog.xml new file mode 100644 index 000000000..aba2f76bd --- /dev/null +++ b/src/zabapgit_object_enhs.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_ENHS + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_ENHS + 28 + + + + + + diff --git a/src/zabapgit_object_enqu.prog.abap b/src/zabapgit_object_enqu.prog.abap new file mode 100644 index 000000000..f141852d6 --- /dev/null +++ b/src/zabapgit_object_enqu.prog.abap @@ -0,0 +1,156 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_ENUQ +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_enqu DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_enqu DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_dtel IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_enqu IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_viewname TYPE dd25l-viewname. + + + SELECT SINGLE viewname FROM dd25l INTO lv_viewname + WHERE viewname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + jump_se11( iv_radio = 'RSRD1-ENQU' + iv_field = 'RSRD1-ENQU_VAL' ). + + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_objname TYPE rsedd0-ddobjname. + + + lv_objname = ms_item-obj_name. + + CALL FUNCTION 'RS_DD_DELETE_OBJ' + EXPORTING + no_ask = abap_true + objname = lv_objname + objtype = 'L' + EXCEPTIONS + not_executed = 1 + object_not_found = 2 + object_not_specified = 3 + permission_failure = 4. + IF sy-subrc <> 0. + _raise 'error from RS_DD_DELETE_OBJ, ENQU'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. + + DATA: lv_name TYPE ddobjname, + ls_dd25v TYPE dd25v, + lt_dd26e TYPE TABLE OF dd26e, + lt_dd27p TYPE TABLE OF dd27p. + + + lv_name = ms_item-obj_name. + + CALL FUNCTION 'DDIF_ENQU_GET' + EXPORTING + name = lv_name + state = 'A' + langu = mv_language + IMPORTING + dd25v_wa = ls_dd25v + TABLES + dd26e_tab = lt_dd26e + dd27p_tab = lt_dd27p + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error from DDIF_ENQU_GET'. + ENDIF. + IF ls_dd25v IS INITIAL. + RETURN. " does not exist in system + ENDIF. + + CLEAR: ls_dd25v-as4user, + ls_dd25v-as4date, + ls_dd25v-as4time. + + io_xml->add( iv_name = 'DD25V' + ig_data = ls_dd25v ). + io_xml->add( ig_data = lt_dd26e + iv_name = 'DD26E_TABLE' ). + io_xml->add( ig_data = lt_dd27p + iv_name = 'DD27P_TABLE' ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_name TYPE ddobjname, + ls_dd25v TYPE dd25v, + lt_dd26e TYPE TABLE OF dd26e, + lt_dd27p TYPE TABLE OF dd27p. + + + io_xml->read( EXPORTING iv_name = 'DD25V' + CHANGING cg_data = ls_dd25v ). + io_xml->read( EXPORTING iv_name = 'DD26E_TABLE' + CHANGING cg_data = lt_dd26e ). + io_xml->read( EXPORTING iv_name = 'DD27P_TABLE' + CHANGING cg_data = lt_dd27p ). + + corr_insert( iv_package ). + + lv_name = ms_item-obj_name. + + CALL FUNCTION 'DDIF_ENQU_PUT' + EXPORTING + name = lv_name + dd25v_wa = ls_dd25v + TABLES + dd26e_tab = lt_dd26e + dd27p_tab = lt_dd27p + EXCEPTIONS + enqu_not_found = 1 + name_inconsistent = 2 + enqu_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from DDIF_ENQU_PUT'. + ENDIF. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + +ENDCLASS. "lcl_object_enqu IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_enqu.prog.xml b/src/zabapgit_object_enqu.prog.xml new file mode 100644 index 000000000..e0d56b064 --- /dev/null +++ b/src/zabapgit_object_enqu.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_ENQU + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + 750 + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_ENUQ + 28 + + + + + + diff --git a/src/zabapgit_object_ensc.prog.abap b/src/zabapgit_object_ensc.prog.abap new file mode 100644 index 000000000..f4185ef6e --- /dev/null +++ b/src/zabapgit_object_ensc.prog.abap @@ -0,0 +1,186 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_ENSC +*&---------------------------------------------------------------------* + +CLASS lcl_object_ensc DEFINITION INHERITING FROM lcl_objects_super FINAL. + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_ensc + +*----------------------------------------------------------------------* +* CLASS lcl_object_ensc IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_object_ensc IMPLEMENTATION. + + METHOD lif_object~deserialize. + + DATA: lv_spot_name TYPE enhspotcompositename, + lv_message TYPE string, + lv_enh_shtext TYPE string, + lv_enh_spot TYPE enhspotname, + lt_enh_spots TYPE enhspotname_it, + lt_comp_spots TYPE enhspotname_it, + lx_root TYPE REF TO cx_root, + lv_package LIKE iv_package, + li_spot_ref TYPE REF TO if_enh_spot_composite, + lo_spot_ref TYPE REF TO cl_enh_spot_composite. + + + lv_spot_name = ms_item-obj_name. + + io_xml->read( EXPORTING iv_name = 'SHORTTEXT' + CHANGING cg_data = lv_enh_shtext ). + io_xml->read( EXPORTING iv_name = 'ENH_SPOTS' "Enhancement spots + CHANGING cg_data = lt_enh_spots ). + io_xml->read( EXPORTING iv_name = 'COMP_ENH_SPOTS' "Composite enhancement spots + CHANGING cg_data = lt_comp_spots ). + + IF lif_object~exists( ) = abap_true. + lif_object~delete( ). + ENDIF. + + lv_package = iv_package. + + TRY. + cl_enh_factory=>create_enhancement_spot_comp( + EXPORTING + name = lv_spot_name + run_dark = abap_true + IMPORTING + composite = li_spot_ref + CHANGING + devclass = lv_package ). + + lo_spot_ref ?= li_spot_ref. + + lo_spot_ref->if_enh_object_docu~set_shorttext( lv_enh_shtext ). + "Add subsequent enhancement spots + LOOP AT lt_enh_spots INTO lv_enh_spot. + lo_spot_ref->if_enh_spot_composite~add_enh_spot_child( lv_enh_spot ). + ENDLOOP. + "Add subsequent composite enhancement spots + LOOP AT lt_comp_spots INTO lv_enh_spot. + lo_spot_ref->if_enh_spot_composite~add_composite_child( lv_enh_spot ). + ENDLOOP. + + lo_spot_ref->if_enh_object~save( ). + lo_spot_ref->if_enh_object~activate( ). + lo_spot_ref->if_enh_object~unlock( ). + + CATCH cx_enh_root INTO lx_root. + lv_message = `Error occured while deserializing ENSC: ` + && lx_root->get_text( ) ##NO_TEXT. + _raise lv_message. + ENDTRY. + + ENDMETHOD. "deserialize + + METHOD lif_object~serialize. + + DATA: lv_spot_name TYPE enhspotcompositename, + lv_message TYPE string, + lv_enh_shtext TYPE string, + lv_parent TYPE enhspotcompositename, + lt_enh_spots TYPE enhspotname_it, + lt_comp_spots TYPE enhspotname_it, + lx_root TYPE REF TO cx_root, + li_spot_ref TYPE REF TO if_enh_spot_composite, + lo_spot_ref TYPE REF TO cl_enh_spot_composite. + + + lv_spot_name = ms_item-obj_name. + + TRY. + li_spot_ref = cl_enh_factory=>get_enhancement_spot_comp( + lock = '' + name = lv_spot_name ). + + lo_spot_ref ?= li_spot_ref. + + lv_enh_shtext = li_spot_ref->if_enh_object_docu~get_shorttext( ). + "find parent = composite enhancement (ENSC) + lv_parent = cl_r3standard_persistence=>enh_find_parent_composite( lv_spot_name ). + "find subsequent enhancement spots + lt_enh_spots = lo_spot_ref->if_enh_spot_composite~get_enh_spot_childs( ). + "find subsequent composite enhancement spots + lt_comp_spots = lo_spot_ref->if_enh_spot_composite~get_composite_childs( ). + + io_xml->add( ig_data = lv_enh_shtext + iv_name = 'SHORTTEXT' ). + io_xml->add( ig_data = lt_enh_spots + iv_name = 'ENH_SPOTS' ). "Enhancement spots + io_xml->add( ig_data = lt_comp_spots + iv_name = 'COMP_ENH_SPOTS' ). "Composite enhancement spots + + CATCH cx_enh_root INTO lx_root. + lv_message = `Error occured while serializing ENSC: ` + && lx_root->get_text( ) ##NO_TEXT. + _raise lv_message. + ENDTRY. + + ENDMETHOD. "serialize + + METHOD lif_object~exists. + + DATA: lv_spot_name TYPE enhspotcompositename, + li_spot_ref TYPE REF TO if_enh_spot_composite. + + + lv_spot_name = ms_item-obj_name. + + TRY. + li_spot_ref = cl_enh_factory=>get_enhancement_spot_comp( + lock = '' + name = lv_spot_name ). + rv_bool = abap_true. + CATCH cx_enh_root. + rv_bool = abap_false. + ENDTRY. + + ENDMETHOD. "exists + + METHOD lif_object~delete. + DATA: lv_spot_name TYPE enhspotcompositename, + lv_message TYPE string, + lx_root TYPE REF TO cx_root, + li_spot_ref TYPE REF TO if_enh_spot_composite. + + lv_spot_name = ms_item-obj_name. + + TRY. + li_spot_ref = cl_enh_factory=>get_enhancement_spot_comp( + lock = 'X' + name = lv_spot_name ). + + IF li_spot_ref IS BOUND. + li_spot_ref->if_enh_object~delete( + nevertheless_delete = 'X' + run_dark = 'X' ). + ENDIF. + li_spot_ref->if_enh_object~unlock( ). + CATCH cx_enh_root INTO lx_root. + lv_message = `Error occured while deleting ENSC: ` + && lx_root->get_text( ) ##NO_TEXT. + _raise lv_message. + ENDTRY. + + ENDMETHOD. "delete + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "get_metadata + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = 'ENSC' + in_new_window = abap_true. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_ensc \ No newline at end of file diff --git a/src/zabapgit_object_ensc.prog.xml b/src/zabapgit_object_ensc.prog.xml new file mode 100644 index 000000000..24fe588db --- /dev/null +++ b/src/zabapgit_object_ensc.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_ENSC + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_ENSC + 28 + + + + + + diff --git a/src/zabapgit_object_iarp.prog.abap b/src/zabapgit_object_iarp.prog.abap new file mode 100644 index 000000000..a5ef73ef5 --- /dev/null +++ b/src/zabapgit_object_iarp.prog.abap @@ -0,0 +1,183 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_IARP +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_iarp DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_iarp DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS: + read + EXPORTING es_attr TYPE w3resoattr + et_parameters TYPE w3resopara_tabletype + RAISING lcx_exception, + save + IMPORTING is_attr TYPE w3resoattr + it_parameters TYPE w3resopara_tabletype + RAISING lcx_exception. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_iarp IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_iarp IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD read. + + DATA: li_resource TYPE REF TO if_w3_api_resource, + ls_name TYPE w3resokey. + + + ls_name = ms_item-obj_name. + + cl_w3_api_resource=>if_w3_api_resource~load( + EXPORTING + p_resource_name = ls_name + IMPORTING + p_resource = li_resource + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + _raise 'error from w3api_resource~load'. + ENDIF. + + li_resource->get_attributes( IMPORTING p_attributes = es_attr ). + + CLEAR: es_attr-chname, + es_attr-tdate, + es_attr-ttime, + es_attr-devclass. + + li_resource->get_parameters( IMPORTING p_parameters = et_parameters ). + + ENDMETHOD. "read + + METHOD lif_object~serialize. + + DATA: ls_attr TYPE w3resoattr, + lt_parameters TYPE w3resopara_tabletype. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + read( IMPORTING es_attr = ls_attr + et_parameters = lt_parameters ). + + io_xml->add( iv_name = 'ATTR' + ig_data = ls_attr ). + io_xml->add( iv_name = 'PARAMETERS' + ig_data = lt_parameters ). + + ENDMETHOD. "lif_object~serialize + + METHOD save. + + DATA: li_resource TYPE REF TO if_w3_api_resource. + + + cl_w3_api_resource=>if_w3_api_resource~create_new( + EXPORTING p_resource_data = is_attr + IMPORTING p_resource = li_resource ). + + li_resource->set_attributes( is_attr ). + li_resource->set_parameters( it_parameters ). + + li_resource->if_w3_api_object~save( ). + + ENDMETHOD. "save + + METHOD lif_object~deserialize. + + DATA: ls_attr TYPE w3resoattr, + lt_parameters TYPE w3resopara_tabletype. + + + io_xml->read( EXPORTING iv_name = 'ATTR' + CHANGING cg_data = ls_attr ). + io_xml->read( EXPORTING iv_name = 'PARAMETERS' + CHANGING cg_data = lt_parameters ). + + ls_attr-devclass = iv_package. + save( is_attr = ls_attr + it_parameters = lt_parameters ). + + ENDMETHOD. "lif_object~deserialize + + METHOD lif_object~delete. + + DATA: li_resource TYPE REF TO if_w3_api_resource, + ls_name TYPE w3resokey. + + + ls_name = ms_item-obj_name. + + cl_w3_api_resource=>if_w3_api_resource~load( + EXPORTING + p_resource_name = ls_name + IMPORTING + p_resource = li_resource + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + _raise 'error from if_w3_api_resource~load'. + ENDIF. + + li_resource->if_w3_api_object~set_changeable( abap_true ). + li_resource->if_w3_api_object~delete( ). + li_resource->if_w3_api_object~save( ). + + ENDMETHOD. "lif_object~delete + + METHOD lif_object~exists. + + DATA: ls_name TYPE w3resokey. + + + ls_name = ms_item-obj_name. + + cl_w3_api_resource=>if_w3_api_resource~load( + EXPORTING + p_resource_name = ls_name + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc = 1. + rv_bool = abap_false. + ELSEIF sy-subrc <> 0. + _raise 'error from w3_api_resource~load'. + ELSE. + rv_bool = abap_true. + ENDIF. + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + _raise 'todo, IARP, jump'. + ENDMETHOD. "lif_object~jump + +ENDCLASS. "lcl_object_iarp IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_iarp.prog.xml b/src/zabapgit_object_iarp.prog.xml new file mode 100644 index 000000000..46b112ef2 --- /dev/null +++ b/src/zabapgit_object_iarp.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_IARP + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_IARP + 28 + + + + + + diff --git a/src/zabapgit_object_iasp.prog.abap b/src/zabapgit_object_iasp.prog.abap new file mode 100644 index 000000000..6f23cf121 --- /dev/null +++ b/src/zabapgit_object_iasp.prog.abap @@ -0,0 +1,183 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_IASP +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_iasp DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_iasp DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS: + read + EXPORTING es_attr TYPE w3servattr + et_parameters TYPE w3servpara_tabletype + RAISING lcx_exception, + save + IMPORTING is_attr TYPE w3servattr + it_parameters TYPE w3servpara_tabletype + RAISING lcx_exception. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_iasp IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_iasp IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD read. + + DATA: li_service TYPE REF TO if_w3_api_service, + lv_name TYPE itsappl. + + + lv_name = ms_item-obj_name. + + cl_w3_api_service=>if_w3_api_service~load( + EXPORTING + p_service_name = lv_name + IMPORTING + p_service = li_service + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + _raise 'error from w3api_service~load'. + ENDIF. + + li_service->get_attributes( IMPORTING p_attributes = es_attr ). + + CLEAR: es_attr-chname, + es_attr-tdate, + es_attr-ttime, + es_attr-devclass. + + li_service->get_parameters( IMPORTING p_parameters = et_parameters ). + + ENDMETHOD. "read + + METHOD lif_object~serialize. + + DATA: ls_attr TYPE w3servattr, + lt_parameters TYPE w3servpara_tabletype. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + read( IMPORTING es_attr = ls_attr + et_parameters = lt_parameters ). + + io_xml->add( iv_name = 'ATTR' + ig_data = ls_attr ). + io_xml->add( iv_name = 'PARAMETERS' + ig_data = lt_parameters ). + + ENDMETHOD. "lif_object~serialize + + METHOD save. + + DATA: li_service TYPE REF TO if_w3_api_service. + + + cl_w3_api_service=>if_w3_api_service~create_new( + EXPORTING p_service_data = is_attr + IMPORTING p_service = li_service ). + + li_service->set_attributes( is_attr ). + li_service->set_parameters( it_parameters ). + + li_service->if_w3_api_object~save( ). + + ENDMETHOD. "save + + METHOD lif_object~deserialize. + + DATA: ls_attr TYPE w3servattr, + lt_parameters TYPE w3servpara_tabletype. + + + io_xml->read( EXPORTING iv_name = 'ATTR' + CHANGING cg_data = ls_attr ). + io_xml->read( EXPORTING iv_name = 'PARAMETERS' + CHANGING cg_data = lt_parameters ). + + ls_attr-devclass = iv_package. + save( is_attr = ls_attr + it_parameters = lt_parameters ). + + ENDMETHOD. "lif_object~deserialize + + METHOD lif_object~delete. + + DATA: li_service TYPE REF TO if_w3_api_service, + lv_name TYPE itsappl. + + + lv_name = ms_item-obj_name. + + cl_w3_api_service=>if_w3_api_service~load( + EXPORTING + p_service_name = lv_name + IMPORTING + p_service = li_service + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + _raise 'error from if_w3_api_service~load'. + ENDIF. + + li_service->if_w3_api_object~set_changeable( abap_true ). + li_service->if_w3_api_object~delete( ). + li_service->if_w3_api_object~save( ). + + ENDMETHOD. "lif_object~delete + + METHOD lif_object~exists. + + DATA: lv_name TYPE itsappl. + + + lv_name = ms_item-obj_name. + + cl_w3_api_service=>if_w3_api_service~load( + EXPORTING + p_service_name = lv_name + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc = 1. + rv_bool = abap_false. + ELSEIF sy-subrc <> 0. + _raise 'error from w3_api_service~load'. + ELSE. + rv_bool = abap_true. + ENDIF. + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + _raise 'todo, IASP, jump'. + ENDMETHOD. "lif_object~jump + +ENDCLASS. "lcl_object_iasp IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_iasp.prog.xml b/src/zabapgit_object_iasp.prog.xml new file mode 100644 index 000000000..6c4de26bb --- /dev/null +++ b/src/zabapgit_object_iasp.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_IASP + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_IASP + 28 + + + + + + diff --git a/src/zabapgit_object_iatu.prog.abap b/src/zabapgit_object_iatu.prog.abap new file mode 100644 index 000000000..bf58aef2c --- /dev/null +++ b/src/zabapgit_object_iatu.prog.abap @@ -0,0 +1,200 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_IATU +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_iatu DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_iatu DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS: + read + EXPORTING es_attr TYPE w3tempattr + ev_source TYPE string + RAISING lcx_exception, + save + IMPORTING is_attr TYPE w3tempattr + iv_source TYPE string + RAISING lcx_exception. + +ENDCLASS. "lcl_object_iatu DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_iatu IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_iatu IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD read. + + DATA: li_template TYPE REF TO if_w3_api_template, + lt_source TYPE w3htmltabtype, + ls_name TYPE iacikeyt. + + + ls_name = ms_item-obj_name. + + cl_w3_api_template=>if_w3_api_template~load( + EXPORTING + p_template_name = ls_name + IMPORTING + p_template = li_template + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + _raise 'error from w3api_template~load'. + ENDIF. + + li_template->get_attributes( IMPORTING p_attributes = es_attr ). + + CLEAR: es_attr-chname, + es_attr-tdate, + es_attr-ttime, + es_attr-devclass. + + li_template->get_source( IMPORTING p_source = lt_source ). + + CONCATENATE LINES OF lt_source INTO ev_source RESPECTING BLANKS. + + ENDMETHOD. "read + + METHOD lif_object~serialize. + + DATA: ls_attr TYPE w3tempattr, + lv_source TYPE string. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + read( IMPORTING es_attr = ls_attr + ev_source = lv_source ). + + io_xml->add( iv_name = 'ATTR' + ig_data = ls_attr ). + + mo_files->add_string( iv_ext = 'html' + iv_string = lv_source ) ##NO_TEXT. + + ENDMETHOD. "lif_object~serialize + + METHOD save. + + DATA: lt_source TYPE w3htmltabtype, + lv_source TYPE string, + li_template TYPE REF TO if_w3_api_template. + + + cl_w3_api_template=>if_w3_api_template~create_new( + EXPORTING p_template_data = is_attr + p_program_name = is_attr-programm + IMPORTING p_template = li_template ). + + li_template->set_attributes( is_attr ). + + lv_source = iv_source. + WHILE strlen( lv_source ) >= 255. + APPEND lv_source(255) TO lt_source. + lv_source = lv_source+255. + ENDWHILE. + IF NOT lv_source IS INITIAL. + APPEND lv_source TO lt_source. + ENDIF. + + li_template->set_source( lt_source ). + + li_template->if_w3_api_object~save( ). + + ENDMETHOD. "save + + METHOD lif_object~deserialize. + + DATA: ls_attr TYPE w3tempattr, + lv_source TYPE string. + + + io_xml->read( EXPORTING iv_name = 'ATTR' + CHANGING cg_data = ls_attr ). + + lv_source = mo_files->read_string( 'html' ) ##NO_TEXT. + + ls_attr-devclass = iv_package. + save( is_attr = ls_attr + iv_source = lv_source ). + + ENDMETHOD. "lif_object~deserialize + + METHOD lif_object~delete. + + DATA: li_template TYPE REF TO if_w3_api_template, + ls_name TYPE iacikeyt. + + + ls_name = ms_item-obj_name. + + cl_w3_api_template=>if_w3_api_template~load( + EXPORTING + p_template_name = ls_name + IMPORTING + p_template = li_template + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + _raise 'error from if_w3_api_template~load'. + ENDIF. + + li_template->if_w3_api_object~set_changeable( abap_true ). + li_template->if_w3_api_object~delete( ). + li_template->if_w3_api_object~save( ). + + ENDMETHOD. "lif_object~delete + + METHOD lif_object~exists. + + DATA: ls_name TYPE iacikeyt. + + + ls_name = ms_item-obj_name. + + cl_w3_api_template=>if_w3_api_template~load( + EXPORTING + p_template_name = ls_name + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 + OTHERS = 4 ). + IF sy-subrc = 1. + rv_bool = abap_false. + ELSEIF sy-subrc <> 0. + _raise 'error from w3_api_template~load'. + ELSE. + rv_bool = abap_true. + ENDIF. + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + _raise 'todo, IATU, jump'. + ENDMETHOD. "lif_object~jump + +ENDCLASS. "lcl_object_iatu IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_iatu.prog.xml b/src/zabapgit_object_iatu.prog.xml new file mode 100644 index 000000000..449360e3d --- /dev/null +++ b/src/zabapgit_object_iatu.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_IATU + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_IATU + 28 + + + + + + diff --git a/src/zabapgit_object_msag.prog.abap b/src/zabapgit_object_msag.prog.abap new file mode 100644 index 000000000..8c37aab9e --- /dev/null +++ b/src/zabapgit_object_msag.prog.abap @@ -0,0 +1,160 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_MSAG +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_msag DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_msag DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_msag DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_view IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_msag IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_arbgb TYPE t100a-arbgb. + + + SELECT SINGLE arbgb FROM t100a INTO lv_arbgb + WHERE arbgb = ms_item-obj_name. "#EC CI_GENBUFF + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = 'MSAG' + in_new_window = abap_true. + + ENDMETHOD. "jump + + METHOD lif_object~delete. + +* parameter SUPPRESS_DIALOG doesnt exist in all versions + CALL FUNCTION 'RS_DELETE_MESSAGE_ID' + EXPORTING + nachrichtenklasse = ms_item-obj_name + EXCEPTIONS + not_executed = 1 + not_found = 2 + no_permission = 3 + OTHERS = 4. + IF sy-subrc <> 0. + _raise 'Error from RS_DELETE_MESSAGE_ID'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~deserialize. +* fm RPY_MESSAGE_ID_INSERT almost works, but not in older versions + + DATA: ls_t100a TYPE t100a, + ls_t100t TYPE t100t, + ls_t100u TYPE t100u, + lt_t100 TYPE TABLE OF t100. + + FIELD-SYMBOLS: LIKE LINE OF lt_t100. + + + io_xml->read( EXPORTING iv_name = 'T100A' + CHANGING cg_data = ls_t100a ). + io_xml->read( EXPORTING iv_name = 'T100' + CHANGING cg_data = lt_t100 ). + + CALL FUNCTION 'RS_CORR_INSERT' + EXPORTING + global_lock = abap_true + devclass = iv_package + object = ls_t100a-arbgb + object_class = 'T100' + mode = 'INSERT' + EXCEPTIONS + cancelled = 01 + permission_failure = 02 + unknown_objectclass = 03. + IF sy-subrc <> 0. + _raise 'Error from RS_CORR_INSERT'. + ENDIF. + + LOOP AT lt_t100 ASSIGNING . + MODIFY t100 FROM . "#EC CI_SUBRC + ASSERT sy-subrc = 0. + + CLEAR ls_t100u. + MOVE-CORRESPONDING TO ls_t100u ##enh_ok. + ls_t100u-name = sy-uname. + ls_t100u-datum = sy-datum. + ls_t100u-selfdef = '3'. + MODIFY t100u FROM ls_t100u. "#EC CI_SUBRC + ASSERT sy-subrc = 0. + ENDLOOP. + + ls_t100a-masterlang = mv_language. + ls_t100a-lastuser = sy-uname. + ls_t100a-respuser = sy-uname. + ls_t100a-ldate = sy-datum. + ls_t100a-ltime = sy-uzeit. + MODIFY t100a FROM ls_t100a. "#EC CI_SUBRC + ASSERT sy-subrc = 0. + + ls_t100t-sprsl = mv_language. + ls_t100t-arbgb = ls_t100a-arbgb. + ls_t100t-stext = ls_t100a-stext. + MODIFY t100t FROM ls_t100t. "#EC CI_SUBRC + ASSERT sy-subrc = 0. + + ENDMETHOD. "deserialize + + METHOD lif_object~serialize. + + DATA: lv_msg_id TYPE rglif-message_id, + ls_inf TYPE t100a, + lt_source TYPE TABLE OF t100. + + + lv_msg_id = ms_item-obj_name. + + SELECT SINGLE * FROM t100a INTO ls_inf + WHERE arbgb = lv_msg_id. "#EC CI_GENBUFF + IF sy-subrc <> 0. + RETURN. + ENDIF. + CLEAR ls_inf-respuser. + + SELECT * FROM t100 INTO TABLE lt_source + WHERE sprsl = mv_language + AND arbgb = lv_msg_id + ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF + + CLEAR: ls_inf-lastuser, + ls_inf-ldate, + ls_inf-ltime. + + io_xml->add( iv_name = 'T100A' + ig_data = ls_inf ). + io_xml->add( ig_data = lt_source + iv_name = 'T100' ). + + ENDMETHOD. "serialize + +ENDCLASS. "lcl_object_msag IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_msag.prog.xml b/src/zabapgit_object_msag.prog.xml new file mode 100644 index 000000000..f2d00825d --- /dev/null +++ b/src/zabapgit_object_msag.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_MSAG + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_MSAG + 28 + + + + + + diff --git a/src/zabapgit_object_nrob.prog.abap b/src/zabapgit_object_nrob.prog.abap new file mode 100644 index 000000000..bd552bf0b --- /dev/null +++ b/src/zabapgit_object_nrob.prog.abap @@ -0,0 +1,157 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_NROB +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_nrob DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_nrob DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_nrob DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_nrob IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_nrob IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_object TYPE tnro-object. + + + SELECT SINGLE object FROM tnro INTO lv_object + WHERE object = ms_item-obj_name. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: lv_object TYPE tnro-object, + ls_attributes TYPE tnro, + ls_text TYPE tnrot. + + + lv_object = ms_item-obj_name. + + CALL FUNCTION 'NUMBER_RANGE_OBJECT_READ' + EXPORTING + language = mv_language + object = lv_object + IMPORTING + object_attributes = ls_attributes + object_text = ls_text + EXCEPTIONS + object_not_found = 1 + OTHERS = 2. + IF sy-subrc = 1. + RETURN. + ELSEIF sy-subrc <> 0. + _raise 'error from NUMBER_RANGE_OBJECT_READ'. + ENDIF. + + io_xml->add( iv_name = 'ATTRIBUTES' + ig_data = ls_attributes ). + io_xml->add( iv_name = 'TEXT' + ig_data = ls_text ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lt_errors TYPE TABLE OF inoer, + ls_attributes TYPE tnro, + ls_text TYPE tnrot. + + + io_xml->read( EXPORTING iv_name = 'ATTRIBUTES' + CHANGING cg_data = ls_attributes ). + io_xml->read( EXPORTING iv_name = 'TEXT' + CHANGING cg_data = ls_text ). + + CALL FUNCTION 'NUMBER_RANGE_OBJECT_UPDATE' + EXPORTING + indicator = 'I' + object_attributes = ls_attributes + object_text = ls_text + TABLES + errors = lt_errors + EXCEPTIONS + object_already_exists = 1 + object_attributes_missing = 2 + object_not_found = 3 + object_text_missing = 4 + wrong_indicator = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from NUMBER_RANGE_OBJECT_UPDATE'. + ENDIF. + + CALL FUNCTION 'NUMBER_RANGE_OBJECT_CLOSE' + EXPORTING + object = ls_attributes-object + EXCEPTIONS + object_not_initialized = 1. + IF sy-subrc <> 0. + _raise 'error from NUMBER_RANGE_OBJECT_CLOSE'. + ENDIF. + + CALL FUNCTION 'TR_TADIR_INTERFACE' + EXPORTING + wi_test_modus = abap_false + wi_tadir_pgmid = 'R3TR' + wi_tadir_object = 'NROB' + wi_tadir_obj_name = ms_item-obj_name + wi_tadir_author = sy-uname + wi_tadir_devclass = iv_package + wi_tadir_masterlang = mv_language + wi_set_genflag = abap_true + EXCEPTIONS + OTHERS = 1. + IF sy-subrc <> 0. + _raise 'error from TR_TADIR_INTERFACE'. + ENDIF. + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lv_object TYPE tnro-object. + + + lv_object = ms_item-obj_name. + + CALL FUNCTION 'NUMBER_RANGE_OBJECT_DELETE' + EXPORTING + language = mv_language + object = lv_object + EXCEPTIONS + delete_not_allowed = 1 + object_not_found = 2 + wrong_indicator = 3 + OTHERS = 4. + IF sy-subrc <> 0. + _raise 'error from NUMBER_RANGE_OBJECT_DELETE'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + _raise 'todo'. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_nrob IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_nrob.prog.xml b/src/zabapgit_object_nrob.prog.xml new file mode 100644 index 000000000..34309b7e4 --- /dev/null +++ b/src/zabapgit_object_nrob.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_NROB + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_NROB + 28 + + + + + + diff --git a/src/zabapgit_object_para.prog.abap b/src/zabapgit_object_para.prog.abap new file mode 100644 index 000000000..f787548b9 --- /dev/null +++ b/src/zabapgit_object_para.prog.abap @@ -0,0 +1,141 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_PARA +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_para DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_para DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_para DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_para IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_para IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_paramid TYPE tpara-paramid. + + + SELECT SINGLE paramid FROM tpara INTO lv_paramid + WHERE paramid = ms_item-obj_name. "#EC CI_GENBUFF + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: ls_tpara TYPE tpara, + ls_tparat TYPE tparat. + + + SELECT SINGLE * FROM tpara INTO ls_tpara + WHERE paramid = ms_item-obj_name. "#EC CI_GENBUFF + IF sy-subrc <> 0. + RETURN. + ENDIF. + + SELECT SINGLE * FROM tparat INTO ls_tparat + WHERE paramid = ms_item-obj_name + AND sprache = mv_language. "#EC CI_GENBUFF + IF sy-subrc <> 0. + _raise 'PARA no english description'. + ENDIF. + + io_xml->add( iv_name = 'TPARA' + ig_data = ls_tpara ). + io_xml->add( iv_name = 'TPARAT' + ig_data = ls_tparat ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. +* see fm RS_PARAMETER_ADD and RS_PARAMETER_EDIT + + DATA: lv_mode TYPE c LENGTH 1, + ls_tpara TYPE tpara, + ls_tparat TYPE tparat. + + + SELECT SINGLE * FROM tpara INTO ls_tpara + WHERE paramid = ms_item-obj_name. "#EC CI_GENBUFF + IF sy-subrc = 0. + lv_mode = 'M'. + ELSE. + lv_mode = 'I'. + ENDIF. + + io_xml->read( EXPORTING iv_name = 'TPARA' + CHANGING cg_data = ls_tpara ). + io_xml->read( EXPORTING iv_name = 'TPARAT' + CHANGING cg_data = ls_tparat ). + + CALL FUNCTION 'RS_CORR_INSERT' + EXPORTING + object = ms_item-obj_name + object_class = 'PARA' + mode = lv_mode + global_lock = abap_true + devclass = iv_package + master_language = mv_language + EXCEPTIONS + cancelled = 1 + permission_failure = 2 + unknown_objectclass = 3 + OTHERS = 4. + IF sy-subrc <> 0. + _raise 'error from RS_CORR_INSERT, PARA'. + ENDIF. + + MODIFY tpara FROM ls_tpara. "#EC CI_SUBRC + ASSERT sy-subrc = 0. + + MODIFY tparat FROM ls_tparat. "#EC CI_SUBRC + ASSERT sy-subrc = 0. + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lv_paramid TYPE tpara-paramid. + + + lv_paramid = ms_item-obj_name. + CALL FUNCTION 'RS_PARAMETER_DELETE' + EXPORTING + objectname = lv_paramid + EXCEPTIONS + cancelled = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error from RS_PRAMETER_DELETE'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = 'PARA' + in_new_window = abap_true. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_para IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_para.prog.xml b/src/zabapgit_object_para.prog.xml new file mode 100644 index 000000000..60c2adcf0 --- /dev/null +++ b/src/zabapgit_object_para.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_PARA + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_PARA + 28 + + + + + + diff --git a/src/zabapgit_object_sfbf.prog.abap b/src/zabapgit_object_sfbf.prog.abap new file mode 100644 index 000000000..f3ab7e357 --- /dev/null +++ b/src/zabapgit_object_sfbf.prog.abap @@ -0,0 +1,211 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SFBF +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_SFBF DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfbf DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + +ENDCLASS. "lcl_object_SFBF DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_SFBF IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfbf IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: ls_tadir TYPE tadir, + lv_bf TYPE sfw_bfunction. + + lv_bf = ms_item-obj_name. + IF cl_sfw_bf=>check_existence( lv_bf ) = abap_false. + RETURN. + ENDIF. + + ls_tadir = lcl_tadir=>read_single( + iv_object = ms_item-obj_type + iv_obj_name = ms_item-obj_name ). + IF ls_tadir IS INITIAL. + RETURN. + ENDIF. + + rv_bool = abap_true. + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: lv_bf TYPE sfw_bfunction, + lo_bf TYPE REF TO cl_sfw_bf, + ls_header TYPE sfw_bf, + lv_name_32 TYPE sfw_name32, + lv_name_80 TYPE sfw_name80, + lt_assigned_switches TYPE sfw_swbf_outtab, + lt_dependancies TYPE sfw_depend_outtab, + ls_sfw_bfc_kw TYPE sfw_bfc_kw, + ls_sfw_bfc_tc TYPE sfw_bfc_tc, + ls_sfw_bfc_rn TYPE sfw_bfc_rn, + lt_parent_bfs TYPE sfw_bs_bf_outtab. + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + lv_bf = ms_item-obj_name. + + TRY. +* make sure to clear cache, method GET_BF_FROM_DB does not exist in 702 + lo_bf = cl_sfw_bf=>get_bf( lv_bf ). + lo_bf->free( ). + lo_bf = cl_sfw_bf=>get_bf( lv_bf ). + CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. + _raise 'Error from CL_SFW_BF=>GET_BF'. + ENDTRY. + + ls_header = lo_bf->get_header_data( ). + CLEAR: ls_header-author, + ls_header-createdon, + ls_header-changedby, + ls_header-changedon, + ls_header-timestamp. + + lo_bf->get_texts( + IMPORTING + p_32 = lv_name_32 + p_80 = lv_name_80 ). + + lt_assigned_switches = lo_bf->get_assigned_switches( ). + lt_dependancies = lo_bf->get_excluded_bf( ). + lo_bf->get_content_data( + IMPORTING + ex_sfw_bfc_kw = ls_sfw_bfc_kw + ex_sfw_bfc_tc = ls_sfw_bfc_tc + ex_sfw_bfc_rn = ls_sfw_bfc_rn ). + lt_parent_bfs = lo_bf->get_parent_bfs( ). + + io_xml->add( ig_data = ls_header + iv_name = 'HEADER' ). + io_xml->add( ig_data = lv_name_32 + iv_name = 'NAME32' ). + io_xml->add( ig_data = lv_name_80 + iv_name = 'NAME80' ). + + io_xml->add( ig_data = lt_assigned_switches + iv_name = 'ASSIGNED_SWITCHES' ). + io_xml->add( ig_data = lt_dependancies + iv_name = 'DEPENDANCIES' ). + io_xml->add( ig_data = ls_sfw_bfc_kw + iv_name = 'CONTENT_KW' ). + io_xml->add( ig_data = ls_sfw_bfc_tc + iv_name = 'CONTENT_TC' ). + io_xml->add( ig_data = ls_sfw_bfc_rn + iv_name = 'CONTENT_RN' ). + io_xml->add( ig_data = lt_parent_bfs + iv_name = 'PARENT_BFS' ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_bf TYPE sfw_bfunction, + lo_bf TYPE REF TO cl_sfw_bf, + ls_header TYPE sfw_bf, + lv_name_32 TYPE sfw_name32, + lv_name_80 TYPE sfw_name80, + lt_assigned_switches TYPE sfw_swbf_outtab, + lt_dependancies TYPE sfw_depend_outtab, + ls_sfw_bfc_kw TYPE sfw_bfc_kw, + ls_sfw_bfc_tc TYPE sfw_bfc_tc, + ls_sfw_bfc_rn TYPE sfw_bfc_rn, + lt_parent_bfs TYPE sfw_bs_bf_outtab. + + + io_xml->read( EXPORTING iv_name = 'HEADER' + CHANGING cg_data = ls_header ). + io_xml->read( EXPORTING iv_name = 'NAME32' + CHANGING cg_data = lv_name_32 ). + io_xml->read( EXPORTING iv_name = 'NAME80' + CHANGING cg_data = lv_name_80 ). + + io_xml->read( EXPORTING iv_name = 'ASSIGNED_SWITCHES' + CHANGING cg_data = lt_assigned_switches ). + io_xml->read( EXPORTING iv_name = 'DEPENDANCIES' + CHANGING cg_data = lt_dependancies ). + io_xml->read( EXPORTING iv_name = 'CONTENT_KW' + CHANGING cg_data = ls_sfw_bfc_kw ). + io_xml->read( EXPORTING iv_name = 'CONTENT_TC' + CHANGING cg_data = ls_sfw_bfc_tc ). + io_xml->read( EXPORTING iv_name = 'CONTENT_RN' + CHANGING cg_data = ls_sfw_bfc_rn ). + io_xml->read( EXPORTING iv_name = 'PARENT_BFS' + CHANGING cg_data = lt_parent_bfs ). + + lv_bf = ms_item-obj_name. + TRY. + lo_bf = cl_sfw_bf=>create_bf( lv_bf ). + CATCH cx_pak_not_authorized cx_pak_invalid_state cx_pak_invalid_data. + _raise 'error in CL_SFW_BF=>CREATE_BF'. + ENDTRY. + + ls_header-author = sy-uname. + ls_header-createdon = sy-datum. + lo_bf->set_header_data( ls_header ). + + lo_bf->set_texts( p_32 = lv_name_32 + p_80 = lv_name_80 ). + + lo_bf->set_assigned_switches( lt_assigned_switches ). + lo_bf->set_excluded_bf( lt_dependancies ). + lo_bf->set_content_data( + im_sfw_bfc_kw = ls_sfw_bfc_kw + im_sfw_bfc_rn = ls_sfw_bfc_rn + im_sfw_bfc_tc = ls_sfw_bfc_tc ). + lo_bf->set_parent_bfs( lt_parent_bfs ). + + lo_bf->save_all( ). + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lv_bf TYPE sfw_bfunction, + lo_bf TYPE REF TO cl_sfw_bf. + + + lv_bf = ms_item-obj_name. + TRY. + lo_bf = cl_sfw_bf=>get_bf( lv_bf ). + lo_bf->set_delete_flag( lv_bf ). + lo_bf->save_all( ). + CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. + _raise 'Error deleting BF'. + ENDTRY. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = 'SFBF' + in_new_window = abap_true. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_SFBF IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_sfbf.prog.xml b/src/zabapgit_object_sfbf.prog.xml new file mode 100644 index 000000000..b4e34931a --- /dev/null +++ b/src/zabapgit_object_sfbf.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SFBF + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SFBF + 28 + + + + + + diff --git a/src/zabapgit_object_sfbs.prog.abap b/src/zabapgit_object_sfbs.prog.abap new file mode 100644 index 000000000..ac800e4e6 --- /dev/null +++ b/src/zabapgit_object_sfbs.prog.abap @@ -0,0 +1,183 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SFBS +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_SFBS DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfbs DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + +ENDCLASS. "lcl_object_SFBS DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_SFBS IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfbs IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: ls_tadir TYPE tadir, + lv_bfset TYPE sfw_bset. + + lv_bfset = ms_item-obj_name. + IF cl_sfw_bfs=>check_existence( lv_bfset ) = abap_false. + RETURN. + ENDIF. + + ls_tadir = lcl_tadir=>read_single( + iv_object = ms_item-obj_type + iv_obj_name = ms_item-obj_name ). + IF ls_tadir IS INITIAL. + RETURN. + ENDIF. + + rv_bool = abap_true. + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: lv_bfset TYPE sfw_bset, + lo_bfs TYPE REF TO cl_sfw_bfs, + ls_header TYPE sfw_bs, + lv_name_32 TYPE sfw_name32, + lv_name_80 TYPE sfw_name80, + lt_assigned_bf TYPE sfw_bfbs_outtab, + lt_nested_bfs TYPE sfw_bsbs_outtab, + lt_parent_bfs TYPE sfw_bs_bs_parent_outtab. + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + lv_bfset = ms_item-obj_name. + + TRY. + lo_bfs = cl_sfw_bfs=>get_bfs( lv_bfset ). + lo_bfs->free( ). + lo_bfs = cl_sfw_bfs=>get_bfs( lv_bfset ). + CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. + _raise 'Error from CL_SFW_BFS=>GET_BFS'. + ENDTRY. + + ls_header = lo_bfs->get_header_data( ). + CLEAR: ls_header-author, + ls_header-createdon, + ls_header-changedby, + ls_header-changedon, + ls_header-timestamp. + + lo_bfs->get_texts( + IMPORTING + p_32 = lv_name_32 + p_80 = lv_name_80 ). + + lt_assigned_bf = lo_bfs->get_assigned_bf( ). + lt_nested_bfs = lo_bfs->get_nested_bfs( ). + lt_parent_bfs = lo_bfs->get_nested_parent( ). + + io_xml->add( ig_data = ls_header + iv_name = 'HEADER' ). + io_xml->add( ig_data = lv_name_32 + iv_name = 'NAME32' ). + io_xml->add( ig_data = lv_name_80 + iv_name = 'NAME80' ). + + io_xml->add( ig_data = lt_assigned_bf + iv_name = 'ASSIGNED_BF' ). + io_xml->add( ig_data = lt_nested_bfs + iv_name = 'NESTED_BFS' ). + io_xml->add( ig_data = lt_parent_bfs + iv_name = 'PARENT_BFS' ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_bfset TYPE sfw_bset, + lo_bfs TYPE REF TO cl_sfw_bfs, + ls_header TYPE sfw_bs, + lv_name_32 TYPE sfw_name32, + lv_name_80 TYPE sfw_name80, + lt_assigned_bf TYPE sfw_bfbs_outtab, + lt_nested_bfs TYPE sfw_bsbs_outtab, + lt_parent_bfs TYPE sfw_bs_bs_parent_outtab. + + + io_xml->read( EXPORTING iv_name = 'HEADER' + CHANGING cg_data = ls_header ). + io_xml->read( EXPORTING iv_name = 'NAME32' + CHANGING cg_data = lv_name_32 ). + io_xml->read( EXPORTING iv_name = 'NAME80' + CHANGING cg_data = lv_name_80 ). + + io_xml->read( EXPORTING iv_name = 'ASSIGNED_BF' + CHANGING cg_data = lt_assigned_bf ). + io_xml->read( EXPORTING iv_name = 'NESTED_BFS' + CHANGING cg_data = lt_nested_bfs ). + io_xml->read( EXPORTING iv_name = 'PARENT_BFS' + CHANGING cg_data = lt_parent_bfs ). + + lv_bfset = ms_item-obj_name. + TRY. + lo_bfs = cl_sfw_bfs=>create_bfs( lv_bfset ). + CATCH cx_pak_not_authorized cx_pak_invalid_state cx_pak_invalid_data. + _raise 'error in CL_SFW_BFS=>CREATE_BFS'. + ENDTRY. + + ls_header-author = sy-uname. + ls_header-createdon = sy-datum. + lo_bfs->set_header_data( ls_header ). + + lo_bfs->set_texts( p_32 = lv_name_32 + p_80 = lv_name_80 ). + + lo_bfs->set_assigned_bf( lt_assigned_bf ). + lo_bfs->set_assigned_bfs( lt_nested_bfs ). + lo_bfs->set_nested_parent( lt_parent_bfs ). + + lo_bfs->save_all( ). + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lv_bfset TYPE sfw_bset, + lo_bfs TYPE REF TO cl_sfw_bfs. + + + lv_bfset = ms_item-obj_name. + TRY. + lo_bfs = cl_sfw_bfs=>get_bfs( lv_bfset ). + lo_bfs->set_delete_flag( lv_bfset ). + lo_bfs->save_all( ). + CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. + _raise 'Error deleting BF'. + ENDTRY. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = 'SFBS' + in_new_window = abap_true. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_SFBS IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_sfbs.prog.xml b/src/zabapgit_object_sfbs.prog.xml new file mode 100644 index 000000000..d92d19c27 --- /dev/null +++ b/src/zabapgit_object_sfbs.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SFBS + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SFBS + 28 + + + + + + diff --git a/src/zabapgit_object_sfsw.prog.abap b/src/zabapgit_object_sfsw.prog.abap new file mode 100644 index 000000000..c47682ce4 --- /dev/null +++ b/src/zabapgit_object_sfsw.prog.abap @@ -0,0 +1,180 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SFSW +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_sfsw DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfsw DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + +ENDCLASS. "lcl_object_sfsw DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_sfsw IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sfsw IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: ls_tadir TYPE tadir, + lv_switch_id TYPE sfw_switch_id. + + lv_switch_id = ms_item-obj_name. + IF cl_sfw_sw=>check_existence( lv_switch_id ) = abap_false. + RETURN. + ENDIF. + + ls_tadir = lcl_tadir=>read_single( + iv_object = ms_item-obj_type + iv_obj_name = ms_item-obj_name ). + IF ls_tadir IS INITIAL. + RETURN. + ENDIF. + + rv_bool = abap_true. + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: lv_switch_id TYPE sfw_switch_id, + lo_switch TYPE REF TO cl_sfw_sw, + ls_header TYPE sfw_switch, + lv_name_32 TYPE sfw_name32, + lv_name_80 TYPE sfw_name80, + lt_parent_bf TYPE sfw_bf_sw_outtab, + lt_conflicts TYPE sfw_confl_outtab. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + lv_switch_id = ms_item-obj_name. + + TRY. + lo_switch = cl_sfw_sw=>get_switch_from_db( lv_switch_id ). + CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. + _raise 'Error from CL_SFW_SW=>GET_SWITCH'. + ENDTRY. + + ls_header = lo_switch->get_header_data( ). + CLEAR: ls_header-author, + ls_header-createdon, + ls_header-changedby, + ls_header-changedon, + ls_header-timestamp. + + lo_switch->get_texts( + IMPORTING + p_32 = lv_name_32 + p_80 = lv_name_80 ). + + lt_parent_bf = lo_switch->get_parent_bf( ). + lt_conflicts = lo_switch->get_conflicts( ). + + io_xml->add( ig_data = ls_header + iv_name = 'HEADER' ). + io_xml->add( ig_data = lv_name_32 + iv_name = 'NAME32' ). + io_xml->add( ig_data = lv_name_80 + iv_name = 'NAME80' ). + + io_xml->add( ig_data = lt_parent_bf + iv_name = 'PARENT_BF' ). + io_xml->add( ig_data = lt_conflicts + iv_name = 'CONFLICTS' ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lo_switch TYPE REF TO cl_sfw_sw, + lv_switch_id TYPE sfw_switch_id, + ls_header TYPE sfw_switch, + lv_name_32 TYPE sfw_name32, + lv_name_80 TYPE sfw_name80, + lt_parent_bf TYPE sfw_bf_sw_outtab, + lt_conflicts TYPE sfw_confl_outtab. + + + io_xml->read( EXPORTING iv_name = 'HEADER' + CHANGING cg_data = ls_header ). + io_xml->read( EXPORTING iv_name = 'NAME32' + CHANGING cg_data = lv_name_32 ). + io_xml->read( EXPORTING iv_name = 'NAME80' + CHANGING cg_data = lv_name_80 ). + + io_xml->read( EXPORTING iv_name = 'PARENT_BF' + CHANGING cg_data = lt_parent_bf ). + io_xml->read( EXPORTING iv_name = 'CONFLICTS' + CHANGING cg_data = lt_conflicts ). + + lv_switch_id = ms_item-obj_name. + TRY. + lo_switch = cl_sfw_sw=>create_switch( lv_switch_id ). + CATCH cx_pak_not_authorized cx_pak_invalid_state cx_pak_invalid_data. + _raise 'error in CL_SFW_SW=>CREATE_SWITCH'. + ENDTRY. + + ls_header-author = sy-uname. + ls_header-createdon = sy-datum. + lo_switch->set_header_data( ls_header ). + + lo_switch->set_texts( p_32 = lv_name_32 + p_80 = lv_name_80 ). + + lo_switch->set_parent_bf( lt_parent_bf ). + lo_switch->set_conflicts( lt_conflicts ). + + lo_switch->save_all( + EXCEPTIONS + not_saved = 1 + OTHERS = 2 ). + IF sy-subrc <> 0. + _raise 'error in CL_SFW_SW->SAVE_ALL'. + ENDIF. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lv_switch_id TYPE sfw_switch_id, + lo_switch TYPE REF TO cl_sfw_sw. + + + lv_switch_id = ms_item-obj_name. + TRY. + lo_switch = cl_sfw_sw=>get_switch( lv_switch_id ). + lo_switch->set_delete_flag( lv_switch_id ). + lo_switch->save_all( ). + CATCH cx_pak_invalid_data cx_pak_invalid_state cx_pak_not_authorized. + _raise 'Error deleting Switch'. + ENDTRY. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = 'SFSW' + in_new_window = abap_true. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_sfsw IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_sfsw.prog.xml b/src/zabapgit_object_sfsw.prog.xml new file mode 100644 index 000000000..f21c9b800 --- /dev/null +++ b/src/zabapgit_object_sfsw.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SFSW + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SFSW + 28 + + + + + + diff --git a/src/zabapgit_object_shi3.prog.abap b/src/zabapgit_object_shi3.prog.abap new file mode 100644 index 000000000..fa58c7469 --- /dev/null +++ b/src/zabapgit_object_shi3.prog.abap @@ -0,0 +1,325 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SHI3 +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_shi3 DEFINITION +*----------------------------------------------------------------------* +CLASS lcl_object_shi3 DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + METHODS constructor + IMPORTING + is_item TYPE ty_item + iv_language TYPE spras. + + + PRIVATE SECTION. + + TYPES: BEGIN OF ty_id_map, + old TYPE ttree-id, + new TYPE ttree-id, + END OF ty_id_map. + TYPES tt_id_map TYPE STANDARD TABLE OF ty_id_map. + TYPES ts_id_map TYPE SORTED TABLE OF ty_id_map WITH UNIQUE KEY old. + + DATA: mv_tree_id TYPE ttree-id, + mt_map TYPE ts_id_map. " SORTED ! + + METHODS jump_se43 + RAISING lcx_exception. + + METHODS strip_stamps + CHANGING cs_head TYPE ttree + ct_nodes TYPE hier_iface_t. + + METHODS regenerate_ids + CHANGING ct_nodes TYPE hier_iface_t + ct_refs TYPE hier_ref_t + ct_texts TYPE hier_texts_t + RAISING lcx_exception. + + METHODS replace_id + IMPORTING iv_id TYPE clike + RETURNING VALUE(rv_new_id) TYPE ttree-id + RAISING lcx_exception. + +ENDCLASS. "lcl_object_shi3 DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_shi3 IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_object_shi3 IMPLEMENTATION. + + METHOD constructor. + super->constructor( is_item = is_item iv_language = iv_language ). + mv_tree_id = ms_item-obj_name. + ENDMETHOD. "constructor + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD jump_se43. + + DATA: lt_bdcdata TYPE TABLE OF bdcdata. + + FIELD-SYMBOLS: LIKE LINE OF lt_bdcdata. + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -program = 'SAPLBMEN'. + -dynpro = '0200'. + -dynbegin = abap_true. + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -fnam = 'BDC_OKCODE'. + -fval = '=SHOW'. + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -fnam = 'BMENUNAME-ID'. + -fval = ms_item-obj_name. + + CALL FUNCTION 'ABAP4_CALL_TRANSACTION' + STARTING NEW TASK 'GIT' + EXPORTING + tcode = 'SE43' + mode_val = 'E' + TABLES + using_tab = lt_bdcdata + EXCEPTIONS + system_failure = 1 + communication_failure = 2 + resource_failure = 3 + OTHERS = 4. + + IF sy-subrc <> 0. + _raise 'error from ABAP4_CALL_TRANSACTION, SHI3'. + ENDIF. + + ENDMETHOD. "jump_se43 + + METHOD lif_object~jump. + jump_se43( ). + ENDMETHOD. "jump + + METHOD lif_object~exists. + + DATA: ls_msg TYPE hier_mess, + ls_header TYPE ttree, + ls_tadir TYPE tadir. + + CALL FUNCTION 'STREE_STRUCTURE_EXIST' + EXPORTING + structure_id = mv_tree_id + do_not_read_devclass = '' + IMPORTING + message = ls_msg + structure_header = ls_header + structure_tadir = ls_tadir. + + rv_bool = boolc( ls_header-id IS NOT INITIAL ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~delete. + + CALL FUNCTION 'BMENU_DELETE_TREE' + EXPORTING + tree_id = mv_tree_id + EXCEPTIONS + trees_do_not_exist = 1 + no_authority = 2 + canceled = 3 + OTHERS = 4. + + IF sy-subrc <> 0. + _raise 'error from BMENU_DELETE_TREE, SHI3'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. + + DATA: ls_msg TYPE hier_mess, + ls_head TYPE ttree, + lt_titles TYPE TABLE OF ttreet, + lt_nodes TYPE TABLE OF hier_iface, + lt_texts TYPE TABLE OF hier_texts, + lt_refs TYPE TABLE OF hier_ref. + + CALL FUNCTION 'STREE_STRUCTURE_READ' + EXPORTING + structure_id = mv_tree_id + IMPORTING + message = ls_msg + structure_header = ls_head + TABLES + description = lt_titles. + + IF sy-subrc <> 0. + _raise 'Error from STREE_STRUCTURE_READ, SHI3'. + ENDIF. + + CALL FUNCTION 'STREE_HIERARCHY_READ' + EXPORTING + structure_id = mv_tree_id + read_also_texts = 'X' + all_languages = 'X' + IMPORTING + message = ls_msg + TABLES + list_of_nodes = lt_nodes + list_of_references = lt_refs + list_of_texts = lt_texts. + IF sy-subrc <> 0. + _raise 'Error from STREE_HIERARCHY_READ, SHI3'. + ENDIF. + + strip_stamps( CHANGING cs_head = ls_head + ct_nodes = lt_nodes ). + + io_xml->add( iv_name = 'TREE_HEAD' + ig_data = ls_head ). + io_xml->add( iv_name = 'TREE_TITLES' + ig_data = lt_titles ). + io_xml->add( iv_name = 'TREE_NODES' + ig_data = lt_nodes ). + io_xml->add( iv_name = 'TREE_REFS' + ig_data = lt_refs ). + io_xml->add( iv_name = 'TREE_TEXTS' + ig_data = lt_texts ). + + ENDMETHOD. "serialize + + METHOD strip_stamps. + + FIELD-SYMBOLS LIKE LINE OF ct_nodes. + + CLEAR: cs_head-luser, cs_head-ldate, cs_head-ltime. + CLEAR: cs_head-fuser, cs_head-fdate, cs_head-ftime. + CLEAR: cs_head-responsibl. + + LOOP AT ct_nodes ASSIGNING . + CLEAR: -luser, -ldate, -ltime. + CLEAR: -fuser, -fdate, -ftime. + ENDLOOP. + + ENDMETHOD. "strip_stamps + + METHOD regenerate_ids. + + DATA: ls_uid TYPE sys_uid, + lt_map TYPE tt_id_map. + + FIELD-SYMBOLS: LIKE LINE OF ct_nodes, + LIKE LINE OF ct_refs, + LIKE LINE OF ct_texts, + LIKE LINE OF mt_map. + + "Build map + LOOP AT ct_nodes ASSIGNING . + APPEND INITIAL LINE TO lt_map ASSIGNING . + IF -parent_id IS INITIAL. + -old = -node_id. + -new = -node_id. "Root node + ELSE. + CALL FUNCTION 'STREE_GET_UNIQUE_ID' + IMPORTING + unique_id = ls_uid. + + -old = -node_id. + -new = ls_uid-id. + ENDIF. + -node_id = -new. "Replace id + ENDLOOP. + + mt_map = lt_map. "Sort + + LOOP AT ct_nodes ASSIGNING . + -parent_id = replace_id( -parent_id ). + -brother_id = replace_id( -brother_id ). + ENDLOOP. + + LOOP AT ct_refs ASSIGNING . + -node_id = replace_id( -node_id ). + ENDLOOP. + + LOOP AT ct_texts ASSIGNING . + -node_id = replace_id( -node_id ). + ENDLOOP. + + ENDMETHOD. "regenerate_ids + + METHOD replace_id. + + DATA ls_map LIKE LINE OF mt_map. + + IF iv_id IS INITIAL. + RETURN. "No substitution for empty values + ENDIF. + + READ TABLE mt_map WITH TABLE KEY old = iv_id INTO ls_map. + IF sy-subrc <> 0. + _raise 'Cannot replace id, SHI3'. + ENDIF. + + rv_new_id = ls_map-new. + + ENDMETHOD. "replace_id + + METHOD lif_object~deserialize. + + DATA: ls_msg TYPE hier_mess, + ls_head TYPE ttree, + lt_titles TYPE TABLE OF ttreet, + lt_nodes TYPE TABLE OF hier_iface, + lt_texts TYPE TABLE OF hier_texts, + lt_refs TYPE TABLE OF hier_ref. + + io_xml->read( EXPORTING iv_name = 'TREE_HEAD' + CHANGING cg_data = ls_head ). + io_xml->read( EXPORTING iv_name = 'TREE_TITLES' + CHANGING cg_data = lt_titles ). + io_xml->read( EXPORTING iv_name = 'TREE_NODES' + CHANGING cg_data = lt_nodes ). + io_xml->read( EXPORTING iv_name = 'TREE_REFS' + CHANGING cg_data = lt_refs ). + io_xml->read( EXPORTING iv_name = 'TREE_TEXTS' + CHANGING cg_data = lt_texts ). + + regenerate_ids( CHANGING ct_nodes = lt_nodes + ct_refs = lt_refs + ct_texts = lt_texts ). + + IF lif_object~exists( ) = abap_true. + lif_object~delete( ). + ENDIF. + + CALL FUNCTION 'STREE_HIERARCHY_SAVE' + EXPORTING + structure_id = mv_tree_id + structure_type = 'BMENU' + structure_description = space + structure_masterlanguage = mv_language + structure_responsible = sy-uname + development_class = iv_package + IMPORTING + message = ls_msg + TABLES + list_of_nodes = lt_nodes + list_of_references = lt_refs + list_of_texts = lt_texts + structure_descriptions = lt_titles + EXCEPTIONS + no_nodes_given = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'Error from STREE_HIERARCHY_SAVE, SHI3'. + ENDIF. + + ENDMETHOD. "deserialize + +ENDCLASS. "lcl_object_shi3 IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_shi3.prog.xml b/src/zabapgit_object_shi3.prog.xml new file mode 100644 index 000000000..a6432c322 --- /dev/null +++ b/src/zabapgit_object_shi3.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SHI3 + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SHI3 + 28 + + + + + + diff --git a/src/zabapgit_object_shlp.prog.abap b/src/zabapgit_object_shlp.prog.abap new file mode 100644 index 000000000..055c06a2b --- /dev/null +++ b/src/zabapgit_object_shlp.prog.abap @@ -0,0 +1,163 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SHLP +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_shlp DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_shlp DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_dtel IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_shlp IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_shlpname TYPE dd30l-shlpname. + + + SELECT SINGLE shlpname FROM dd30l INTO lv_shlpname + WHERE shlpname = ms_item-obj_name + AND as4local = 'A'. "#EC CI_GENBUFF + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + jump_se11( iv_radio = 'RSRD1-SHMA' + iv_field = 'RSRD1-SHMA_VAL' ). + + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_objname TYPE rsedd0-ddobjname. + + + lv_objname = ms_item-obj_name. + + CALL FUNCTION 'RS_DD_DELETE_OBJ' + EXPORTING + no_ask = abap_true + objname = lv_objname + objtype = 'H' + EXCEPTIONS + not_executed = 1 + object_not_found = 2 + object_not_specified = 3 + permission_failure = 4. + IF sy-subrc <> 0. + _raise 'error from RS_DD_DELETE_OBJ, SHLP'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. + + DATA: lv_name TYPE ddobjname, + ls_dd30v TYPE dd30v, + lt_dd31v TYPE TABLE OF dd31v, + lt_dd32p TYPE TABLE OF dd32p, + lt_dd33v TYPE TABLE OF dd33v. + + + lv_name = ms_item-obj_name. + + CALL FUNCTION 'DDIF_SHLP_GET' + EXPORTING + name = lv_name + state = 'A' + langu = mv_language + IMPORTING + dd30v_wa = ls_dd30v + TABLES + dd31v_tab = lt_dd31v + dd32p_tab = lt_dd32p + dd33v_tab = lt_dd33v + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error from DDIF_SHLP_GET'. + ENDIF. + IF ls_dd30v IS INITIAL. + RETURN. " does not exist in system + ENDIF. + + CLEAR: ls_dd30v-as4user, + ls_dd30v-as4date, + ls_dd30v-as4time. + + io_xml->add( iv_name = 'DD30V' + ig_data = ls_dd30v ). + io_xml->add( ig_data = lt_dd31v + iv_name = 'DD31V_TABLE' ). + io_xml->add( ig_data = lt_dd32p + iv_name = 'DD32P_TABLE' ). + io_xml->add( ig_data = lt_dd33v + iv_name = 'DD33V_TABLE' ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_name TYPE ddobjname, + ls_dd30v TYPE dd30v, + lt_dd31v TYPE TABLE OF dd31v, + lt_dd32p TYPE TABLE OF dd32p, + lt_dd33v TYPE TABLE OF dd33v. + + + io_xml->read( EXPORTING iv_name = 'DD30V' + CHANGING cg_data = ls_dd30v ). + io_xml->read( EXPORTING iv_name = 'DD31V_TABLE' + CHANGING cg_data = lt_dd31v ). + io_xml->read( EXPORTING iv_name = 'DD32P_TABLE' + CHANGING cg_data = lt_dd32p ). + io_xml->read( EXPORTING iv_name = 'DD33V_TABLE' + CHANGING cg_data = lt_dd33v ). + + corr_insert( iv_package ). + + lv_name = ms_item-obj_name. + + CALL FUNCTION 'DDIF_SHLP_PUT' + EXPORTING + name = lv_name + dd30v_wa = ls_dd30v + TABLES + dd31v_tab = lt_dd31v + dd32p_tab = lt_dd32p + dd33v_tab = lt_dd33v + EXCEPTIONS + shlp_not_found = 1 + name_inconsistent = 2 + shlp_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from DDIF_SHLP_PUT'. + ENDIF. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + +ENDCLASS. "lcl_object_shlp IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_shlp.prog.xml b/src/zabapgit_object_shlp.prog.xml new file mode 100644 index 000000000..9a694e7c3 --- /dev/null +++ b/src/zabapgit_object_shlp.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SHLP + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SHLP + 28 + + + + + + diff --git a/src/zabapgit_object_sicf.prog.abap b/src/zabapgit_object_sicf.prog.abap new file mode 100644 index 000000000..b61c73c2f --- /dev/null +++ b/src/zabapgit_object_sicf.prog.abap @@ -0,0 +1,406 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SICF +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_sicf DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sicf DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + TYPES: ty_icfhandler_tt TYPE STANDARD TABLE OF icfhandler WITH DEFAULT KEY. + + TYPES: BEGIN OF ty_sicf_key, + icf_name TYPE icfservice-icf_name, + icfparguid TYPE icfservice-icfparguid, + END OF ty_sicf_key. + + METHODS read + EXPORTING es_icfservice TYPE icfservice + es_icfdocu TYPE icfdocu + et_icfhandler TYPE ty_icfhandler_tt + ev_url TYPE string + RAISING lcx_exception. + + METHODS insert_sicf + IMPORTING is_icfservice TYPE icfservice + is_icfdocu TYPE icfdocu + it_icfhandler TYPE ty_icfhandler_tt + iv_package TYPE devclass + iv_url TYPE string + RAISING lcx_exception. + + METHODS change_sicf + IMPORTING is_icfservice TYPE icfservice + is_icfdocu TYPE icfdocu + it_icfhandler TYPE ty_icfhandler_tt + iv_package TYPE devclass + iv_parent TYPE icfparguid + RAISING lcx_exception. + + METHODS to_icfhndlist + IMPORTING it_list TYPE ty_icfhandler_tt + RETURNING VALUE(rt_list) TYPE icfhndlist. + + METHODS find_parent + IMPORTING iv_url TYPE string + RETURNING VALUE(rv_parent) TYPE icfparguid + RAISING lcx_exception. + +ENDCLASS. "lcl_object_sicf DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_sicf IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_sicf IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: ls_icfservice TYPE icfservice. + + + read( IMPORTING es_icfservice = ls_icfservice ). + rv_bool = boolc( NOT ls_icfservice IS INITIAL ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: ls_icfservice TYPE icfservice, + ls_icfdocu TYPE icfdocu, + lv_url TYPE string, + lt_icfhandler TYPE TABLE OF icfhandler. + + + read( IMPORTING es_icfservice = ls_icfservice + es_icfdocu = ls_icfdocu + et_icfhandler = lt_icfhandler + ev_url = lv_url ). + IF ls_icfservice IS INITIAL. + RETURN. + ENDIF. + + CLEAR ls_icfservice-icfnodguid. + CLEAR ls_icfservice-icfparguid. + CLEAR ls_icfservice-icf_user. + CLEAR ls_icfservice-icf_cclnt. + CLEAR ls_icfservice-icf_mclnt. + + io_xml->add( iv_name = 'URL' + ig_data = lv_url ). + io_xml->add( iv_name = 'ICFSERVICE' + ig_data = ls_icfservice ). + io_xml->add( iv_name = 'ICFDOCU' + ig_data = ls_icfdocu ). + io_xml->add( iv_name = 'ICFHANDLER_TABLE' + ig_data = lt_icfhandler ). + + ENDMETHOD. "serialize + + METHOD read. + + DATA: lt_serv_info TYPE icfservtbl, + ls_serv_info LIKE LINE OF lt_serv_info, + ls_key TYPE ty_sicf_key. + + FIELD-SYMBOLS: LIKE LINE OF et_icfhandler. + + + CLEAR es_icfservice. + CLEAR es_icfdocu. + CLEAR et_icfhandler. + CLEAR ev_url. + + ls_key = ms_item-obj_name. + IF ls_key-icfparguid IS INITIAL. +* limitation: name must be unique + SELECT SINGLE icfparguid FROM icfservice + INTO ls_key-icfparguid + WHERE icf_name = ls_key-icf_name + AND icf_cuser <> 'SAP' ##warn_ok. + IF sy-subrc <> 0. + RETURN. + ENDIF. + ENDIF. + + cl_icf_tree=>if_icf_tree~get_info_from_serv( + EXPORTING + icf_name = ls_key-icf_name + icfparguid = ls_key-icfparguid + icf_langu = mv_language + IMPORTING + serv_info = lt_serv_info + icfdocu = es_icfdocu + url = ev_url + EXCEPTIONS + wrong_name = 1 + wrong_parguid = 2 + incorrect_service = 3 + no_authority = 4 + OTHERS = 5 ). + IF sy-subrc <> 0. + _raise 'error from get_info_from_serv'. + ENDIF. + + ASSERT lines( lt_serv_info ) = 1. + READ TABLE lt_serv_info INDEX 1 INTO ls_serv_info. + ASSERT sy-subrc = 0. + + MOVE-CORRESPONDING ls_serv_info-service TO es_icfservice. + CLEAR es_icfservice-icf_cuser. + CLEAR es_icfservice-icf_cdate. + CLEAR es_icfservice-icf_muser. + CLEAR es_icfservice-icf_mdate. + + CLEAR es_icfdocu-icfparguid. + + APPEND LINES OF ls_serv_info-handlertbl TO et_icfhandler. + LOOP AT et_icfhandler ASSIGNING . + CLEAR -icfparguid. + ENDLOOP. + + ENDMETHOD. "read + + METHOD lif_object~deserialize. + + DATA: ls_icfservice TYPE icfservice, + ls_read TYPE icfservice, + ls_icfdocu TYPE icfdocu, + lv_url TYPE string, + lt_icfhandler TYPE TABLE OF icfhandler. + + + io_xml->read( EXPORTING iv_name = 'URL' + CHANGING cg_data = lv_url ). + io_xml->read( EXPORTING iv_name = 'ICFSERVICE' + CHANGING cg_data = ls_icfservice ). + io_xml->read( EXPORTING iv_name = 'ICFDOCU' + CHANGING cg_data = ls_icfdocu ). + io_xml->read( EXPORTING iv_name = 'ICFHANDLER_TABLE' + CHANGING cg_data = lt_icfhandler ). + + read( IMPORTING es_icfservice = ls_read ). + IF ls_read IS INITIAL. + insert_sicf( is_icfservice = ls_icfservice + is_icfdocu = ls_icfdocu + it_icfhandler = lt_icfhandler + iv_package = iv_package + iv_url = lv_url ). + ELSE. + change_sicf( is_icfservice = ls_icfservice + is_icfdocu = ls_icfdocu + it_icfhandler = lt_icfhandler + iv_package = iv_package + iv_parent = ls_read-icfparguid ). + ENDIF. + + ENDMETHOD. "deserialize + + METHOD to_icfhndlist. + + FIELD-SYMBOLS: LIKE LINE OF it_list. + + +* convert to sorted table + LOOP AT it_list ASSIGNING . + INSERT -icfhandler INTO TABLE rt_list. + ENDLOOP. + + ENDMETHOD. "to_icfhndlist + + METHOD find_parent. + + cl_icf_tree=>if_icf_tree~service_from_url( + EXPORTING + url = iv_url + hostnumber = 0 + IMPORTING + icfnodguid = rv_parent + EXCEPTIONS + wrong_application = 1 + no_application = 2 + not_allow_application = 3 + wrong_url = 4 + no_authority = 5 + OTHERS = 6 ). + IF sy-subrc <> 0. + _raise 'error from service_from_url'. + ENDIF. + + ENDMETHOD. "find_parent + + METHOD insert_sicf. + + DATA: lt_icfhndlist TYPE icfhndlist, + ls_icfserdesc TYPE icfserdesc, + ls_icfdocu TYPE icfdocu, + lv_parent TYPE icfparguid. + + + lt_icfhndlist = to_icfhndlist( it_icfhandler ). + lv_parent = find_parent( iv_url ). + +* nice, it seems that the structure should be mistreated + ls_icfdocu = is_icfdocu-icf_docu. + + MOVE-CORRESPONDING is_icfservice TO ls_icfserdesc. + + cl_icf_tree=>if_icf_tree~insert_node( + EXPORTING + icf_name = is_icfservice-orig_name + icfparguid = lv_parent + icfdocu = ls_icfdocu + doculang = mv_language + icfhandlst = lt_icfhndlist + package = iv_package + application = space + icfserdesc = ls_icfserdesc + icfactive = abap_true + EXCEPTIONS + empty_icf_name = 1 + no_new_virtual_host = 2 + special_service_error = 3 + parent_not_existing = 4 + enqueue_error = 5 + node_already_existing = 6 + empty_docu = 7 + doculang_not_installed = 8 + security_info_error = 9 + user_password_error = 10 + password_encryption_error = 11 + invalid_url = 12 + invalid_otr_concept = 13 + formflg401_error = 14 + handler_error = 15 + transport_error = 16 + tadir_error = 17 + package_not_found = 18 + wrong_application = 19 + not_allow_application = 20 + no_application = 21 + invalid_icfparguid = 22 + alt_name_invalid = 23 + alternate_name_exist = 24 + wrong_icf_name = 25 + no_authority = 26 + OTHERS = 27 ). + IF sy-subrc <> 0. + _raise 'error from insert_node'. + ENDIF. + + ENDMETHOD. "insert_sicf + + METHOD change_sicf. + + DATA: lt_icfhndlist TYPE icfhndlist, + lt_existing TYPE TABLE OF icfhandler, + ls_icfserdesc TYPE icfserdesc. + + FIELD-SYMBOLS: LIKE LINE OF lt_existing. + + + lt_icfhndlist = to_icfhndlist( it_icfhandler ). + +* Do not add handlers if they already exist, it will make the below +* call to SAP standard code raise an exception + SELECT * FROM icfhandler INTO TABLE lt_existing + WHERE icf_name = is_icfservice-icf_name. + LOOP AT lt_existing ASSIGNING . + DELETE TABLE lt_icfhndlist FROM -icfhandler. + ENDLOOP. + + MOVE-CORRESPONDING is_icfservice TO ls_icfserdesc. + + cl_icf_tree=>if_icf_tree~change_node( + EXPORTING + icf_name = is_icfservice-orig_name + icfparguid = iv_parent + icfdocu = is_icfdocu + doculang = mv_language + icfhandlst = lt_icfhndlist + package = iv_package + application = space + icfserdesc = ls_icfserdesc + icfactive = abap_true + EXCEPTIONS + empty_icf_name = 1 + no_new_virtual_host = 2 + special_service_error = 3 + parent_not_existing = 4 + enqueue_error = 5 + node_already_existing = 6 + empty_docu = 7 + doculang_not_installed = 8 + security_info_error = 9 + user_password_error = 10 + password_encryption_error = 11 + invalid_url = 12 + invalid_otr_concept = 13 + formflg401_error = 14 + handler_error = 15 + transport_error = 16 + tadir_error = 17 + package_not_found = 18 + wrong_application = 19 + not_allow_application = 20 + no_application = 21 + invalid_icfparguid = 22 + alt_name_invalid = 23 + alternate_name_exist = 24 + wrong_icf_name = 25 + no_authority = 26 + OTHERS = 27 ). + IF sy-subrc <> 0. + _raise 'error from change_node'. + ENDIF. + + ENDMETHOD. "change_sicf + + METHOD lif_object~delete. + + DATA: ls_icfservice TYPE icfservice. + + + read( IMPORTING es_icfservice = ls_icfservice ). + + cl_icf_tree=>if_icf_tree~delete_node( + EXPORTING + icfparguid = ls_icfservice-icfparguid + CHANGING + icf_name = ls_icfservice-icf_name + EXCEPTIONS + no_virtual_host_delete = 1 + special_service_error = 2 + enqueue_error = 3 + node_not_existing = 4 + node_has_childs = 5 + node_is_aliased = 6 + node_not_in_original_system = 7 + transport_error = 8 + tadir_error = 9 + db_error = 10 + no_authority = 11 + OTHERS = 12 ). + IF sy-subrc <> 0. + _raise 'error from delete_node'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + _raise 'todo, SICF, jump'. + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_sicf IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_sicf.prog.xml b/src/zabapgit_object_sicf.prog.xml new file mode 100644 index 000000000..a11ae0758 --- /dev/null +++ b/src/zabapgit_object_sicf.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SICF + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SICF + 28 + + + + + + diff --git a/src/zabapgit_object_smim.prog.abap b/src/zabapgit_object_smim.prog.abap new file mode 100644 index 000000000..6a9879327 --- /dev/null +++ b/src/zabapgit_object_smim.prog.abap @@ -0,0 +1,301 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SMIM +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_smim DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_smim DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS get_filename + IMPORTING iv_url TYPE string + RETURNING VALUE(rv_filename) TYPE string. + + METHODS find_content + IMPORTING iv_url TYPE string + RETURNING VALUE(rv_content) TYPE xstring + RAISING lcx_exception. + + METHODS build_filename + IMPORTING iv_filename TYPE string + RETURNING VALUE(rv_filename) TYPE string. + + METHODS get_url_for_io + EXPORTING ev_url TYPE string + ev_is_folder TYPE boole_d + RAISING lcx_not_found + lcx_exception. + +ENDCLASS. "lcl_object_smim DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_smim IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_smim IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + TRY. + get_url_for_io( ). + rv_bool = abap_true. + CATCH lcx_not_found. + rv_bool = abap_false. + ENDTRY. + + ENDMETHOD. "lif_object~exists + + METHOD get_url_for_io. + + DATA: ls_io TYPE skwf_io, + lv_url TYPE skwf_url, + ls_smimloio TYPE smimloio, + lv_loio TYPE sdok_docid. + + + lv_loio = ms_item-obj_name. + + CLEAR ev_url. + CLEAR ev_is_folder. + + SELECT SINGLE * FROM smimloio INTO ls_smimloio + WHERE loio_id = lv_loio. "#EC CI_GENBUFF + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE lcx_not_found. + ENDIF. + + IF ls_smimloio-lo_class = wbmr_c_skwf_folder_class. + ev_is_folder = abap_true. + ls_io-objtype = skwfc_obtype_folder. + ELSE. + ls_io-objtype = skwfc_obtype_loio. + ENDIF. + ls_io-class = ls_smimloio-lo_class. + ls_io-objid = ls_smimloio-loio_id. + + CALL FUNCTION 'SKWF_NMSPC_IO_ADDRESS_GET' + EXPORTING + io = ls_io + IMPORTING + url = lv_url. + + ev_url = lv_url. + + ENDMETHOD. "get_url_for_io + + METHOD build_filename. + + CONCATENATE ms_item-obj_name ms_item-obj_type iv_filename + INTO rv_filename SEPARATED BY '.'. + TRANSLATE rv_filename TO LOWER CASE. + + ENDMETHOD. "build_filename + + METHOD find_content. + + DATA: lv_filename TYPE string, + lt_files TYPE ty_files_tt. + + FIELD-SYMBOLS: LIKE LINE OF lt_files. + + + lv_filename = get_filename( iv_url ). + + lv_filename = build_filename( lv_filename ). + + lt_files = mo_files->get_files( ). + + READ TABLE lt_files ASSIGNING WITH KEY filename = lv_filename. + IF sy-subrc <> 0. + _raise 'SMIM, file not found'. + ENDIF. + + rv_content = -data. + + ENDMETHOD. "find_content + + METHOD get_filename. + + DATA: lv_lines TYPE i, + lt_strings TYPE TABLE OF string. + + + SPLIT iv_url AT '/' INTO TABLE lt_strings. + lv_lines = lines( lt_strings ). + ASSERT lv_lines > 0. + READ TABLE lt_strings INDEX lv_lines INTO rv_filename. + ASSERT sy-subrc = 0. + + ENDMETHOD. "get_filename + + METHOD lif_object~serialize. + + DATA: lv_url TYPE string, + lv_folder TYPE abap_bool, + lv_filename TYPE string, + ls_file TYPE ty_file, + lv_content TYPE xstring, + li_api TYPE REF TO if_mr_api. + + + TRY. + get_url_for_io( + IMPORTING + ev_url = lv_url + ev_is_folder = lv_folder ). + CATCH lcx_not_found. + RETURN. + ENDTRY. + + IF lv_folder = abap_false. + li_api = cl_mime_repository_api=>if_mr_api~get_api( ). + li_api->get( + EXPORTING + i_url = lv_url + IMPORTING + e_content = lv_content + EXCEPTIONS + parameter_missing = 1 + error_occured = 2 + not_found = 3 + permission_failure = 4 + OTHERS = 5 ). + IF sy-subrc <> 0. + _raise 'error from mime api->get'. + ENDIF. + + lv_filename = get_filename( lv_url ). + CLEAR ls_file. + ls_file-filename = build_filename( lv_filename ). + ls_file-path = '/'. + ls_file-data = lv_content. + mo_files->add( ls_file ). + ENDIF. + + io_xml->add( iv_name = 'URL' + ig_data = lv_url ). + io_xml->add( iv_name = 'FOLDER' + ig_data = lv_folder ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_url TYPE string, + lv_folder TYPE abap_bool, + lv_content TYPE xstring, + lv_filename TYPE skwf_filnm, + lv_io TYPE sdok_docid, + ls_skwf_io TYPE skwf_io, + li_api TYPE REF TO if_mr_api. + + + li_api = cl_mime_repository_api=>if_mr_api~get_api( ). + lv_io = ms_item-obj_name. + + io_xml->read( EXPORTING iv_name = 'URL' + CHANGING cg_data = lv_url ). + io_xml->read( EXPORTING iv_name = 'FOLDER' + CHANGING cg_data = lv_folder ). + + ls_skwf_io-objid = lv_io. + + IF lv_folder = abap_true. + li_api->create_folder( + EXPORTING + i_url = lv_url + i_language = sy-langu + i_dev_package = iv_package + i_folder_loio = ls_skwf_io + EXCEPTIONS + parameter_missing = 1 + error_occured = 2 + cancelled = 3 + permission_failure = 4 + folder_exists = 5 + OTHERS = 6 ). + IF sy-subrc <> 5 AND sy-subrc <> 0. + _raise 'error frrom SMIM create_folder'. + ENDIF. + ELSE. + lv_filename = get_filename( lv_url ). + cl_wb_mime_repository=>determine_io_class( + EXPORTING + filename = lv_filename + IMPORTING + io_class = ls_skwf_io-class ). + CONCATENATE ls_skwf_io-class '_L' INTO ls_skwf_io-class. + + lv_content = find_content( lv_url ). + + li_api->put( + EXPORTING + i_url = lv_url + i_content = lv_content + i_dev_package = iv_package + i_new_loio = ls_skwf_io + EXCEPTIONS + parameter_missing = 1 + error_occured = 2 + cancelled = 3 + permission_failure = 4 + data_inconsistency = 5 + new_loio_already_exists = 6 + is_folder = 7 + OTHERS = 8 ). + IF sy-subrc <> 0. + _raise 'error from SMIM put'. + ENDIF. + ENDIF. + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: li_api TYPE REF TO if_mr_api, + lv_url TYPE string. + + + TRY. + get_url_for_io( + IMPORTING + ev_url = lv_url ). + CATCH lcx_not_found. + RETURN. + ENDTRY. + + li_api = cl_mime_repository_api=>if_mr_api~get_api( ). + li_api->delete( + EXPORTING + i_url = lv_url + i_delete_children = abap_true + EXCEPTIONS + parameter_missing = 1 + error_occured = 2 + cancelled = 3 + permission_failure = 4 + not_found = 5 + OTHERS = 6 ). + IF sy-subrc <> 0. + _raise 'error from delete'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + _raise 'todo, SMIM, jump'. + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_smim IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_smim.prog.xml b/src/zabapgit_object_smim.prog.xml new file mode 100644 index 000000000..9bae0d613 --- /dev/null +++ b/src/zabapgit_object_smim.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SMIM + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SMIM + 28 + + + + + + diff --git a/src/zabapgit_object_splo.prog.abap b/src/zabapgit_object_splo.prog.abap new file mode 100644 index 000000000..803b466d4 --- /dev/null +++ b/src/zabapgit_object_splo.prog.abap @@ -0,0 +1,123 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SPLO +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_splo DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_splo DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_splo DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_splo IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_splo IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~serialize. + + DATA: ls_tsp1t TYPE tsp1t, + ls_tsp1d TYPE tsp1d, + ls_tsp0p TYPE tsp0p. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + SELECT SINGLE * FROM tsp1t INTO ls_tsp1t + WHERE papart = ms_item-obj_name + AND spras = mv_language. "#EC CI_GENBUFF "#EC CI_SUBRC + SELECT SINGLE * FROM tsp1d INTO ls_tsp1d + WHERE papart = ms_item-obj_name. "#EC CI_SUBRC + SELECT SINGLE * FROM tsp0p INTO ls_tsp0p + WHERE pdpaper = ms_item-obj_name. "#EC CI_SUBRC + + CLEAR: ls_tsp1d-chgname1, + ls_tsp1d-chgtstmp1, + ls_tsp1d-chgsaprel1, + ls_tsp1d-chgsapsys1. + + io_xml->add( iv_name = 'TSPLT' + ig_data = ls_tsp1t ). + io_xml->add( iv_name = 'TSPLD' + ig_data = ls_tsp1d ). + io_xml->add( iv_name = 'TSP0P' + ig_data = ls_tsp0p ). + + ENDMETHOD. "lif_object~serialize + + METHOD lif_object~deserialize. + + DATA: lv_obj_name TYPE e071-obj_name, + ls_tsp1t TYPE tsp1t, + ls_tsp1d TYPE tsp1d, + ls_tsp0p TYPE tsp0p. + + + io_xml->read( EXPORTING iv_name = 'TSPLT' + CHANGING cg_data = ls_tsp1t ). + io_xml->read( EXPORTING iv_name = 'TSPLD' + CHANGING cg_data = ls_tsp1d ). + io_xml->read( EXPORTING iv_name = 'TSP0P' + CHANGING cg_data = ls_tsp0p ). + + MODIFY tsp1t FROM ls_tsp1t. "#EC CI_SUBRC + MODIFY tsp1d FROM ls_tsp1d. "#EC CI_SUBRC + MODIFY tsp0p FROM ls_tsp0p. "#EC CI_SUBRC + + lv_obj_name = ms_item-obj_name. + + CALL FUNCTION 'TR_TADIR_POPUP_ENTRY_E071' + EXPORTING + wi_e071_pgmid = 'R3TR' + wi_e071_object = ms_item-obj_type + wi_e071_obj_name = lv_obj_name + wi_tadir_devclass = iv_package. + + ENDMETHOD. "lif_object~deserialize + + METHOD lif_object~delete. + + DELETE FROM tsp1t WHERE papart = ms_item-obj_name. "#EC CI_NOFIRST "#EC CI_SUBRC + DELETE FROM tsp1d WHERE papart = ms_item-obj_name. "#EC CI_SUBRC + DELETE FROM tsp0p WHERE pdpaper = ms_item-obj_name. "#EC CI_SUBRC + + CALL FUNCTION 'TR_TADIR_INTERFACE' + EXPORTING + wi_delete_tadir_entry = abap_true + wi_tadir_pgmid = 'R3TR' + wi_tadir_object = ms_item-obj_type + wi_tadir_obj_name = ms_item-obj_name + wi_test_modus = abap_false. + + ENDMETHOD. "lif_object~delete + + METHOD lif_object~exists. + + DATA: lv_papart TYPE tsp1d-papart. + + + SELECT SINGLE papart INTO lv_papart FROM tsp1d + WHERE papart = ms_item-obj_name. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + _raise 'todo, jump, SPLO'. + ENDMETHOD. "lif_object~jump + +ENDCLASS. "lcl_object_splo IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_splo.prog.xml b/src/zabapgit_object_splo.prog.xml new file mode 100644 index 000000000..90a46fbaf --- /dev/null +++ b/src/zabapgit_object_splo.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SPLO + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SPLO + 28 + + + + + + diff --git a/src/zabapgit_object_ssfo.prog.abap b/src/zabapgit_object_ssfo.prog.abap new file mode 100644 index 000000000..cec0c5029 --- /dev/null +++ b/src/zabapgit_object_ssfo.prog.abap @@ -0,0 +1,226 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SSFO +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_ssfo DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_ssfo DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_dtel IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_ssfo IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_formname TYPE stxfadm-formname. + + + SELECT SINGLE formname FROM stxfadm INTO lv_formname + WHERE formname = ms_item-obj_name. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + DATA: lt_bdcdata TYPE TABLE OF bdcdata. + + FIELD-SYMBOLS: LIKE LINE OF lt_bdcdata. + + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -program = 'SAPMSSFO'. + -dynpro = '0100'. + -dynbegin = abap_true. + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -fnam = 'BDC_OKCODE'. + -fval = '=DISPLAY'. + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -fnam = 'RB_SF'. + -fval = abap_true. + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -fnam = 'SSFSCREEN-FNAME'. + -fval = ms_item-obj_name. + + CALL FUNCTION 'ABAP4_CALL_TRANSACTION' + STARTING NEW TASK 'GIT' + EXPORTING + tcode = 'SMARTFORMS' + mode_val = 'E' + TABLES + using_tab = lt_bdcdata + EXCEPTIONS + system_failure = 1 + communication_failure = 2 + resource_failure = 3 + OTHERS = 4 + ##fm_subrc_ok. "#EC CI_SUBRC + + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_formname TYPE tdsfname. + + + lv_formname = ms_item-obj_name. + + CALL FUNCTION 'FB_DELETE_FORM' + EXPORTING + i_formname = lv_formname + i_with_dialog = abap_false + i_with_confirm_dialog = abap_false + EXCEPTIONS + no_name = 1 + no_form = 2 + form_locked = 3 + no_access_permission = 4 + illegal_language = 5 + illegal_formtype = 6 + OTHERS = 7. + IF sy-subrc <> 0 AND sy-subrc <> 2. + _raise 'Error from FB_DELETE_FORM'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. +* see function module FB_DOWNLOAD_FORM + + DATA: lo_sf TYPE REF TO cl_ssf_fb_smart_form, + lv_name TYPE string, + li_node TYPE REF TO if_ixml_node, + li_element TYPE REF TO if_ixml_element, + li_iterator TYPE REF TO if_ixml_node_iterator, + li_attr TYPE REF TO if_ixml_named_node_map, + lv_formname TYPE tdsfname, + li_ixml TYPE REF TO if_ixml, + li_xml_doc TYPE REF TO if_ixml_document. + + + li_ixml = cl_ixml=>create( ). + li_xml_doc = li_ixml->create_document( ). + + CREATE OBJECT lo_sf. + lv_formname = ms_item-obj_name. " convert type + TRY. + lo_sf->load( im_formname = lv_formname + im_language = '' ). + CATCH cx_ssf_fb. +* the smartform is not present in system, or other error occured + RETURN. + ENDTRY. + + lo_sf->xml_download( EXPORTING parent = li_xml_doc + CHANGING document = li_xml_doc ). + + li_iterator = li_xml_doc->create_iterator( ). + li_node = li_iterator->get_next( ). + WHILE NOT li_node IS INITIAL. + + lv_name = li_node->get_name( ). + IF lv_name = 'DEVCLASS' + OR lv_name = 'LASTDATE' + OR lv_name = 'LASTTIME'. + li_node->set_value( '' ). + ENDIF. + IF lv_name = 'FIRSTUSER' + OR lv_name = 'LASTUSER'. + li_node->set_value( 'DUMMY' ). + ENDIF. + +* remove IDs it seems that they are not used for anything +* the IDs are "random" so it caused diff files + IF lv_name = 'NODE' OR lv_name = 'WINDOW'. + li_attr = li_node->get_attributes( ). + li_attr->remove_named_item( 'ID' ). + ENDIF. + + li_node = li_iterator->get_next( ). + ENDWHILE. + + li_element = li_xml_doc->get_root_element( ). + li_element->set_attribute( + name = 'sf' + namespace = 'xmlns' + value = 'urn:sap-com:SmartForms:2000:internal-structure' ). "#EC NOTEXT + li_element->set_attribute( + name = 'xmlns' + value = 'urn:sap-com:sdixml-ifr:2000' ). "#EC NOTEXT + + io_xml->set_raw( li_xml_doc->get_root_element( ) ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. +* see function module FB_UPLOAD_FORM + + DATA: li_node TYPE REF TO if_ixml_node, + lv_formname TYPE tdsfname, + lv_name TYPE string, + li_iterator TYPE REF TO if_ixml_node_iterator, + lo_sf TYPE REF TO cl_ssf_fb_smart_form, + lo_res TYPE REF TO cl_ssf_fb_smart_form. + + + CREATE OBJECT lo_sf. + +* set "created by" and "changed by" to current user + li_iterator = io_xml->get_raw( )->create_iterator( ). + li_node = li_iterator->get_next( ). + WHILE NOT li_node IS INITIAL. + lv_name = li_node->get_name( ). + CASE lv_name. + WHEN 'LASTDATE'. + li_node->set_value( + sy-datum(4) && '-' && sy-datum+4(2) && '-' && sy-datum+6(2) ). + WHEN 'LASTTIME'. + li_node->set_value( + sy-uzeit(2) && ':' && sy-uzeit+2(2) && ':' && sy-uzeit+4(2) ). + WHEN 'FIRSTUSER' OR 'LASTUSER'. + li_node->set_value( sy-uname && '' ). + ENDCASE. + + li_node = li_iterator->get_next( ). + ENDWHILE. + +* todo, iv_package? + lv_formname = ms_item-obj_name. + lo_sf->enqueue( suppress_corr_check = space + master_language = mv_language + mode = 'INSERT' + formname = lv_formname ). + + lo_sf->xml_upload( EXPORTING dom = io_xml->get_raw( ) + formname = lv_formname + language = mv_language + CHANGING sform = lo_res ). + + lo_res->store( im_formname = lo_res->header-formname + im_language = mv_language + im_active = abap_true ). + + lo_sf->dequeue( lv_formname ). + + ENDMETHOD. "deserialize + +ENDCLASS. "lcl_object_ssfo IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_ssfo.prog.xml b/src/zabapgit_object_ssfo.prog.xml new file mode 100644 index 000000000..9545a6bce --- /dev/null +++ b/src/zabapgit_object_ssfo.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SSFO + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SSFO + 28 + + + + + + diff --git a/src/zabapgit_object_ssst.prog.abap b/src/zabapgit_object_ssst.prog.abap new file mode 100644 index 000000000..4e4a6b6ea --- /dev/null +++ b/src/zabapgit_object_ssst.prog.abap @@ -0,0 +1,191 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SSST +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_ssst DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_ssst DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS validate_font + IMPORTING iv_tdfamily TYPE tdfamily + RAISING lcx_exception. + +ENDCLASS. "lcl_object_ssst DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_ssst IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_ssst IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_stylename TYPE stxsadm-stylename. + + + SELECT SINGLE stylename FROM stxsadm INTO lv_stylename + WHERE stylename = ms_item-obj_name. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD validate_font. + + DATA: lv_tdfamily TYPE tfo01-tdfamily. + + + SELECT SINGLE tdfamily FROM tfo01 INTO lv_tdfamily + WHERE tdfamily = iv_tdfamily. + IF sy-subrc <> 0. + _raise 'Font family not found'. + ENDIF. + + ENDMETHOD. "validate_font + + METHOD lif_object~serialize. +* see fm SSF_DOWNLOAD_STYLE + + DATA: lv_style_name TYPE tdssname, + ls_header TYPE ssfcats, + lt_paragraphs TYPE TABLE OF ssfparas, + lt_strings TYPE TABLE OF ssfstrings, + lt_tabstops TYPE TABLE OF stxstab. + + + lv_style_name = ms_item-obj_name. + + CALL FUNCTION 'SSF_READ_STYLE' + EXPORTING + i_style_name = lv_style_name + i_style_active_flag = 'A' + i_style_variant = '%MAIN' + i_style_language = mv_language + IMPORTING + e_header = ls_header + TABLES + e_paragraphs = lt_paragraphs + e_strings = lt_strings + e_tabstops = lt_tabstops + EXCEPTIONS + no_name = 1 + no_style = 2 + active_style_not_found = 3 + inactive_style_not_found = 4 + no_variant = 5 + no_main_variant = 6 + cancelled = 7 + no_access_permission = 8 + OTHERS = 9. + IF sy-subrc = 2. + RETURN. + ELSEIF sy-subrc <> 0. + _raise 'error from SSF_READ_STYLE'. + ENDIF. + + CLEAR ls_header-version. + CLEAR ls_header-firstuser. + CLEAR ls_header-firstdate. + CLEAR ls_header-firsttime. + CLEAR ls_header-lastuser. + CLEAR ls_header-lastdate. + CLEAR ls_header-lasttime. + + io_xml->add( iv_name = 'HEADER' + ig_data = ls_header ). + io_xml->add( ig_data = lt_paragraphs + iv_name = 'SSFPARAS' ). + io_xml->add( ig_data = lt_strings + iv_name = 'SSFSTRINGS' ). + io_xml->add( ig_data = lt_tabstops + iv_name = 'STXSTAB' ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. +* see fm SSF_UPLOAD_STYLE + + DATA: ls_header TYPE ssfcats, + lt_paragraphs TYPE TABLE OF ssfparas, + lt_strings TYPE TABLE OF ssfstrings, + lt_tabstops TYPE TABLE OF stxstab. + + + io_xml->read( EXPORTING iv_name = 'HEADER' + CHANGING cg_data = ls_header ). + io_xml->read( EXPORTING iv_name = 'SSFPARAS' + CHANGING cg_data = lt_paragraphs ). + io_xml->read( EXPORTING iv_name = 'SSFSTRINGS' + CHANGING cg_data = lt_strings ). + io_xml->read( EXPORTING iv_name = 'STXSTAB' + CHANGING cg_data = lt_tabstops ). + + validate_font( ls_header-tdfamily ). + + CALL FUNCTION 'SSF_SAVE_STYLE' + EXPORTING + i_header = ls_header + TABLES + i_paragraphs = lt_paragraphs + i_strings = lt_strings + i_tabstops = lt_tabstops. + + CALL FUNCTION 'SSF_ACTIVATE_STYLE' + EXPORTING + i_stylename = ls_header-stylename + EXCEPTIONS + no_name = 1 + no_style = 2 + cancelled = 3 + no_access_permission = 4 + illegal_language = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from SSF_ACTIVATE_STYLE'. + ENDIF. + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lv_stylename TYPE tdssname. + + + lv_stylename = ms_item-obj_name. + + CALL FUNCTION 'SSF_DELETE_STYLE' + EXPORTING + i_stylename = lv_stylename + i_with_dialog = abap_false + i_with_confirm_dialog = abap_false + EXCEPTIONS + no_name = 1 + no_style = 2 + style_locked = 3 + cancelled = 4 + no_access_permission = 5 + illegal_language = 6 + OTHERS = 7. + IF sy-subrc <> 0 AND sy-subrc <> 2. + _raise 'error from SSF_DELETE_STYLE'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + _raise 'todo'. + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_ssst IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_ssst.prog.xml b/src/zabapgit_object_ssst.prog.xml new file mode 100644 index 000000000..a39f3f914 --- /dev/null +++ b/src/zabapgit_object_ssst.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SSST + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SSST + 28 + + + + + + diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap new file mode 100644 index 000000000..bcb317d19 --- /dev/null +++ b/src/zabapgit_object_susc.prog.abap @@ -0,0 +1,117 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SUSC +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_susc DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_susc DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_susc DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_susc IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_susc IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_oclss TYPE tobc-oclss. + + + SELECT SINGLE oclss FROM tobc INTO lv_oclss + WHERE oclss = ms_item-obj_name. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: ls_tobc TYPE tobc, + ls_tobct TYPE tobct. + + + SELECT SINGLE * FROM tobc INTO ls_tobc + WHERE oclss = ms_item-obj_name. + IF sy-subrc <> 0. + RETURN. + ENDIF. + + SELECT SINGLE * FROM tobct INTO ls_tobct + WHERE oclss = ms_item-obj_name + AND langu = mv_language. + IF sy-subrc <> 0. + _raise 'TOBCT no english description'. + ENDIF. + + io_xml->add( iv_name = 'TOBC' + ig_data = ls_tobc ). + io_xml->add( iv_name = 'TOBCT' + ig_data = ls_tobct ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. +* see function group SUSA + + DATA: ls_tobc TYPE tobc, + lv_objectname TYPE e071-obj_name, + ls_tobct TYPE tobct. + + + io_xml->read( EXPORTING iv_name = 'TOBC' + CHANGING cg_data = ls_tobc ). + io_xml->read( EXPORTING iv_name = 'TOBCT' + CHANGING cg_data = ls_tobct ). + + lv_objectname = ms_item-obj_name. + CALL FUNCTION 'SUSR_COMMEDITCHECK' + EXPORTING + objectname = lv_objectname + transobjecttype = 'C'. + + INSERT tobc FROM ls_tobc. "#EC CI_SUBRC +* ignore sy-subrc as all fields are key fields + + MODIFY tobct FROM ls_tobct. "#EC CI_SUBRC + ASSERT sy-subrc = 0. + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lv_objclass TYPE tobc-oclss. + + + lv_objclass = ms_item-obj_name. + CALL FUNCTION 'SUSR_DELETE_OBJECT_CLASS' + EXPORTING + objclass = lv_objclass. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + DATA: lv_objclass TYPE tobc-oclss. + + + lv_objclass = ms_item-obj_name. + CALL FUNCTION 'SUSR_SHOW_OBJECT_CLASS' + EXPORTING + objclass = lv_objclass. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_susc IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_susc.prog.xml b/src/zabapgit_object_susc.prog.xml new file mode 100644 index 000000000..7a3199e11 --- /dev/null +++ b/src/zabapgit_object_susc.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SUSC + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SUSC + 28 + + + + + + diff --git a/src/zabapgit_object_suso.prog.abap b/src/zabapgit_object_suso.prog.abap new file mode 100644 index 000000000..5bd8b268e --- /dev/null +++ b/src/zabapgit_object_suso.prog.abap @@ -0,0 +1,164 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_SUSO +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_suso DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_suso DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_suso DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_suso IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_suso IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_objct TYPE tobj-objct. + + + SELECT SINGLE objct FROM tobj INTO lv_objct + WHERE objct = ms_item-obj_name. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: ls_tobj TYPE tobj, + ls_tobjt TYPE tobjt, + ls_tobjvorflg TYPE tobjvorflg, + lt_tactz TYPE TABLE OF tactz, + lt_tobjvordat TYPE TABLE OF tobjvordat, + lt_tobjvor TYPE TABLE OF tobjvor. + + + SELECT SINGLE * FROM tobj INTO ls_tobj + WHERE objct = ms_item-obj_name. + IF sy-subrc <> 0. + RETURN. + ENDIF. + CLEAR ls_tobj-bname. + + SELECT SINGLE * FROM tobjt INTO ls_tobjt + WHERE object = ms_item-obj_name + AND langu = mv_language. "#EC CI_GENBUFF + IF sy-subrc <> 0. + _raise 'TOBJT no english description'. + ENDIF. + + SELECT SINGLE * FROM tobjvorflg INTO ls_tobjvorflg + WHERE objct = ms_item-obj_name. "#EC CI_SUBRC + + SELECT * FROM tactz INTO TABLE lt_tactz + WHERE brobj = ms_item-obj_name + ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF + + SELECT * FROM tobjvordat INTO TABLE lt_tobjvordat + WHERE objct = ms_item-obj_name + ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF + + SELECT * FROM tobjvor INTO TABLE lt_tobjvor + WHERE objct = ms_item-obj_name + ORDER BY PRIMARY KEY. "#EC CI_SUBRC + + io_xml->add( iv_name = 'TOBJ' + ig_data = ls_tobj ). + io_xml->add( iv_name = 'TOBJT' + ig_data = ls_tobjt ). + io_xml->add( iv_name = 'TOBJVORFLG' + ig_data = ls_tobjvorflg ). + io_xml->add( ig_data = lt_tactz + iv_name = 'TACTZ' ). + io_xml->add( ig_data = lt_tobjvordat + iv_name = 'TOBJVORDAT' ). + io_xml->add( ig_data = lt_tobjvor + iv_name = 'TOBJVOR' ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. +* see function group SUSA + + DATA: lv_objectname TYPE e071-obj_name, + ls_tobj TYPE tobj, + ls_tobjt TYPE tobjt, + ls_tobjvorflg TYPE tobjvorflg, + lt_tactz TYPE TABLE OF tactz, + lt_tobjvordat TYPE TABLE OF tobjvordat, + lt_tobjvor TYPE TABLE OF tobjvor. + + + ASSERT NOT ms_item-obj_name IS INITIAL. + + io_xml->read( EXPORTING iv_name = 'TOBJ' + CHANGING cg_data = ls_tobj ). + ls_tobj-bname = sy-uname. + io_xml->read( EXPORTING iv_name = 'TOBJT' + CHANGING cg_data = ls_tobjt ). + io_xml->read( EXPORTING iv_name = 'TOBJVORFLG' + CHANGING cg_data = ls_tobjvorflg ). + io_xml->read( EXPORTING iv_name = 'TACTZ' + CHANGING cg_data = lt_tactz ). + io_xml->read( EXPORTING iv_name = 'TOBJVORDAT' + CHANGING cg_data = lt_tobjvordat ). + io_xml->read( EXPORTING iv_name = 'TOBJVOR' + CHANGING cg_data = lt_tobjvor ). + + lv_objectname = ms_item-obj_name. + CALL FUNCTION 'SUSR_COMMEDITCHECK' + EXPORTING + objectname = lv_objectname + transobjecttype = 'O'. + + MODIFY tobj FROM ls_tobj. "#EC CI_SUBRC + MODIFY tobjt FROM ls_tobjt. "#EC CI_SUBRC + MODIFY tobjvorflg FROM ls_tobjvorflg. "#EC CI_SUBRC + DELETE FROM tactz WHERE brobj = ms_item-obj_name. "#EC CI_SUBRC + INSERT tactz FROM TABLE lt_tactz. "#EC CI_SUBRC + DELETE FROM tobjvordat WHERE objct = ms_item-obj_name. "#EC CI_SUBRC + INSERT tobjvordat FROM TABLE lt_tobjvordat. "#EC CI_SUBRC + DELETE FROM tobjvor WHERE objct = ms_item-obj_name. "#EC CI_SUBRC + INSERT tobjvor FROM TABLE lt_tobjvor. "#EC CI_SUBRC + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lv_object TYPE tobj-objct. + + + lv_object = ms_item-obj_name. + CALL FUNCTION 'SUSR_DELETE_OBJECT' + EXPORTING + object = lv_object. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + DATA: lv_object TYPE tobj-objct. + + + lv_object = ms_item-obj_name. + CALL FUNCTION 'SUSR_SHOW_OBJECT' + EXPORTING + object = lv_object. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_suso IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_suso.prog.xml b/src/zabapgit_object_suso.prog.xml new file mode 100644 index 000000000..7630b96d1 --- /dev/null +++ b/src/zabapgit_object_suso.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_SUSO + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_SUSO + 28 + + + + + + diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap new file mode 100644 index 000000000..63ac32239 --- /dev/null +++ b/src/zabapgit_object_tabl.prog.abap @@ -0,0 +1,275 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_TABL +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_tabl DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_tabl DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_tabl IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_tabl IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_tabname TYPE dd02l-tabname. + + + SELECT SINGLE tabname FROM dd02l INTO lv_tabname + WHERE tabname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + jump_se11( iv_radio = 'RSRD1-DDTYPE' + iv_field = 'RSRD1-DDTYPE_VAL' ). + + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_objname TYPE rsedd0-ddobjname. + + + lv_objname = ms_item-obj_name. + + CALL FUNCTION 'RS_DD_DELETE_OBJ' + EXPORTING + no_ask = abap_false + objname = lv_objname + objtype = 'T' + EXCEPTIONS + not_executed = 1 + object_not_found = 2 + object_not_specified = 3 + permission_failure = 4. + IF sy-subrc <> 0. + _raise 'error from RS_DD_DELETE_OBJ, TABL'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. + + DATA: lv_name TYPE ddobjname, + ls_dd02v TYPE dd02v, + ls_dd09l TYPE dd09l, + lt_dd03p TYPE TABLE OF dd03p, + lt_dd05m TYPE TABLE OF dd05m, + lt_dd08v TYPE TABLE OF dd08v, + lt_dd12v TYPE dd12vtab, + lt_dd17v TYPE dd17vtab, + lt_dd35v TYPE TABLE OF dd35v, + lt_dd36m TYPE dd36mttyp. + + FIELD-SYMBOLS: LIKE LINE OF lt_dd12v, + LIKE LINE OF lt_dd03p. + + + lv_name = ms_item-obj_name. + + CALL FUNCTION 'DDIF_TABL_GET' + EXPORTING + name = lv_name + langu = mv_language + IMPORTING + dd02v_wa = ls_dd02v + dd09l_wa = ls_dd09l + TABLES + dd03p_tab = lt_dd03p + dd05m_tab = lt_dd05m + dd08v_tab = lt_dd08v + dd12v_tab = lt_dd12v + dd17v_tab = lt_dd17v + dd35v_tab = lt_dd35v + dd36m_tab = lt_dd36m + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error from DDIF_TABL_GET'. + ENDIF. + IF ls_dd02v IS INITIAL. + RETURN. " object does not exits + ENDIF. + + CLEAR: ls_dd02v-as4user, + ls_dd02v-as4date, + ls_dd02v-as4time. + + CLEAR: ls_dd09l-as4user, + ls_dd09l-as4date, + ls_dd09l-as4time. + + LOOP AT lt_dd12v ASSIGNING . + CLEAR: -as4user, + -as4date, + -as4time. + ENDLOOP. + + LOOP AT lt_dd03p ASSIGNING WHERE NOT rollname IS INITIAL. + CLEAR: -ddlanguage, + -dtelmaster, + -ddtext, + -reptext, + -scrtext_s, + -scrtext_m, + -scrtext_l. + +* XML output assumes correct field content + IF -routputlen = ' '. + CLEAR -routputlen. + ENDIF. + ENDLOOP. + + io_xml->add( iv_name = 'DD02V' + ig_data = ls_dd02v ). + io_xml->add( iv_name = 'DD09L' + ig_data = ls_dd09l ). + io_xml->add( ig_data = lt_dd03p + iv_name = 'DD03P_TABLE' ). + io_xml->add( ig_data = lt_dd05m + iv_name = 'DD05M_TABLE' ). + io_xml->add( ig_data = lt_dd08v + iv_name = 'DD08V_TABLE' ). + io_xml->add( iv_name = 'DD12V' + ig_data = lt_dd12v ). + io_xml->add( iv_name = 'DD17V' + ig_data = lt_dd17v ). + io_xml->add( ig_data = lt_dd35v + iv_name = 'DD35V_TALE' ). + io_xml->add( iv_name = 'DD36M' + ig_data = lt_dd36m ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_name TYPE ddobjname, + lv_tname TYPE trobj_name, + ls_dd02v TYPE dd02v, + ls_dd09l TYPE dd09l, + lt_dd03p TYPE TABLE OF dd03p, + lt_dd05m TYPE TABLE OF dd05m, + lt_dd08v TYPE TABLE OF dd08v, + lt_dd12v TYPE dd12vtab, + lt_dd17v TYPE dd17vtab, + ls_dd17v LIKE LINE OF lt_dd17v, + lt_secondary LIKE lt_dd17v, + lt_dd35v TYPE TABLE OF dd35v, + lt_dd36m TYPE dd36mttyp, + ls_dd12v LIKE LINE OF lt_dd12v. + + + io_xml->read( EXPORTING iv_name = 'DD02V' + CHANGING cg_data = ls_dd02v ). + io_xml->read( EXPORTING iv_name = 'DD09L' + CHANGING cg_data = ls_dd09l ). + io_xml->read( EXPORTING iv_name = 'DD03P_TABLE' + CHANGING cg_data = lt_dd03p ). + io_xml->read( EXPORTING iv_name = 'DD05M_TABLE' + CHANGING cg_data = lt_dd05m ). + io_xml->read( EXPORTING iv_name = 'DD08V_TABLE' + CHANGING cg_data = lt_dd08v ). + io_xml->read( EXPORTING iv_name = 'DD12V' + CHANGING cg_data = lt_dd12v ). + io_xml->read( EXPORTING iv_name = 'DD17V' + CHANGING cg_data = lt_dd17v ). + io_xml->read( EXPORTING iv_name = 'DD35V_TALE' + CHANGING cg_data = lt_dd35v ). + io_xml->read( EXPORTING iv_name = 'DD36M' + CHANGING cg_data = lt_dd36m ). + + corr_insert( iv_package ). + + lv_name = ms_item-obj_name. " type conversion + + CALL FUNCTION 'DDIF_TABL_PUT' + EXPORTING + name = lv_name + dd02v_wa = ls_dd02v + dd09l_wa = ls_dd09l + TABLES + dd03p_tab = lt_dd03p + dd05m_tab = lt_dd05m + dd08v_tab = lt_dd08v + dd35v_tab = lt_dd35v + dd36m_tab = lt_dd36m + EXCEPTIONS + tabl_not_found = 1 + name_inconsistent = 2 + tabl_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from DDIF_TABL_PUT'. + ENDIF. + + lcl_objects_activation=>add_item( ms_item ). + +* handle indexes + LOOP AT lt_dd12v INTO ls_dd12v. + +* todo, call corr_insert? + + CLEAR lt_secondary. + LOOP AT lt_dd17v INTO ls_dd17v + WHERE sqltab = ls_dd12v-sqltab AND indexname = ls_dd12v-indexname. + APPEND ls_dd17v TO lt_secondary. + ENDLOOP. + + CALL FUNCTION 'DDIF_INDX_PUT' + EXPORTING + name = ls_dd12v-sqltab + id = ls_dd12v-indexname + dd12v_wa = ls_dd12v + TABLES + dd17v_tab = lt_secondary + EXCEPTIONS + indx_not_found = 1 + name_inconsistent = 2 + indx_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from DDIF_INDX_PUT'. + ENDIF. + + CALL FUNCTION 'DD_DD_TO_E071' + EXPORTING + type = 'INDX' + name = ls_dd12v-sqltab + id = ls_dd12v-indexname + IMPORTING + obj_name = lv_tname. + + lcl_objects_activation=>add( iv_type = 'INDX' + iv_name = lv_tname ). + + ENDLOOP. + + ENDMETHOD. "deserialize + +ENDCLASS. "lcl_object_TABL IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_tabl.prog.xml b/src/zabapgit_object_tabl.prog.xml new file mode 100644 index 000000000..ca1c45f41 --- /dev/null +++ b/src/zabapgit_object_tabl.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_TABL + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_TABL + 28 + + + + + + diff --git a/src/zabapgit_object_tobj.prog.abap b/src/zabapgit_object_tobj.prog.abap new file mode 100644 index 000000000..1e6242ad6 --- /dev/null +++ b/src/zabapgit_object_tobj.prog.abap @@ -0,0 +1,178 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_TOBJ +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_tobj DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_tobj DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_tobj DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_tobj IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_tobj IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + rs_metadata-late_deser = abap_true. + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_objectname TYPE objh-objectname, + lv_type_pos TYPE i. + + lv_type_pos = strlen( ms_item-obj_name ) - 1. + + SELECT SINGLE objectname FROM objh INTO lv_objectname + WHERE objectname = ms_item-obj_name(lv_type_pos) + AND objecttype = ms_item-obj_name+lv_type_pos. "#EC CI_GENBUFF + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: ls_objh TYPE objh, + ls_objt TYPE objt, + lt_objs TYPE tt_objs, + lt_objsl TYPE tt_objsl, + lt_objm TYPE tt_objm, + lv_type_pos TYPE i. + + lv_type_pos = strlen( ms_item-obj_name ) - 1. + + ls_objh-objectname = ms_item-obj_name(lv_type_pos). + ls_objh-objecttype = ms_item-obj_name+lv_type_pos. + + CALL FUNCTION 'CTO_OBJECT_GET' + EXPORTING + iv_objectname = ls_objh-objectname + iv_objecttype = ls_objh-objecttype + iv_language = mv_language + iv_sel_objt = abap_true + iv_sel_objs = abap_true + iv_sel_objsl = abap_true + iv_sel_objm = abap_true + IMPORTING + es_objh = ls_objh + es_objt = ls_objt + TABLES + tt_objs = lt_objs + tt_objsl = lt_objsl + tt_objm = lt_objm + EXCEPTIONS + object_not_defined = 1 + OTHERS = 2. + IF sy-subrc = 1. + RETURN. + ELSEIF sy-subrc <> 0. + _raise 'error from CTO_OBJECT_GET'. + ENDIF. + + CLEAR: ls_objh-luser, + ls_objh-ldate. + + io_xml->add( iv_name = 'OBJH' + ig_data = ls_objh ). + io_xml->add( iv_name = 'OBJT' + ig_data = ls_objt ). + io_xml->add( iv_name = 'OBJS' + ig_data = lt_objs ). + io_xml->add( iv_name = 'OBJSL' + ig_data = lt_objsl ). + io_xml->add( iv_name = 'OBJM' + ig_data = lt_objm ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: ls_objh TYPE objh, + ls_objt TYPE objt, + lt_objs TYPE tt_objs, + lt_objsl TYPE tt_objsl, + lt_objm TYPE tt_objm. + + + io_xml->read( EXPORTING iv_name = 'OBJH' + CHANGING cg_data = ls_objh ). + io_xml->read( EXPORTING iv_name = 'OBJT' + CHANGING cg_data = ls_objt ). + io_xml->read( EXPORTING iv_name = 'OBJS' + CHANGING cg_data = lt_objs ). + io_xml->read( EXPORTING iv_name = 'OBJSL' + CHANGING cg_data = lt_objsl ). + io_xml->read( EXPORTING iv_name = 'OBJM' + CHANGING cg_data = lt_objm ). + + CALL FUNCTION 'OBJ_GENERATE' + EXPORTING + iv_objectname = ls_objh-objectname + iv_objecttype = ls_objh-objecttype + iv_maint_mode = 'I' + iv_objecttext = ls_objt-ddtext + iv_objcateg = ls_objh-objcateg + iv_objtransp = ls_objh-objtransp + iv_devclass = iv_package + TABLES + tt_v_obj_s = lt_objs + tt_objm = lt_objm + EXCEPTIONS + illegal_call = 1 + object_not_found = 2 + generate_error = 3 + transport_error = 4 + object_enqueue_failed = 5 + OTHERS = 6. + IF sy-subrc <> 0. +* TOBJ has to be saved/generated after the DDIC tables have been +* activated - fixed with late deserialization + _raise 'error from OBJ_GENERATE'. + ENDIF. + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: ls_objh TYPE objh, + lv_type_pos TYPE i. + + lv_type_pos = strlen( ms_item-obj_name ) - 1. + + ls_objh-objectname = ms_item-obj_name(lv_type_pos). + ls_objh-objecttype = ms_item-obj_name+lv_type_pos. + + CALL FUNCTION 'OBJ_GENERATE' + EXPORTING + iv_objectname = ls_objh-objectname + iv_objecttype = ls_objh-objecttype + iv_maint_mode = 'D' + EXCEPTIONS + illegal_call = 1 + object_not_found = 2 + generate_error = 3 + transport_error = 4 + object_enqueue_failed = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from OBJ_GENERATE'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + _raise 'todo, TOBJ jump'. + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_tobj IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_tobj.prog.xml b/src/zabapgit_object_tobj.prog.xml new file mode 100644 index 000000000..3198d35a3 --- /dev/null +++ b/src/zabapgit_object_tobj.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_TOBJ + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_TOBJ + 28 + + + + + + diff --git a/src/zabapgit_object_tran.prog.abap b/src/zabapgit_object_tran.prog.abap new file mode 100644 index 000000000..99b918992 --- /dev/null +++ b/src/zabapgit_object_tran.prog.abap @@ -0,0 +1,408 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_TRAN +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_tran DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_tran DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + + CONSTANTS: c_oo_program(9) VALUE '\PROGRAM=', + c_oo_class(7) VALUE '\CLASS=', + c_oo_method(8) VALUE '\METHOD=', + c_oo_tcode TYPE tcode VALUE 'OS_APPLICATION', + c_oo_frclass(30) VALUE 'CLASS', + c_oo_frmethod(30) VALUE 'METHOD', + c_oo_frupdtask(30) VALUE 'UPDATE_MODE', + c_oo_synchron VALUE 'S', + c_oo_asynchron VALUE 'U', + c_true TYPE c VALUE 'X', + c_false TYPE c VALUE space. + + METHODS: + split_parameters + CHANGING ct_rsparam TYPE s_param + cs_rsstcd TYPE rsstcd + cs_tstcp TYPE tstcp + cs_tstc TYPE tstc, + split_parameters_comp + IMPORTING iv_type TYPE any + iv_param TYPE any + CHANGING cg_value TYPE any. + +ENDCLASS. "lcl_object_TRAN DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_msag IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_tran IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD split_parameters_comp. + DATA: lv_off TYPE i. + + IF iv_param CS iv_type. + lv_off = sy-fdpos + strlen( iv_type ). + cg_value = iv_param+lv_off. + IF cg_value CA '\'. + CLEAR cg_value+sy-fdpos. + ENDIF. + ENDIF. + ENDMETHOD. "split_parameters_comp + + METHOD split_parameters. +* see subroutine split_parameters in include LSEUKF01 + + DATA: lv_off TYPE i, + lv_param_beg TYPE i, + lv_length TYPE i, + ls_param LIKE LINE OF ct_rsparam. + + FIELD-SYMBOLS TYPE any. + + + CLEAR cs_rsstcd-s_vari. + + IF cs_tstcp-param(1) = '\'. " OO-Transaktion ohne FR + split_parameters_comp( EXPORTING iv_type = c_oo_program + iv_param = cs_tstcp-param + CHANGING cg_value = cs_tstc-pgmna ). + split_parameters_comp( EXPORTING iv_type = c_oo_class + iv_param = cs_tstcp-param + CHANGING cg_value = cs_rsstcd-classname ). + split_parameters_comp( EXPORTING iv_type = c_oo_method + iv_param = cs_tstcp-param + CHANGING cg_value = cs_rsstcd-method ). + + IF NOT cs_tstc-pgmna IS INITIAL. + cs_rsstcd-s_local = c_true. + ENDIF. + RETURN. + ELSEIF cs_tstcp-param(1) = '@'. " Transaktionsvariante + cs_rsstcd-s_vari = c_true. + IF cs_tstcp-param(2) = '@@'. + cs_rsstcd-s_ind_vari = c_true. + lv_off = 2. + ELSE. + CLEAR cs_rsstcd-s_ind_vari. + lv_off = 1. + ENDIF. + sy-fdpos = sy-fdpos - lv_off. + IF sy-fdpos > 0. + cs_rsstcd-call_tcode = cs_tstcp-param+lv_off(sy-fdpos). + sy-fdpos = sy-fdpos + 1 + lv_off. + cs_rsstcd-variant = cs_tstcp-param+sy-fdpos. + ENDIF. + ELSEIF cs_tstcp-param(1) = '/'. + cs_rsstcd-st_tcode = c_true. + cs_rsstcd-st_prog = space. + IF cs_tstcp-param+1(1) = '*'. + cs_rsstcd-st_skip_1 = c_true. + ELSE. + CLEAR cs_rsstcd-st_skip_1. + ENDIF. + lv_param_beg = sy-fdpos + 1. + sy-fdpos = sy-fdpos - 2. + IF sy-fdpos > 0. + cs_rsstcd-call_tcode = cs_tstcp-param+2(sy-fdpos). + ENDIF. + SHIFT cs_tstcp-param BY lv_param_beg PLACES. + ELSE. + cs_rsstcd-st_tcode = space. + cs_rsstcd-st_prog = c_true. + ENDIF. + + DO 254 TIMES. + IF cs_tstcp-param = space. + EXIT. + ENDIF. + CLEAR ls_param. + IF cs_tstcp-param CA '='. + CHECK sy-fdpos <> 0. + ASSIGN cs_tstcp-param(sy-fdpos) TO . + ls_param-field = . + IF ls_param-field(1) = space. + SHIFT ls_param-field. + ENDIF. + sy-fdpos = sy-fdpos + 1. + SHIFT cs_tstcp-param BY sy-fdpos PLACES. + IF cs_tstcp-param CA ';'. + IF sy-fdpos <> 0. + ASSIGN cs_tstcp-param(sy-fdpos) TO . + ls_param-value = . + IF ls_param-value(1) = space. + SHIFT ls_param-value. + ENDIF. + ENDIF. + sy-fdpos = sy-fdpos + 1. + SHIFT cs_tstcp-param BY sy-fdpos PLACES. + APPEND ls_param TO ct_rsparam. + ELSE. + lv_length = strlen( cs_tstcp-param ). + CHECK lv_length > 0. + ASSIGN cs_tstcp-param(lv_length) TO . + ls_param-value = . + IF ls_param-value(1) = space. + SHIFT ls_param-value. + ENDIF. + lv_length = lv_length + 1. + SHIFT cs_tstcp-param BY lv_length PLACES. + APPEND ls_param TO ct_rsparam. + ENDIF. + ENDIF. + ENDDO. +* oo-Transaktion mit Framework + IF cs_rsstcd-call_tcode = c_oo_tcode. + cs_rsstcd-s_trframe = c_true. + LOOP AT ct_rsparam INTO ls_param. + CASE ls_param-field. + WHEN c_oo_frclass. + cs_rsstcd-classname = ls_param-value. + WHEN c_oo_frmethod. + cs_rsstcd-method = ls_param-value. + WHEN c_oo_frupdtask. + IF ls_param-value = c_oo_synchron. + cs_rsstcd-s_upddir = c_true. + cs_rsstcd-s_updtask = c_false. + cs_rsstcd-s_updlok = c_false. + ELSEIF ls_param-value = c_oo_asynchron. + cs_rsstcd-s_upddir = c_false. + cs_rsstcd-s_updtask = c_true. + cs_rsstcd-s_updlok = c_false. + ELSE. + cs_rsstcd-s_upddir = c_false. + cs_rsstcd-s_updtask = c_false. + cs_rsstcd-s_updlok = c_true. + ENDIF. + ENDCASE. + ENDLOOP. + ENDIF. + ENDMETHOD. "split_parameters + + METHOD lif_object~exists. + + DATA: lv_tcode TYPE tstc-tcode. + + + SELECT SINGLE tcode FROM tstc INTO lv_tcode + WHERE tcode = ms_item-obj_name. "#EC CI_GENBUFF + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + DATA: lt_bdcdata TYPE TABLE OF bdcdata. + + FIELD-SYMBOLS: LIKE LINE OF lt_bdcdata. + + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -program = 'SAPLSEUK'. + -dynpro = '0390'. + -dynbegin = abap_true. + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -fnam = 'BDC_OKCODE'. + -fval = '=SHOW'. + + APPEND INITIAL LINE TO lt_bdcdata ASSIGNING . + -fnam = 'TSTC-TCODE'. + -fval = ms_item-obj_name. + + CALL FUNCTION 'ABAP4_CALL_TRANSACTION' + STARTING NEW TASK 'GIT' + EXPORTING + tcode = 'SE93' + mode_val = 'E' + TABLES + using_tab = lt_bdcdata + EXCEPTIONS + system_failure = 1 + communication_failure = 2 + resource_failure = 3 + OTHERS = 4 + ##fm_subrc_ok + . "#EC CI_SUBRC + + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_transaction TYPE tstc-tcode. + + + lv_transaction = ms_item-obj_name. + + CALL FUNCTION 'RPY_TRANSACTION_DELETE' + EXPORTING + transaction = lv_transaction + EXCEPTIONS + not_excecuted = 1 + object_not_found = 2 + OTHERS = 3. + IF sy-subrc <> 0. + _raise 'Error from RPY_TRANSACTION_DELETE'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~deserialize. + + CONSTANTS: lc_hex_tra TYPE x VALUE '00', +* c_hex_men TYPE x VALUE '01', + lc_hex_par TYPE x VALUE '02', + lc_hex_rep TYPE x VALUE '80'. +* c_hex_rpv TYPE x VALUE '10', +* c_hex_obj TYPE x VALUE '08', +* c_hex_chk TYPE x VALUE '04', +* c_hex_enq TYPE x VALUE '20'. + + DATA: lv_dynpro TYPE d020s-dnum, + ls_tstc TYPE tstc, + lv_type TYPE rglif-docutype, + ls_tstct TYPE tstct, + ls_tstcc TYPE tstcc, + ls_tstcp TYPE tstcp, + lt_param_values TYPE TABLE OF rsparam, + ls_rsstcd TYPE rsstcd. + + io_xml->read( EXPORTING iv_name = 'TSTC' + CHANGING cg_data = ls_tstc ). + io_xml->read( EXPORTING iv_name = 'TSTCC' + CHANGING cg_data = ls_tstcc ). + io_xml->read( EXPORTING iv_name = 'TSTCT' + CHANGING cg_data = ls_tstct ). + io_xml->read( EXPORTING iv_name = 'TSTCP' + CHANGING cg_data = ls_tstcp ). + + lv_dynpro = ls_tstc-dypno. + + CASE ls_tstc-cinfo. + WHEN lc_hex_tra. + lv_type = ststc_c_type_dialog. + WHEN lc_hex_rep. + lv_type = ststc_c_type_report. + WHEN lc_hex_par. + lv_type = ststc_c_type_parameters. +* todo, or ststc_c_type_variant? + WHEN OTHERS. + _raise 'Transaction, unknown CINFO'. + ENDCASE. + + IF ls_tstcp IS NOT INITIAL. + split_parameters( + CHANGING + ct_rsparam = lt_param_values + cs_rsstcd = ls_rsstcd + cs_tstcp = ls_tstcp + cs_tstc = ls_tstc ). + ENDIF. + + CALL FUNCTION 'RPY_TRANSACTION_INSERT' + EXPORTING + transaction = ls_tstc-tcode + program = ls_tstc-pgmna + dynpro = lv_dynpro + language = mv_language + development_class = iv_package + transaction_type = lv_type + shorttext = ls_tstct-ttext + called_transaction = ls_rsstcd-call_tcode + called_transaction_skip = ls_rsstcd-st_skip_1 + variant = ls_rsstcd-variant + cl_independend = ls_rsstcd-s_ind_vari + html_enabled = ls_tstcc-s_webgui + java_enabled = ls_tstcc-s_platin + wingui_enabled = ls_tstcc-s_win32 + TABLES + param_values = lt_param_values + EXCEPTIONS + cancelled = 1 + already_exist = 2 + permission_error = 3 + name_not_allowed = 4 + name_conflict = 5 + illegal_type = 6 + object_inconsistent = 7 + db_access_error = 8 + OTHERS = 9. + IF sy-subrc <> 0. + _raise 'Error from RPY_TRANSACTION_INSERT'. + ENDIF. + + ENDMETHOD. "deserialize + + METHOD lif_object~serialize. + + DATA: lv_transaction TYPE tstc-tcode, + lt_tcodes TYPE TABLE OF tstc, + ls_tcode LIKE LINE OF lt_tcodes, + ls_tstct TYPE tstct, + ls_tstcp TYPE tstcp, + lt_gui_attr TYPE TABLE OF tstcc, + ls_gui_attr LIKE LINE OF lt_gui_attr. + + + lv_transaction = ms_item-obj_name. + + CALL FUNCTION 'RPY_TRANSACTION_READ' + EXPORTING + transaction = lv_transaction + TABLES + tcodes = lt_tcodes + gui_attributes = lt_gui_attr + EXCEPTIONS + permission_error = 1 + cancelled = 2 + not_found = 3 + object_not_found = 4 + OTHERS = 5. + IF sy-subrc = 4 OR sy-subrc = 3. + RETURN. + ELSEIF sy-subrc <> 0. + _raise 'Error from RPY_TRANSACTION_READ'. + ENDIF. + + SELECT SINGLE * FROM tstct INTO ls_tstct + WHERE sprsl = mv_language + AND tcode = lv_transaction. "#EC CI_GENBUFF + IF sy-subrc <> 0. + _raise 'Transaction description not found'. + ENDIF. + + SELECT SINGLE * FROM tstcp INTO ls_tstcp + WHERE tcode = lv_transaction. "#EC CI_SUBRC "#EC CI_GENBUFF + + READ TABLE lt_tcodes INDEX 1 INTO ls_tcode. + ASSERT sy-subrc = 0. + READ TABLE lt_gui_attr INDEX 1 INTO ls_gui_attr. + ASSERT sy-subrc = 0. + + io_xml->add( iv_name = 'TSTC' + ig_data = ls_tcode ). + io_xml->add( iv_name = 'TSTCC' + ig_data = ls_gui_attr ). + io_xml->add( iv_name = 'TSTCT' + ig_data = ls_tstct ). + IF ls_tstcp IS NOT INITIAL. + io_xml->add( iv_name = 'TSTCP' + ig_data = ls_tstcp ). + ENDIF. + + ENDMETHOD. "serialize + +ENDCLASS. "lcl_object_tran IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_tran.prog.xml b/src/zabapgit_object_tran.prog.xml new file mode 100644 index 000000000..0e52e4fbb --- /dev/null +++ b/src/zabapgit_object_tran.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_TRAN + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_TRAN + 28 + + + + + + diff --git a/src/zabapgit_object_ttyp.prog.abap b/src/zabapgit_object_ttyp.prog.abap new file mode 100644 index 000000000..0d6059040 --- /dev/null +++ b/src/zabapgit_object_ttyp.prog.abap @@ -0,0 +1,155 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_TTYP +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_ttyp DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_ttyp DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_ttyp IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_ttyp IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_typename TYPE dd40l-typename. + + + SELECT SINGLE typename FROM dd40l INTO lv_typename + WHERE typename = ms_item-obj_name + AND as4local = 'A'. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + jump_se11( iv_radio = 'RSRD1-DDTYPE' + iv_field = 'RSRD1-DDTYPE_VAL' ). + + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_objname TYPE rsedd0-ddobjname. + + + lv_objname = ms_item-obj_name. + + CALL FUNCTION 'RS_DD_DELETE_OBJ' + EXPORTING + no_ask = abap_true + objname = lv_objname + objtype = 'A' + EXCEPTIONS + not_executed = 1 + object_not_found = 2 + object_not_specified = 3 + permission_failure = 4. + IF sy-subrc <> 0. + _raise 'error from RS_DD_DELETE_OBJ, TTYP'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. + + DATA: lv_name TYPE ddobjname, + lt_dd42v TYPE dd42v_tab, + lt_dd43v TYPE dd43v_tab, + ls_dd40v TYPE dd40v. + + + lv_name = ms_item-obj_name. + + CALL FUNCTION 'DDIF_TTYP_GET' + EXPORTING + name = lv_name + state = 'A' + langu = mv_language + IMPORTING + dd40v_wa = ls_dd40v + TABLES + dd42v_tab = lt_dd42v + dd43v_tab = lt_dd43v + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error from DDIF_TTYP_GET'. + ENDIF. + IF ls_dd40v IS INITIAL. + RETURN. " does not exist in system + ENDIF. + + CLEAR: ls_dd40v-as4user, + ls_dd40v-as4date, + ls_dd40v-as4time. + + io_xml->add( iv_name = 'DD40V' + ig_data = ls_dd40v ). + io_xml->add( iv_name = 'DD42V' + ig_data = lt_dd42v ). + io_xml->add( iv_name = 'DD43V' + ig_data = lt_dd43v ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_name TYPE ddobjname, + lt_dd42v TYPE dd42v_tab, + lt_dd43v TYPE dd43v_tab, + ls_dd40v TYPE dd40v. + + + io_xml->read( EXPORTING iv_name = 'DD40V' + CHANGING cg_data = ls_dd40v ). + io_xml->read( EXPORTING iv_name = 'DD42V' + CHANGING cg_data = lt_dd42v ). + io_xml->read( EXPORTING iv_name = 'DD43V' + CHANGING cg_data = lt_dd43v ). + + corr_insert( iv_package ). + + lv_name = ms_item-obj_name. " type conversion + + CALL FUNCTION 'DDIF_TTYP_PUT' + EXPORTING + name = lv_name + dd40v_wa = ls_dd40v + TABLES + dd42v_tab = lt_dd42v + dd43v_tab = lt_dd43v + EXCEPTIONS + ttyp_not_found = 1 + name_inconsistent = 2 + ttyp_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from DDIF_TTYP_PUT'. + ENDIF. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + +ENDCLASS. "lcl_object_ttyp IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_ttyp.prog.xml b/src/zabapgit_object_ttyp.prog.xml new file mode 100644 index 000000000..ffd8a5c56 --- /dev/null +++ b/src/zabapgit_object_ttyp.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_TTYP + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_TTYP + 28 + + + + + + diff --git a/src/zabapgit_object_type.prog.abap b/src/zabapgit_object_type.prog.abap new file mode 100644 index 000000000..6f9160813 --- /dev/null +++ b/src/zabapgit_object_type.prog.abap @@ -0,0 +1,200 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_TYPE +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_type DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_type DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS read + EXPORTING ev_ddtext TYPE ddtypet-ddtext + et_source TYPE abaptxt255_tab + RAISING lcx_exception + lcx_not_found. + + METHODS create + IMPORTING iv_ddtext TYPE ddtypet-ddtext + it_source TYPE abaptxt255_tab + iv_devclass TYPE devclass + RAISING lcx_exception. + +ENDCLASS. "lcl_object_type DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_type IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_type IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + TRY. + read( ). + rv_bool = abap_true. + CATCH lcx_not_found. + rv_bool = abap_false. + ENDTRY. + + ENDMETHOD. "lif_object~exists + + METHOD read. + + DATA: lv_typdname TYPE rsedd0-typegroup, + lt_psmodisrc TYPE TABLE OF smodisrc, + lt_psmodilog TYPE TABLE OF smodilog, + lt_ptrdir TYPE TABLE OF trdir. + + + SELECT SINGLE ddtext FROM ddtypet + INTO ev_ddtext + WHERE typegroup = ms_item-obj_name + AND ddlanguage = mv_language. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE lcx_not_found. + ENDIF. + + lv_typdname = ms_item-obj_name. + CALL FUNCTION 'TYPD_GET_OBJECT' + EXPORTING + typdname = lv_typdname + TABLES + psmodisrc = lt_psmodisrc + psmodilog = lt_psmodilog + psource = et_source + ptrdir = lt_ptrdir + EXCEPTIONS + version_not_found = 1 + reps_not_exist = 2 + OTHERS = 3. + IF sy-subrc <> 0. + _raise 'error from TYPD_GET_OBJECT'. + ENDIF. + + ENDMETHOD. "read + + METHOD lif_object~serialize. + + DATA: lv_ddtext TYPE ddtypet-ddtext, + lt_source TYPE abaptxt255_tab. + + + TRY. + read( IMPORTING + ev_ddtext = lv_ddtext + et_source = lt_source ). + CATCH lcx_not_found. + RETURN. + ENDTRY. + + io_xml->add( iv_name = 'DDTEXT' + ig_data = lv_ddtext ). + + mo_files->add_abap( lt_source ). + + ENDMETHOD. "serialize + + METHOD create. + + DATA: lv_progname TYPE reposrc-progname, + lv_typegroup TYPE rsedd0-typegroup. + + + lv_typegroup = ms_item-obj_name. + + IF lif_object~exists( ) = abap_true. + lif_object~delete( ). + ENDIF. + + CALL FUNCTION 'RS_DD_TYGR_INSERT_SOURCES' + EXPORTING + typegroupname = lv_typegroup + ddtext = iv_ddtext + corrnum = '' + devclass = iv_devclass + TABLES + source = it_source + EXCEPTIONS + already_exists = 1 + not_executed = 2 + permission_failure = 3 + object_not_specified = 4 + illegal_name = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from RS_DD_TYGR_INSERT_SOURCES'. + ENDIF. + + CONCATENATE '%_C' lv_typegroup INTO lv_progname. + UPDATE progdir SET uccheck = abap_true + WHERE name = lv_progname. + IF sy-subrc <> 0. + _raise 'error setting uccheck'. + ENDIF. + + ENDMETHOD. "create + + METHOD lif_object~deserialize. + + DATA: lv_ddtext TYPE ddtypet-ddtext, + lt_source TYPE abaptxt255_tab. + + + io_xml->read( EXPORTING iv_name = 'DDTEXT' + CHANGING cg_data = lv_ddtext ). + + lt_source = mo_files->read_abap( ). + + create( iv_ddtext = lv_ddtext + it_source = lt_source + iv_devclass = iv_package ). + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lv_objname TYPE rsedd0-ddobjname. + + + lv_objname = ms_item-obj_name. + + CALL FUNCTION 'RS_DD_DELETE_OBJ' + EXPORTING + no_ask = abap_true + objname = lv_objname + objtype = 'G' + EXCEPTIONS + not_executed = 1 + object_not_found = 2 + object_not_specified = 3 + permission_failure = 4 + dialog_needed = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error deleting TYPE'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + jump_se11( iv_radio = 'RSRD1-TYMA' + iv_field = 'RSRD1-TYMA_VAL' ). + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_type IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_type.prog.xml b/src/zabapgit_object_type.prog.xml new file mode 100644 index 000000000..6e2711cee --- /dev/null +++ b/src/zabapgit_object_type.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_TYPE + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_TYPE + 28 + + + + + + diff --git a/src/zabapgit_object_vcls.prog.abap b/src/zabapgit_object_vcls.prog.abap new file mode 100644 index 000000000..364dd7ec3 --- /dev/null +++ b/src/zabapgit_object_vcls.prog.abap @@ -0,0 +1,184 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_VCLS +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_vcls DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_vcls DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + + PRIVATE SECTION. +* See include MTOBJCON: + CONSTANTS: c_cluster_type TYPE c VALUE 'C'. + CONSTANTS: c_mode_insert TYPE obj_para-maint_mode VALUE 'I'. + +ENDCLASS. "lcl_object_vcls DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_vcls IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_vcls IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + DATA lv_vclname TYPE vcl_name. + + SELECT SINGLE vclname INTO lv_vclname FROM vcldir + WHERE vclname = ms_item-obj_name. + + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~serialize. + + DATA: lv_vclname TYPE vcl_name, + ls_vcldir_entry TYPE v_vcldir, + lt_vclstruc TYPE TABLE OF v_vclstruc, + lt_vclstrudep TYPE TABLE OF v_vclstdep, + lt_vclmf TYPE TABLE OF v_vclmf. + + + IF lif_object~exists( ) = abap_false. + RETURN. + ENDIF. + + lv_vclname = ms_item-obj_name. + + CALL FUNCTION 'VIEWCLUSTER_GET_DEFINITION' + EXPORTING + vclname = lv_vclname + IMPORTING + vcldir_entry = ls_vcldir_entry + TABLES + vclstruc_tab = lt_vclstruc + vclstrudep_tab = lt_vclstrudep + vclmf_tab = lt_vclmf + EXCEPTIONS + viewcluster_not_found = 1 + incomplete_viewcluster = 2 + OTHERS = 3. + IF sy-subrc <> 0. + _raise 'error in VIEWCLUSTER_GET_DEFINITION'. + ENDIF. + + CLEAR ls_vcldir_entry-author. + + io_xml->add( iv_name = 'VCLDIR' + ig_data = ls_vcldir_entry ). + io_xml->add( iv_name = 'VLCSTRUC_TAB' + ig_data = lt_vclstruc ). + io_xml->add( iv_name = 'VCLSTRUDEP_TAB' + ig_data = lt_vclstrudep ). + io_xml->add( iv_name = 'VCLMF_TAB' + ig_data = lt_vclmf ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: ls_vcldir_entry TYPE v_vcldir, + lt_vclstruc TYPE TABLE OF v_vclstruc, + lt_vclstrudep TYPE TABLE OF v_vclstdep, + lt_vclmf TYPE TABLE OF v_vclmf, + lv_objectname TYPE ob_object. + + + io_xml->read( EXPORTING iv_name = 'VCLDIR' + CHANGING cg_data = ls_vcldir_entry ). + io_xml->read( EXPORTING iv_name = 'VLCSTRUC_TAB' + CHANGING cg_data = lt_vclstruc ). + io_xml->read( EXPORTING iv_name = 'VCLSTRUDEP_TAB' + CHANGING cg_data = lt_vclstrudep ). + io_xml->read( EXPORTING iv_name = 'lt_vclstrudep' + CHANGING cg_data = lt_vclmf ). + + ls_vcldir_entry-author = sy-uname. + + CALL FUNCTION 'VIEWCLUSTER_SAVE_DEFINITION' + EXPORTING + vcldir_entry = ls_vcldir_entry + TABLES + vclstruc_tab = lt_vclstruc + vclstrudep_tab = lt_vclstrudep + vclmf_tab = lt_vclmf. + + lv_objectname = ls_vcldir_entry-vclname. + CALL FUNCTION 'OBJ_GENERATE' + EXPORTING + iv_objectname = lv_objectname + iv_objecttype = c_cluster_type + iv_maint_mode = c_mode_insert + iv_devclass = iv_package + EXCEPTIONS + illegal_call = 1 + object_not_found = 2 + generate_error = 3 + transport_error = 4 + object_enqueue_failed = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error in OBJ_GENERATE for VCLS'. + ENDIF. + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. +* Do the same as in VIEWCLUSTER_SAVE_DEFINITION + DATA: lv_vclname TYPE vcl_name. + + + lv_vclname = ms_item-obj_name. + + DELETE FROM vcldir WHERE vclname = lv_vclname. "#EC CI_SUBRC + DELETE FROM vcldirt WHERE vclname = lv_vclname. "#EC CI_NOFIRST "#EC CI_SUBRC + DELETE FROM vclstruc WHERE vclname = lv_vclname. "#EC CI_SUBRC + DELETE FROM vclstruct WHERE vclname = lv_vclname. "#EC CI_NOFIRST "#EC CI_SUBRC + DELETE FROM vclstrudep WHERE vclname = lv_vclname. "#EC CI_SUBRC + DELETE FROM vclmf WHERE vclname = lv_vclname. "#EC CI_SUBRC + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + DATA: lv_vclname TYPE vcl_name. + + lv_vclname = ms_item-obj_name. + CALL FUNCTION 'VIEWCLUSTER_MAINTENANCE_CALL' + EXPORTING + viewcluster_name = lv_vclname + maintenance_action = 'S' + EXCEPTIONS + client_reference = 1 + foreign_lock = 2 + viewcluster_not_found = 3 + viewcluster_is_inconsistent = 4 + missing_generated_function = 5 + no_upd_auth = 6 + no_show_auth = 7 + object_not_found = 8 + no_tvdir_entry = 9 + no_clientindep_auth = 10 + invalid_action = 11 + saving_correction_failed = 12 + system_failure = 13 + unknown_field_in_dba_sellist = 14 + missing_corr_number = 15 + OTHERS = 16. + IF sy-subrc <> 0. + _raise 'error in VIEWCLUSTER_MAINTENANCE_CALL'. + ENDIF. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_vcls IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_vcls.prog.xml b/src/zabapgit_object_vcls.prog.xml new file mode 100644 index 000000000..9d5c37372 --- /dev/null +++ b/src/zabapgit_object_vcls.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_VCLS + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_VCLS + 28 + + + + + + diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap new file mode 100644 index 000000000..e51e16e6b --- /dev/null +++ b/src/zabapgit_object_view.prog.abap @@ -0,0 +1,184 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_VIEW +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_view DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_view DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_dtel DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_view IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_view IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_viewname TYPE dd25l-viewname. + + + SELECT SINGLE viewname FROM dd25l INTO lv_viewname + WHERE viewname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + + jump_se11( iv_radio = 'RSRD1-VIMA' + iv_field = 'RSRD1-VIMA_VAL' ). + + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: lv_objname TYPE rsedd0-ddobjname. + + + lv_objname = ms_item-obj_name. + + CALL FUNCTION 'RS_DD_DELETE_OBJ' + EXPORTING + no_ask = abap_true + objname = lv_objname + objtype = 'V' + EXCEPTIONS + not_executed = 1 + object_not_found = 2 + object_not_specified = 3 + permission_failure = 4. + IF sy-subrc <> 0. + _raise 'error from RS_DD_DELETE_OBJ, VIEW'. + ENDIF. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. + + DATA: lv_name TYPE ddobjname, + ls_dd25v TYPE dd25v, + ls_dd09l TYPE dd09l, + lt_dd26v TYPE TABLE OF dd26v, + lt_dd27p TYPE TABLE OF dd27p, + lt_dd28j TYPE TABLE OF dd28j, + lt_dd28v TYPE TABLE OF dd28v. + + + lv_name = ms_item-obj_name. + + CALL FUNCTION 'DDIF_VIEW_GET' + EXPORTING + name = lv_name + state = 'A' + langu = mv_language + IMPORTING + dd25v_wa = ls_dd25v + dd09l_wa = ls_dd09l + TABLES + dd26v_tab = lt_dd26v + dd27p_tab = lt_dd27p + dd28j_tab = lt_dd28j + dd28v_tab = lt_dd28v + EXCEPTIONS + illegal_input = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error from DDIF_VIEW_GET'. + ENDIF. + IF ls_dd25v IS INITIAL. + RETURN. " does not exist in system + ENDIF. + + CLEAR: ls_dd25v-as4user, + ls_dd25v-as4date, + ls_dd25v-as4time. + + CLEAR: ls_dd09l-as4user, + ls_dd09l-as4date, + ls_dd09l-as4time. + + io_xml->add( iv_name = 'DD25V' + ig_data = ls_dd25v ). + io_xml->add( iv_name = 'DD09L' + ig_data = ls_dd09l ). + io_xml->add( ig_data = lt_dd26v + iv_name = 'DD26V_TABLE' ). + io_xml->add( ig_data = lt_dd27p + iv_name = 'DD27P_TABLE' ). + io_xml->add( ig_data = lt_dd28j + iv_name = 'DD28J_TABLE' ). + io_xml->add( ig_data = lt_dd28v + iv_name = 'DD28V_TABLE' ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: lv_name TYPE ddobjname, + ls_dd25v TYPE dd25v, + ls_dd09l TYPE dd09l, + lt_dd26v TYPE TABLE OF dd26v, + lt_dd27p TYPE TABLE OF dd27p, + lt_dd28j TYPE TABLE OF dd28j, + lt_dd28v TYPE TABLE OF dd28v. + + + io_xml->read( EXPORTING iv_name = 'DD25V' + CHANGING cg_data = ls_dd25v ). + io_xml->read( EXPORTING iv_name = 'DD09L' + CHANGING cg_data = ls_dd09l ). + io_xml->read( EXPORTING iv_name = 'DD26V_TABLE' + CHANGING cg_data = lt_dd26v ). + io_xml->read( EXPORTING iv_name = 'DD27P_TABLE' + CHANGING cg_data = lt_dd27p ). + io_xml->read( EXPORTING iv_name = 'DD28J_TABLE' + CHANGING cg_data = lt_dd28j ). + io_xml->read( EXPORTING iv_name = 'DD28V_TABLE' + CHANGING cg_data = lt_dd28v ). + + corr_insert( iv_package ). + + lv_name = ms_item-obj_name. " type conversion + + CALL FUNCTION 'DDIF_VIEW_PUT' + EXPORTING + name = lv_name + dd25v_wa = ls_dd25v + dd09l_wa = ls_dd09l + TABLES + dd26v_tab = lt_dd26v + dd27p_tab = lt_dd27p + dd28j_tab = lt_dd28j + dd28v_tab = lt_dd28v + EXCEPTIONS + view_not_found = 1 + name_inconsistent = 2 + view_inconsistent = 3 + put_failure = 4 + put_refused = 5 + OTHERS = 6. + IF sy-subrc <> 0. + _raise 'error from DDIF_VIEW_PUT'. + ENDIF. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + +ENDCLASS. "lcl_object_view IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_view.prog.xml b/src/zabapgit_object_view.prog.xml new file mode 100644 index 000000000..b242baeb5 --- /dev/null +++ b/src/zabapgit_object_view.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_VIEW + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_VIEW + 28 + + + + + + diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap new file mode 100644 index 000000000..09e1f6c73 --- /dev/null +++ b/src/zabapgit_object_w3xx.prog.abap @@ -0,0 +1,351 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_W3XX +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_W3SUPER DEFINITION +*----------------------------------------------------------------------* +* Web Reporting/Internet Transaction Server MIME Types (super class) +*----------------------------------------------------------------------* +CLASS lcl_object_w3super DEFINITION INHERITING FROM lcl_objects_super ABSTRACT. + + PUBLIC SECTION. + INTERFACES lif_object. + + PRIVATE SECTION. + METHODS init_key RETURNING VALUE(rs_key) TYPE wwwdatatab. + +ENDCLASS. "lcl_object_W3SUPER DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_W3SUPER IMPLEMENTATION +*----------------------------------------------------------------------* +* Web Reporting/Internet Transaction Server MIME Types (super class) +*----------------------------------------------------------------------* +CLASS lcl_object_w3super IMPLEMENTATION. + + METHOD init_key. + rs_key-relid = ms_item-obj_type+2(2). + rs_key-objid = ms_item-obj_name. + ENDMETHOD. " init_key + + METHOD lif_object~jump. + " No idea how to just to SMW0 + _raise 'Please go to SMW0 for W3MI object'. + ENDMETHOD. "jump + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " W3xx EXISTS + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + METHOD lif_object~exists. + DATA ls_key TYPE wwwdatatab. + + ls_key = init_key( ). + + SELECT SINGLE objid INTO ls_key-objid + FROM wwwdata + WHERE relid = ls_key-relid + AND objid = ls_key-objid + AND srtf2 = 0. + + IF sy-subrc IS NOT INITIAL. + RETURN. + ENDIF. + + rv_bool = abap_true. + + ENDMETHOD. "lif_object~exists + + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " W3xx SERIALIZE + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + METHOD lif_object~serialize. + DATA ls_key TYPE wwwdatatab. + DATA lt_w3mime TYPE STANDARD TABLE OF w3mime. + DATA lt_w3html TYPE STANDARD TABLE OF w3html. + DATA lt_w3params TYPE STANDARD TABLE OF wwwparams. + DATA lv_xstring TYPE xstring. + DATA ls_wwwparam LIKE LINE OF lt_w3params. + DATA lv_size TYPE int4. + DATA lv_base64str TYPE string. + DATA lo_utility TYPE REF TO cl_http_utility. + + ls_key = init_key( ). + + SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_key + FROM wwwdata + WHERE relid = ls_key-relid + AND objid = ls_key-objid + AND srtf2 = 0. + + IF sy-subrc IS NOT INITIAL. + RETURN. + ENDIF. + + CALL FUNCTION 'WWWDATA_IMPORT' + EXPORTING + key = ls_key + TABLES + mime = lt_w3mime + html = lt_w3html + EXCEPTIONS + wrong_object_type = 1 + import_error = 2. + + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot read W3xx data'. + ENDIF. + + CALL FUNCTION 'WWWPARAMS_READ_ALL' + EXPORTING + type = ls_key-relid + objid = ls_key-objid + TABLES + params = lt_w3params + EXCEPTIONS + entry_not_exists = 1. + + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot read W3xx data'. + ENDIF. + + READ TABLE lt_w3params INTO ls_wwwparam WITH KEY name = 'filesize' ##NO_TEXT. + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot read W3xx filesize'. + ENDIF. + + lv_size = ls_wwwparam-value. + + CASE ls_key-relid. + WHEN 'MI'. + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_size + IMPORTING + buffer = lv_xstring + TABLES + binary_tab = lt_w3mime + EXCEPTIONS + failed = 1. + WHEN 'HT'. + CALL FUNCTION 'SCMS_TEXT_TO_XSTRING' + IMPORTING + buffer = lv_xstring + TABLES + text_tab = lt_w3html + EXCEPTIONS + failed = 1. + WHEN OTHERS. + _raise 'Wrong W3xx type'. + ENDCASE. + + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot convert W3xx to xstring'. + ENDIF. + + CREATE OBJECT lo_utility. + lv_base64str = lo_utility->encode_x_base64( lv_xstring ). + + io_xml->add( iv_name = 'NAME' + ig_data = ls_key-objid ). + + io_xml->add( iv_name = 'TEXT' + ig_data = ls_key-text ). + + io_xml->add( iv_name = 'DATA' + ig_data = lv_base64str ). + + io_xml->add( iv_name = 'PARAMS' + ig_data = lt_w3params ). + + ENDMETHOD. "serialize + + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " W3xx DESERIALIZE + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + METHOD lif_object~deserialize. + + DATA ls_key TYPE wwwdatatab. + DATA lv_base64str TYPE string. + DATA lt_w3params TYPE STANDARD TABLE OF wwwparams. + DATA lv_xstring TYPE xstring. + DATA lo_utility TYPE REF TO cl_http_utility. + DATA lt_w3mime TYPE STANDARD TABLE OF w3mime. + DATA lt_w3html TYPE STANDARD TABLE OF w3html. + DATA lv_size TYPE int4. + DATA lv_tadir_obj TYPE tadir-object. + + ls_key = init_key( ). + + io_xml->read( EXPORTING iv_name = 'TEXT' + CHANGING cg_data = ls_key-text ). + + io_xml->read( EXPORTING iv_name = 'DATA' + CHANGING cg_data = lv_base64str ). + + io_xml->read( EXPORTING iv_name = 'PARAMS' + CHANGING cg_data = lt_w3params ). + + CREATE OBJECT lo_utility. + lv_xstring = lo_utility->decode_x_base64( lv_base64str ). + + CASE ls_key-relid. + WHEN 'MI'. + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_xstring + IMPORTING + output_length = lv_size + TABLES + binary_tab = lt_w3mime. + WHEN 'HT'. + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_xstring + IMPORTING + output_length = lv_size + TABLES + binary_tab = lt_w3mime. + + CALL FUNCTION 'SCMS_BINARY_TO_TEXT' + EXPORTING + input_length = lv_size + IMPORTING + output_length = lv_size + TABLES + binary_tab = lt_w3mime + text_tab = lt_w3html + EXCEPTIONS + failed = 1. + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot update W3xx params'. + ENDIF. + + CLEAR lt_w3mime. + WHEN OTHERS. + _raise 'Wrong W3xx type'. + ENDCASE. + + CALL FUNCTION 'WWWPARAMS_UPDATE' + TABLES + params = lt_w3params + EXCEPTIONS + update_error = 1. + + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot update W3xx params'. + ENDIF. + + ls_key-tdate = sy-datum. + ls_key-ttime = sy-uzeit. + ls_key-chname = sy-uname. + ls_key-devclass = iv_package. + + CALL FUNCTION 'WWWDATA_EXPORT' + EXPORTING + key = ls_key + TABLES + mime = lt_w3mime + html = lt_w3html + EXCEPTIONS + wrong_object_type = 1 + export_error = 2. + + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot upload W3xx data'. + ENDIF. + + CONCATENATE 'W3' ls_key-relid INTO lv_tadir_obj. + + CALL FUNCTION 'TR_TADIR_INTERFACE' + EXPORTING + wi_tadir_pgmid = 'R3TR' + wi_tadir_object = lv_tadir_obj + wi_tadir_devclass = iv_package + wi_tadir_obj_name = ls_key-objid + wi_test_modus = space + EXCEPTIONS + tadir_entry_not_existing = 1 + tadir_entry_ill_type = 2 + no_systemname = 3 + no_systemtype = 4 + original_system_conflict = 5 + object_reserved_for_devclass = 6 + object_exists_global = 7 + object_exists_local = 8 + object_is_distributed = 9 + obj_specification_not_unique = 10 + no_authorization_to_delete = 11 + devclass_not_existing = 12 + simultanious_set_remove_repair = 13 + order_missing = 14 + no_modification_of_head_syst = 15 + pgmid_object_not_allowed = 16 + masterlanguage_not_specified = 17 + devclass_not_specified = 18 + specify_owner_unique = 19 + loc_priv_objs_no_repair = 20 + gtadir_not_reached = 21 + object_locked_for_order = 22 + change_of_class_not_allowed = 23 + no_change_from_sap_to_tmp = 24 + OTHERS = 99. + + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot update TADIR for W3xx'. + ENDIF. + + ENDMETHOD. "lif_object~deserialize + + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + " W3xx DELETE + """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + METHOD lif_object~delete. + DATA ls_key TYPE wwwdatatab. + + ls_key = init_key( ). + + CALL FUNCTION 'WWWDATA_DELETE' + EXPORTING + key = ls_key + EXCEPTIONS + wrong_object_type = 1 + delete_error = 2. + + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot delete W3xx data'. + ENDIF. + + CALL FUNCTION 'WWWPARAMS_DELETE_ALL' + EXPORTING + key = ls_key + EXCEPTIONS + delete_error = 1. + + IF sy-subrc IS NOT INITIAL. + _raise 'Cannot delete W3xx params'. + ENDIF. + + ENDMETHOD. "lif_object~delete + +ENDCLASS. "lcl_object_W3SUPER IMPLEMENTATION + +*----------------------------------------------------------------------* +* CLASS lcl_object_W3MI DEFINITION +*----------------------------------------------------------------------* +* Web Reporting/Internet Transaction Server MIME Types (binary data) +*----------------------------------------------------------------------* +CLASS lcl_object_w3mi DEFINITION INHERITING FROM lcl_object_w3super FINAL. +ENDCLASS. "lcl_object_W3MI DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_W3HT DEFINITION +*----------------------------------------------------------------------* +* Web Reporting/Internet Transaction Server MIME Types (html data) +*----------------------------------------------------------------------* +CLASS lcl_object_w3ht DEFINITION INHERITING FROM lcl_object_w3super FINAL. +ENDCLASS. "lcl_object_W3HT DEFINITION \ No newline at end of file diff --git a/src/zabapgit_object_w3xx.prog.xml b/src/zabapgit_object_w3xx.prog.xml new file mode 100644 index 000000000..e5efdbbac --- /dev/null +++ b/src/zabapgit_object_w3xx.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_W3XX + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_W3XX + 28 + + + + + + diff --git a/src/zabapgit_object_wdya.prog.abap b/src/zabapgit_object_wdya.prog.abap new file mode 100644 index 000000000..6aec5edae --- /dev/null +++ b/src/zabapgit_object_wdya.prog.abap @@ -0,0 +1,206 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_WDYA +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_wdya DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_wdya DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + METHODS read + EXPORTING es_app TYPE wdy_application + et_properties TYPE wdy_app_property_table + RAISING lcx_exception. + + METHODS save + IMPORTING is_app TYPE wdy_application + it_properties TYPE wdy_app_property_table + iv_package TYPE devclass + RAISING lcx_exception. + +ENDCLASS. "lcl_object_wdya DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_wdya IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_wdya IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_name TYPE wdy_application_name. + + + lv_name = ms_item-obj_name. + + TRY. + cl_wdy_md_application=>get_object_by_key( + name = lv_name + version = 'A' ). + rv_bool = abap_true. + CATCH cx_wdy_md_not_existing. + rv_bool = abap_false. + CATCH cx_wdy_md_permission_failure. + _raise 'WDYA, permission failure'. + ENDTRY. + + ENDMETHOD. "lif_object~exists + + METHOD read. + + DATA: li_app TYPE REF TO if_wdy_md_application, + li_map TYPE REF TO if_object_map, + lo_prop TYPE REF TO cl_wdy_md_application_property, + ls_prop LIKE LINE OF et_properties, + lv_name TYPE wdy_application_name. + + + CLEAR es_app. + CLEAR et_properties. + + lv_name = ms_item-obj_name. + TRY. + li_app = cl_wdy_md_application=>get_object_by_key( + name = lv_name + version = 'A' ). + CATCH cx_wdy_md_not_existing. + RETURN. + CATCH cx_wdy_md_permission_failure. + _raise 'WDYA, permission failure'. + ENDTRY. + + li_app->if_wdy_md_object~get_definition( IMPORTING definition = es_app ). + CLEAR: es_app-author, + es_app-createdon, + es_app-changedby, + es_app-changedon. + + li_map = li_app->get_properties( ). + DO li_map->size( ) TIMES. + lo_prop ?= li_map->get_by_position( sy-index ). + lo_prop->get_definition( IMPORTING definition = ls_prop ). + APPEND ls_prop TO et_properties. + ENDDO. + + ENDMETHOD. "read + + METHOD lif_object~serialize. + + DATA: ls_app TYPE wdy_application, + lt_properties TYPE wdy_app_property_table. + + + read( IMPORTING es_app = ls_app + et_properties = lt_properties ). + + io_xml->add( iv_name = 'APP' + ig_data = ls_app ). + io_xml->add( iv_name = 'PROPERTIES' + ig_data = lt_properties ). + + ENDMETHOD. "serialize + + METHOD save. + + DATA: li_prop TYPE REF TO if_wdy_md_application_property, + lo_app TYPE REF TO cl_wdy_md_application. + + FIELD-SYMBOLS: LIKE LINE OF it_properties. + + + TRY. + CREATE OBJECT lo_app + EXPORTING + name = is_app-application_name + definition = is_app + devclass = iv_package. + + LOOP AT it_properties ASSIGNING . + li_prop = lo_app->if_wdy_md_application~create_property( -name ). + li_prop->set_value( -value ). + ENDLOOP. + + lo_app->if_wdy_md_lockable_object~save_to_database( ). + CATCH cx_wdy_md_exception. + _raise 'error saving WDYA'. + ENDTRY. + + ENDMETHOD. "save + + METHOD lif_object~deserialize. + + DATA: ls_app TYPE wdy_application, + lt_properties TYPE wdy_app_property_table. + + + io_xml->read( EXPORTING iv_name = 'APP' + CHANGING cg_data = ls_app ). + io_xml->read( EXPORTING iv_name = 'PROPERTIES' + CHANGING cg_data = lt_properties ). + + save( is_app = ls_app + it_properties = lt_properties + iv_package = iv_package ). + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: li_app TYPE REF TO if_wdy_md_application, + lv_objkey TYPE wdy_wb_appl_name, + lv_type TYPE seu_type, + lv_name TYPE wdy_application_name. + + + lv_name = ms_item-obj_name. + TRY. + li_app = cl_wdy_md_application=>get_object_by_key( + name = lv_name + version = 'A' ). + li_app->if_wdy_md_object~delete( ). + li_app->if_wdy_md_lockable_object~save_to_database( ). + +* method save_to_database calls function module TR_TADIR_INTERFACE +* with test mode = X, so it does not delete the TADIR entry. +* Instead the standard code uses RS_TREE_OBJECT_PLACEMENT to delete +* the TADIR entry + lv_objkey = ms_item-obj_name. + CONCATENATE 'O' swbm_c_type_wdy_application INTO lv_type. + CALL FUNCTION 'RS_TREE_OBJECT_PLACEMENT' + EXPORTING + object = lv_objkey + type = lv_type + operation = 'DELETE'. + + CATCH cx_wdy_md_not_existing. + RETURN. + CATCH cx_wdy_md_exception. + _raise 'WDYA, error deleting'. + ENDTRY. + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = ms_item-obj_type + in_new_window = abap_true. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_wdya IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_wdya.prog.xml b/src/zabapgit_object_wdya.prog.xml new file mode 100644 index 000000000..4387af0e9 --- /dev/null +++ b/src/zabapgit_object_wdya.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_WDYA + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_WDYA + 28 + + + + + + diff --git a/src/zabapgit_object_wdyn.prog.abap b/src/zabapgit_object_wdyn.prog.abap new file mode 100644 index 000000000..6e3d23786 --- /dev/null +++ b/src/zabapgit_object_wdyn.prog.abap @@ -0,0 +1,642 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_WDYN +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_wdyn DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_wdyn DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + + PRIVATE SECTION. + + DATA: + mt_components TYPE TABLE OF wdy_ctlr_compo_vrs, + mt_sources TYPE TABLE OF wdy_ctlr_compo_source_vrs. + + METHODS: + get_limu_objects + RETURNING VALUE(rt_objects) TYPE wdy_md_transport_keys, + read + RETURNING VALUE(rs_component) TYPE wdy_component_metadata + RAISING lcx_exception, + read_controller + IMPORTING is_key TYPE wdy_md_controller_key + RETURNING VALUE(rs_controller) TYPE wdy_md_controller_meta_data + RAISING lcx_exception, + read_definition + IMPORTING is_key TYPE wdy_md_component_key + RETURNING VALUE(rs_definition) TYPE wdy_md_component_meta_data + RAISING lcx_exception, + read_view + IMPORTING is_key TYPE wdy_md_view_key + RETURNING VALUE(rs_view) TYPE wdy_md_view_meta_data + RAISING lcx_exception, + recover_controller + IMPORTING is_controller TYPE wdy_md_controller_meta_data + RAISING lcx_exception, + recover_definition + IMPORTING is_definition TYPE wdy_md_component_meta_data + RAISING lcx_exception, + recover_view + IMPORTING is_view TYPE wdy_md_view_meta_data + RAISING lcx_exception, + delta_controller + IMPORTING is_controller TYPE wdy_md_controller_meta_data + RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object + RAISING lcx_exception, + delta_definition + IMPORTING is_definition TYPE wdy_md_component_meta_data + RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object + RAISING lcx_exception, + delta_view + IMPORTING is_view TYPE wdy_md_view_meta_data + RETURNING VALUE(rs_delta) TYPE svrs2_xversionable_object + RAISING lcx_exception. + +ENDCLASS. "lcl_object_wdyn DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_wdyn IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_wdyn IMPLEMENTATION. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + + DATA: lv_component_name TYPE wdy_component-component_name. + + + SELECT SINGLE component_name FROM wdy_component + INTO lv_component_name + WHERE component_name = ms_item-obj_name + AND version = 'A'. "#EC CI_GENBUFF + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD delta_definition. + + DATA: ls_key TYPE wdy_md_component_key, + lv_found TYPE abap_bool, + ls_obj_new TYPE svrs2_versionable_object, + li_component TYPE REF TO if_wdy_md_component, + ls_obj_old TYPE svrs2_versionable_object. + + + ls_key-component_name = is_definition-definition-component_name. + + lv_found = cl_wdy_md_component=>check_existency( ls_key-component_name ). + IF lv_found = abap_false. + TRY. + cl_wdy_md_component=>create_complete( + EXPORTING + name = ls_key-component_name + IMPORTING + component = li_component ). + li_component->save_to_database( ). + li_component->unlock( ). + CATCH cx_wdy_md_exception. + _raise 'error creating dummy component'. + ENDTRY. + ENDIF. + + ls_obj_new-objtype = wdyn_limu_component_definition. + ls_obj_new-objname = ls_key-component_name. + + ls_obj_old-objtype = wdyn_limu_component_definition. + ls_obj_old-objname = ls_key-component_name. + + APPEND is_definition-definition TO ls_obj_old-wdyd-defin. + ls_obj_old-wdyd-descr = is_definition-descriptions. + ls_obj_old-wdyd-cusag = is_definition-component_usages. + ls_obj_old-wdyd-intrf = is_definition-interface_implementings. + ls_obj_old-wdyd-libra = is_definition-library_usages. + ls_obj_old-wdyd-ctuse = is_definition-ext_ctlr_usages. + ls_obj_old-wdyd-ctmap = is_definition-ext_ctx_mappings. + + CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' + EXPORTING + obj_old = ls_obj_new + obj_new = ls_obj_old + CHANGING + delta = rs_delta + EXCEPTIONS + inconsistent_objects = 1. + IF sy-subrc <> 0. + _raise 'error from SVRS_MAKE_OBJECT_DELTA'. + ENDIF. + + ENDMETHOD. "delta_definition + + METHOD delta_controller. + + DATA: li_controller TYPE REF TO if_wdy_md_controller, + lv_found TYPE abap_bool, + ls_key TYPE wdy_md_controller_key, + ls_obj_new TYPE svrs2_versionable_object, + ls_obj_old TYPE svrs2_versionable_object. + + FIELD-SYMBOLS: LIKE LINE OF mt_components, + LIKE LINE OF mt_sources. + + + ls_key-component_name = is_controller-definition-component_name. + ls_key-controller_name = is_controller-definition-controller_name. + + lv_found = cl_wdy_md_controller=>check_existency( + component_name = ls_key-component_name + controller_name = ls_key-controller_name ). + IF lv_found = abap_false. + TRY. + li_controller ?= cl_wdy_md_controller=>create_complete( + component_name = ls_key-component_name + controller_name = ls_key-controller_name + controller_type = is_controller-definition-controller_type ). + li_controller->save_to_database( ). + li_controller->unlock( ). + CATCH cx_wdy_md_exception. + _raise 'error creating dummy controller'. + ENDTRY. + ENDIF. + + ls_obj_new-objtype = wdyn_limu_component_controller. + ls_obj_new-objname = ls_key. + + ls_obj_old-objtype = wdyn_limu_component_controller. + ls_obj_old-objname = ls_key. + + APPEND is_controller-definition TO ls_obj_old-wdyc-defin. + + LOOP AT mt_components ASSIGNING + WHERE component_name = ls_key-component_name + AND controller_name = ls_key-controller_name. + APPEND TO ls_obj_old-wdyc-ccomp. + ENDLOOP. + LOOP AT mt_sources ASSIGNING + WHERE component_name = ls_key-component_name + AND controller_name = ls_key-controller_name. + APPEND TO ls_obj_old-wdyc-ccoms. + ENDLOOP. + + ls_obj_old-wdyc-descr = is_controller-descriptions. + ls_obj_old-wdyc-cusag = is_controller-controller_usages. + ls_obj_old-wdyc-ccomt = is_controller-controller_component_texts. + ls_obj_old-wdyc-cpara = is_controller-controller_parameters. + ls_obj_old-wdyc-cpart = is_controller-controller_parameter_texts. + ls_obj_old-wdyc-cnode = is_controller-context_nodes. + ls_obj_old-wdyc-cattr = is_controller-context_attributes. + ls_obj_old-wdyc-cmapp = is_controller-context_mappings. + ls_obj_old-wdyc-excp = is_controller-controller_exceptions. + ls_obj_old-wdyc-excpt = is_controller-controller_exception_texts. + ls_obj_old-wdyc-fgrps = is_controller-fieldgroups. + + CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' + EXPORTING + obj_old = ls_obj_new + obj_new = ls_obj_old + CHANGING + delta = rs_delta + EXCEPTIONS + inconsistent_objects = 1. + IF sy-subrc <> 0. + _raise 'error from SVRS_MAKE_OBJECT_DELTA'. + ENDIF. + + ENDMETHOD. "delta_controller + + METHOD delta_view. + + DATA: ls_key TYPE wdy_md_view_key, + ls_obj_new TYPE svrs2_versionable_object, + ls_obj_old TYPE svrs2_versionable_object, + lv_found TYPE abap_bool, + li_view TYPE REF TO if_wdy_md_abstract_view. + + FIELD-SYMBOLS: LIKE LINE OF ls_obj_old-wdyv-defin. + + + ls_key-component_name = is_view-definition-component_name. + ls_key-view_name = is_view-definition-view_name. + + lv_found = cl_wdy_md_abstract_view=>check_existency( + component_name = ls_key-component_name + name = ls_key-view_name ). + IF lv_found = abap_false. + TRY. + li_view = cl_wdy_md_abstract_view=>create( + component_name = is_view-definition-component_name + view_name = is_view-definition-view_name + type = is_view-definition-type ). + li_view->save_to_database( ). + li_view->unlock( ). + CATCH cx_wdy_md_exception. + _raise 'error creating dummy view'. + ENDTRY. + ENDIF. + + ls_obj_new-objtype = wdyn_limu_component_view. + ls_obj_new-objname = ls_key. + + ls_obj_old-objtype = wdyn_limu_component_view. + ls_obj_old-objname = ls_key. + + APPEND INITIAL LINE TO ls_obj_old-wdyv-defin ASSIGNING . + MOVE-CORRESPONDING is_view-definition TO . + + ls_obj_old-wdyv-descr = is_view-descriptions. + ls_obj_old-wdyv-vcont = is_view-view_containers. + ls_obj_old-wdyv-vcntt = is_view-view_container_texts. + ls_obj_old-wdyv-ibplg = is_view-iobound_plugs. + ls_obj_old-wdyv-ibplt = is_view-iobound_plug_texts. + ls_obj_old-wdyv-plpar = is_view-plug_parameters. + ls_obj_old-wdyv-plprt = is_view-plug_parameter_texts. + ls_obj_old-wdyv-uiele = is_view-ui_elements. + ls_obj_old-wdyv-uicon = is_view-ui_context_bindings. + ls_obj_old-wdyv-uievt = is_view-ui_event_bindings. + ls_obj_old-wdyv-uiddc = is_view-ui_ddic_bindings. + ls_obj_old-wdyv-uiprp = is_view-ui_properties. + ls_obj_old-wdyv-navil = is_view-navigation_links. + ls_obj_old-wdyv-navit = is_view-navigation_target_refs. + ls_obj_old-wdyv-vshno = is_view-vsh_nodes. + ls_obj_old-wdyv-vshpl = is_view-vsh_placeholders. + ls_obj_old-wdyv-views = is_view-viewset_properties. + + CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' + EXPORTING + obj_old = ls_obj_new + obj_new = ls_obj_old + CHANGING + delta = rs_delta + EXCEPTIONS + inconsistent_objects = 1. + IF sy-subrc <> 0. + _raise 'error from SVRS_MAKE_OBJECT_DELTA'. + ENDIF. + + ENDMETHOD. "delta_view + + METHOD recover_definition. + + DATA: ls_key TYPE wdy_md_component_key, + lv_corrnr TYPE trkorr, + ls_delta TYPE svrs2_xversionable_object. + + + ls_delta = delta_definition( is_definition ). + ls_key-component_name = is_definition-definition-component_name. + + cl_wdy_md_component=>recover_version( + EXPORTING + component_key = ls_key + delta = ls_delta-wdyd + CHANGING + corrnr = lv_corrnr ). + + ENDMETHOD. "recover_definition + + METHOD recover_controller. + + DATA: ls_key TYPE wdy_controller_key, + lv_corrnr TYPE trkorr, + ls_delta TYPE svrs2_xversionable_object. + + + ls_delta = delta_controller( is_controller ). + ls_key-component_name = is_controller-definition-component_name. + ls_key-controller_name = is_controller-definition-controller_name. + + cl_wdy_md_controller=>recover_version( + EXPORTING + controller_key = ls_key + delta = ls_delta-wdyc + CHANGING + corrnr = lv_corrnr ). + + ENDMETHOD. "recover_controller + + METHOD recover_view. + + DATA: ls_key TYPE wdy_md_view_key, + lv_corrnr TYPE trkorr, + ls_delta TYPE svrs2_xversionable_object. + + + ls_delta = delta_view( is_view ). + ls_key-component_name = is_view-definition-component_name. + ls_key-view_name = is_view-definition-view_name. + + cl_wdy_md_abstract_view=>recover_version( + EXPORTING + view_key = ls_key + delta = ls_delta-wdyv + CHANGING + corrnr = lv_corrnr ). + + ENDMETHOD. "recover_view + + METHOD read_controller. + + DATA: lt_components TYPE TABLE OF wdy_ctlr_compo_vrs, + lt_sources TYPE TABLE OF wdy_ctlr_compo_source_vrs, + lt_definition TYPE TABLE OF wdy_controller, + lt_psmodilog TYPE TABLE OF smodilog, + lt_psmodisrc TYPE TABLE OF smodisrc. + + + CALL FUNCTION 'WDYC_GET_OBJECT' + EXPORTING + controller_key = is_key + get_all_translations = abap_false + TABLES + definition = lt_definition + descriptions = rs_controller-descriptions + controller_usages = rs_controller-controller_usages + controller_components = lt_components + controller_component_sources = lt_sources + controller_component_texts = rs_controller-controller_component_texts + controller_parameters = rs_controller-controller_parameters + controller_parameter_texts = rs_controller-controller_parameter_texts + context_nodes = rs_controller-context_nodes + context_attributes = rs_controller-context_attributes + context_mappings = rs_controller-context_mappings + fieldgroups = rs_controller-fieldgroups + controller_exceptions = rs_controller-controller_exceptions + controller_exception_texts = rs_controller-controller_exception_texts + psmodilog = lt_psmodilog " not optional in all versions + psmodisrc = lt_psmodisrc " not optional in all versions + EXCEPTIONS + not_existing = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error from WDYC_GET_OBJECT'. + ENDIF. + + APPEND LINES OF lt_components TO mt_components. + APPEND LINES OF lt_sources TO mt_sources. + + READ TABLE lt_definition INDEX 1 INTO rs_controller-definition. + IF sy-subrc <> 0. + _raise 'WDYC, definition not found'. + ENDIF. + + CLEAR: rs_controller-definition-author, + rs_controller-definition-createdon, + rs_controller-definition-changedby, + rs_controller-definition-changedon. + + ENDMETHOD. "read_controller + + METHOD read_definition. + + DATA: lt_definition TYPE TABLE OF wdy_component, + lt_psmodilog TYPE TABLE OF smodilog, + lt_psmodisrc TYPE TABLE OF smodisrc. + + + CALL FUNCTION 'WDYD_GET_OBJECT' + EXPORTING + component_key = is_key + get_all_translations = abap_false + TABLES + definition = lt_definition + descriptions = rs_definition-descriptions + component_usages = rs_definition-component_usages + interface_implementings = rs_definition-interface_implementings + library_usages = rs_definition-library_usages + ext_ctlr_usages = rs_definition-ext_ctlr_usages + ext_ctx_mappings = rs_definition-ext_ctx_mappings + psmodilog = lt_psmodilog " not optional in all versions + psmodisrc = lt_psmodisrc " not optional in all versions + EXCEPTIONS + not_existing = 1 + OTHERS = 2. + IF sy-subrc = 1. + RETURN. + ELSEIF sy-subrc <> 0. + _raise 'error from WDYD_GET_OBJECT'. + ENDIF. + + READ TABLE lt_definition INDEX 1 INTO rs_definition-definition. + IF sy-subrc <> 0. + _raise 'WDYD, definition not found'. + ENDIF. + + CLEAR: rs_definition-definition-author, + rs_definition-definition-createdon, + rs_definition-definition-changedby, + rs_definition-definition-changedon, + rs_definition-definition-gendate, + rs_definition-definition-gentime. + + ENDMETHOD. "read_definition + + METHOD read_view. + + DATA: lt_definition TYPE TABLE OF wdy_view_vrs, + lt_psmodilog TYPE TABLE OF smodilog, + lt_psmodisrc TYPE TABLE OF smodisrc. + + FIELD-SYMBOLS: LIKE LINE OF lt_definition. + + + CALL FUNCTION 'WDYV_GET_OBJECT' + EXPORTING + view_key = is_key + get_all_translations = abap_false + TABLES + definition = lt_definition + descriptions = rs_view-descriptions + view_containers = rs_view-view_containers + view_container_texts = rs_view-view_container_texts + iobound_plugs = rs_view-iobound_plugs + iobound_plug_texts = rs_view-iobound_plug_texts + plug_parameters = rs_view-plug_parameters + plug_parameter_texts = rs_view-plug_parameter_texts + ui_elements = rs_view-ui_elements + ui_context_bindings = rs_view-ui_context_bindings + ui_event_bindings = rs_view-ui_event_bindings + ui_ddic_bindings = rs_view-ui_ddic_bindings + ui_properties = rs_view-ui_properties + navigation_links = rs_view-navigation_links + navigation_target_refs = rs_view-navigation_target_refs + vsh_nodes = rs_view-vsh_nodes + vsh_placeholders = rs_view-vsh_placeholders + viewset_properties = rs_view-viewset_properties + psmodilog = lt_psmodilog + psmodisrc = lt_psmodisrc + EXCEPTIONS + not_existing = 1 + OTHERS = 2. + IF sy-subrc <> 0. + _raise 'error from WDYV_GET_OBJECT'. + ENDIF. + + READ TABLE lt_definition INDEX 1 ASSIGNING . + ASSERT sy-subrc = 0. + MOVE-CORRESPONDING TO rs_view-definition. + + CLEAR: rs_view-definition-author, + rs_view-definition-createdon, + rs_view-definition-changedby, + rs_view-definition-changedon. + + ENDMETHOD. "read_view + + METHOD get_limu_objects. + + DATA: lv_name TYPE wdy_component_name. + + + lv_name = ms_item-obj_name. + CALL FUNCTION 'WDYN_GET_LIMU_OBJECTS' + EXPORTING + component_name = lv_name + IMPORTING + limu_objects = rt_objects. + + ENDMETHOD. "get_limu_objects + + METHOD read. + + DATA: lt_objects TYPE wdy_md_transport_keys, + ls_controller_key TYPE wdy_md_controller_key, + ls_component_key TYPE wdy_md_component_key, + ls_view_key TYPE wdy_md_view_key. + + FIELD-SYMBOLS: LIKE LINE OF lt_objects. + + + CLEAR mt_components. + CLEAR mt_sources. + + lt_objects = get_limu_objects( ). + + LOOP AT lt_objects ASSIGNING . + CASE -sub_type. + WHEN wdyn_limu_component_controller. + ls_controller_key = -sub_name. + APPEND read_controller( ls_controller_key ) TO rs_component-ctlr_metadata. + WHEN wdyn_limu_component_definition. + ls_component_key = -sub_name. + rs_component-comp_metadata = read_definition( ls_component_key ). + WHEN wdyn_limu_component_view. + ls_view_key = -sub_name. + APPEND read_view( ls_view_key ) TO rs_component-view_metadata. + WHEN OTHERS. + ASSERT 0 = 1. + ENDCASE. + ENDLOOP. + + SORT rs_component-ctlr_metadata BY + definition-component_name ASCENDING + definition-controller_name ASCENDING. + + SORT mt_components BY + component_name ASCENDING + controller_name ASCENDING + cmpname ASCENDING. + + SORT mt_sources BY + component_name ASCENDING + controller_name ASCENDING + cmpname ASCENDING + line_number ASCENDING. + + ENDMETHOD. "read + + METHOD lif_object~serialize. + + DATA: ls_component TYPE wdy_component_metadata. + + + ls_component = read( ). + + io_xml->add( iv_name = 'COMPONENT' + ig_data = ls_component ). + io_xml->add( ig_data = mt_components + iv_name = 'COMPONENTS' ). + io_xml->add( ig_data = mt_sources + iv_name = 'SOURCES' ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: ls_component TYPE wdy_component_metadata. + + FIELD-SYMBOLS: LIKE LINE OF ls_component-view_metadata, + LIKE LINE OF ls_component-ctlr_metadata. + + + io_xml->read( EXPORTING iv_name = 'COMPONENT' + CHANGING cg_data = ls_component ). + io_xml->read( EXPORTING iv_name = 'COMPONENTS' + CHANGING cg_data = mt_components ). + io_xml->read( EXPORTING iv_name = 'SOURCES' + CHANGING cg_data = mt_sources ). + + ls_component-comp_metadata-definition-author = sy-uname. + ls_component-comp_metadata-definition-createdon = sy-datum. + recover_definition( ls_component-comp_metadata ). + + LOOP AT ls_component-ctlr_metadata ASSIGNING . + -definition-author = sy-uname. + -definition-createdon = sy-datum. + recover_controller( ). + ENDLOOP. + LOOP AT ls_component-view_metadata ASSIGNING . + -definition-author = sy-uname. + -definition-createdon = sy-datum. + recover_view( ). + ENDLOOP. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + + METHOD lif_object~delete. + + DATA: lo_component TYPE REF TO cl_wdy_wb_component, + lo_request TYPE REF TO cl_wb_request, + li_state TYPE REF TO if_wb_program_state, + lv_object_name TYPE seu_objkey. + + + CREATE OBJECT lo_component. + + lv_object_name = ms_item-obj_name. + CREATE OBJECT lo_request + EXPORTING + p_object_type = 'YC' + p_object_name = lv_object_name + p_operation = swbm_c_op_delete_no_dialog. + + lo_component->if_wb_program~process_wb_request( + p_wb_request = lo_request + p_wb_program_state = li_state ). + + ENDMETHOD. "delete + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = ms_item-obj_type + in_new_window = abap_true. + + ENDMETHOD. "jump + +ENDCLASS. "lcl_object_wdyn IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_wdyn.prog.xml b/src/zabapgit_object_wdyn.prog.xml new file mode 100644 index 000000000..8439027ce --- /dev/null +++ b/src/zabapgit_object_wdyn.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_WDYN + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_WDYN + 28 + + + + + + diff --git a/src/zabapgit_object_xslt.prog.abap b/src/zabapgit_object_xslt.prog.abap new file mode 100644 index 000000000..bb4d561bc --- /dev/null +++ b/src/zabapgit_object_xslt.prog.abap @@ -0,0 +1,167 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_XSLT +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_xslt DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_xslt DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_xslt DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_xslt IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_xslt IMPLEMENTATION. + + METHOD lif_object~serialize. + + DATA: lv_name TYPE cxsltdesc, + lo_xslt TYPE REF TO cl_o2_api_xsltdesc, + lv_source TYPE string, + ls_attributes TYPE o2xsltattr. + + + lv_name = ms_item-obj_name. + + cl_o2_api_xsltdesc=>load( + EXPORTING + p_xslt_desc = lv_name + IMPORTING + p_obj = lo_xslt + EXCEPTIONS + not_existing = 1 + permission_failure = 2 + OTHERS = 3 ). + IF sy-subrc <> 0. + RETURN. + ENDIF. + + ls_attributes = lo_xslt->get_attributes( ). + + CLEAR: ls_attributes-author, + ls_attributes-createdon, + ls_attributes-changedby, + ls_attributes-changedon, + ls_attributes-devclass. + + io_xml->add( iv_name = 'ATTRIBUTES' + ig_data = ls_attributes ). + + lv_source = lo_xslt->get_source_string( ). + + mo_files->add_string( iv_extra = 'source' + iv_ext = 'xml' + iv_string = lv_source ) ##NO_TEXT. + + ENDMETHOD. "lif_object~serialize + + METHOD lif_object~deserialize. + + DATA: lv_source TYPE string, + lo_xslt TYPE REF TO cl_o2_api_xsltdesc, + lv_len TYPE i, + ls_attributes TYPE o2xsltattr. + + + io_xml->read( EXPORTING iv_name = 'ATTRIBUTES' + CHANGING cg_data = ls_attributes ). + + ls_attributes-devclass = iv_package. + + lv_source = mo_files->read_string( iv_extra = 'source' + iv_ext = 'xml' ) ##NO_TEXT. + +* workaround: somewhere additional linefeeds are added + lv_len = strlen( lv_source ) - 2. + IF lv_source+lv_len(2) = cl_abap_char_utilities=>cr_lf. + lv_source = lv_source(lv_len). + ENDIF. + + cl_o2_api_xsltdesc=>create_new_from_string( + EXPORTING + p_source = lv_source + p_attr = ls_attributes + IMPORTING + p_obj = lo_xslt + EXCEPTIONS + action_cancelled = 1 + error_occured = 2 + not_authorized = 3 + object_already_existing = 4 + undefined_name = 5 + OTHERS = 6 ). + IF sy-subrc <> 0. + _raise 'error from cl_o2_api_xsltdesc=>create_new_from_string'. + ENDIF. + + lo_xslt->save( ). + + lo_xslt->set_changeable( abap_false ). + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "lif_object~deserialize + + METHOD lif_object~delete. + + DATA: lo_xslt TYPE REF TO cl_o2_api_xsltdesc, + lv_name TYPE cxsltdesc. + + + lv_name = ms_item-obj_name. + + cl_o2_api_xsltdesc=>load( + EXPORTING + p_xslt_desc = lv_name + IMPORTING + p_obj = lo_xslt + EXCEPTIONS + error_occured = 1 + not_existing = 2 + permission_failure = 3 + version_not_found = 4 + OTHERS = 5 ). + IF sy-subrc <> 0. + _raise 'error from cl_o2_api_xsltdesc=>load'. + ENDIF. + + lo_xslt->set_changeable( abap_true ). + lo_xslt->delete( ). + lo_xslt->save( ). + + ENDMETHOD. "lif_object~delete + + METHOD lif_object~exists. + + DATA: lv_name TYPE cxsltdesc. + + + lv_name = ms_item-obj_name. + + rv_bool = cl_o2_api_xsltdesc=>exists( lv_name ). + IF rv_bool = '1'. + rv_bool = abap_true. + ELSE. + rv_bool = abap_false. + ENDIF. + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + _raise 'XSLT, jump, todo'. + ENDMETHOD. "lif_object~jump + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + +ENDCLASS. "lcl_object_xslt IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_object_xslt.prog.xml b/src/zabapgit_object_xslt.prog.xml new file mode 100644 index 000000000..37eee2114 --- /dev/null +++ b/src/zabapgit_object_xslt.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_OBJECT_XSLT + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_OBJECT_XSLT + 28 + + + + + +