From fa07c370a643f6082ea19424394ba1116097ca23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Wiejkut?= Date: Sun, 19 Jan 2020 08:39:39 +0100 Subject: [PATCH] ODSO Support - new (#3146) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * IOBJ fix #3105 * Variable fix * BW function modules check * ODSO Support * update * Data type fixes * check fix * refactoring, variables simplification * IOBJ support extension Extension of current IOBJ support by handling of: -attributes -compondings -hierarchy * IOBJ downgrade * Dynamic method fix * lint fixes * space fix * Remove unused variables * table type fix Co-authored-by: Lars Hvam Co-authored-by: Christian Günter --- src/objects/zcl_abapgit_object_odso.clas.abap | 363 ++++++++++++++++++ src/objects/zcl_abapgit_object_odso.clas.xml | 16 + src/zcl_abapgit_objects.clas.abap | 14 +- 3 files changed, 389 insertions(+), 4 deletions(-) create mode 100644 src/objects/zcl_abapgit_object_odso.clas.abap create mode 100644 src/objects/zcl_abapgit_object_odso.clas.xml diff --git a/src/objects/zcl_abapgit_object_odso.clas.abap b/src/objects/zcl_abapgit_object_odso.clas.abap new file mode 100644 index 000000000..2ac2dcefe --- /dev/null +++ b/src/objects/zcl_abapgit_object_odso.clas.abap @@ -0,0 +1,363 @@ +CLASS zcl_abapgit_object_odso DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_objects_super + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES zif_abapgit_object . + + ALIASES mo_files + FOR zif_abapgit_object~mo_files . + PROTECTED SECTION. + PRIVATE SECTION. + + METHODS: + clear_field + IMPORTING + iv_fieldname TYPE string + CHANGING + cs_metadata TYPE any. +ENDCLASS. + + +CLASS zcl_abapgit_object_odso IMPLEMENTATION. + + + METHOD zif_abapgit_object~changed_by. + + DATA: lv_dsonam TYPE c LENGTH 30, + ls_return TYPE bapiret2, + lr_details TYPE REF TO data. + + FIELD-SYMBOLS: TYPE any, + TYPE any. + + TRY. + CREATE DATA lr_details TYPE ('BAPI6116'). + CATCH cx_sy_create_data_error. + zcx_abapgit_exception=>raise( |ODSO is not supported on this system| ). + ENDTRY. + + ASSIGN lr_details->* TO . + + lv_dsonam = ms_item-obj_name. + + CALL FUNCTION 'BAPI_ODSO_GETDETAIL' + EXPORTING + odsobject = lv_dsonam + IMPORTING + details = + return = ls_return. + + IF ls_return-type = 'E'. + zcx_abapgit_exception=>raise( |Error when geting changed by of ODSO: { ls_return-message }| ). + ENDIF. + + ASSIGN COMPONENT 'TSTPNM' OF STRUCTURE TO . + + rv_user = . + + ENDMETHOD. + + + METHOD zif_abapgit_object~delete. + + DATA: lv_odsonam TYPE c LENGTH 30, + lv_objname TYPE sobj_name, + lo_collection TYPE REF TO object, + lt_msg TYPE STANDARD TABLE OF bal_s_msg, + ls_msg TYPE bal_s_msg. + + TRY. + CREATE OBJECT lo_collection TYPE ('CL_RSD_ODSO_COLLECTION'). + CATCH cx_sy_create_data_error. + zcx_abapgit_exception=>raise( |ODSO is not supported on this system| ). + ENDTRY. + + lv_odsonam = ms_item-obj_name. + lv_objname = ms_item-obj_name. + + TRY. + CALL METHOD lo_collection->('ADD_TLOGO') + EXPORTING + i_objnm = lv_objname + i_modify = abap_true + i_delete = abap_true. + + CALL METHOD lo_collection->('DELETE'). + + CALL METHOD ('CL_RSO_APPLICATION_LOG')=>('APPL_LOG_MSG_READ') + IMPORTING + e_t_msg = lt_msg. + + READ TABLE lt_msg WITH KEY msgty = 'E' INTO ls_msg. + IF sy-subrc = 0. + zcx_abapgit_exception=>raise( + |Error when deleting ODSO: { ms_item-obj_name } { ls_msg-msgv1 } { ls_msg-msgv2 }| ). + ENDIF. + + CATCH cx_rs_cancelled. + zcx_abapgit_exception=>raise( |Canceled deletion of ODSO: { ms_item-obj_name }| ). + CATCH cx_rs_existing. + zcx_abapgit_exception=>raise( |ODSO not exist: { ms_item-obj_name }| ). + CATCH cx_rs_not_found. + zcx_abapgit_exception=>raise( |ODSO not found: { ms_item-obj_name }| ). + ENDTRY. + + ENDMETHOD. + + + METHOD zif_abapgit_object~deserialize. + + DATA: lv_dsonam TYPE c LENGTH 30, + lr_details TYPE REF TO data, + lr_infoobjects TYPE REF TO data, + lr_navigation TYPE REF TO data, + lr_indexes TYPE REF TO data, + lr_index_iobj TYPE REF TO data, + lt_return TYPE STANDARD TABLE OF bapiret2, + ls_return TYPE bapiret2. + + FIELD-SYMBOLS: + TYPE any, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE. + + TRY. + CREATE DATA lr_details TYPE ('BAPI6116'). + CREATE DATA lr_infoobjects TYPE STANDARD TABLE OF ('BAPI6116IO'). + CREATE DATA lr_navigation TYPE STANDARD TABLE OF ('BAPI6116NA'). + CREATE DATA lr_indexes TYPE STANDARD TABLE OF ('BAPI6116IN'). + CREATE DATA lr_index_iobj TYPE STANDARD TABLE OF ('BAPI6116II'). + CATCH cx_sy_create_data_error. + zcx_abapgit_exception=>raise( |ODSO is not supported on this system| ). + ENDTRY. + + ASSIGN lr_details->* TO . + ASSIGN lr_infoobjects->* TO . + ASSIGN lr_navigation->* TO . + ASSIGN lr_indexes->* TO . + ASSIGN lr_index_iobj->* TO . + + io_xml->read( EXPORTING iv_name = 'ODSO' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'INFOOBJECTS' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'NAVIGATION' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'INDEXES' + CHANGING cg_data = ). + + io_xml->read( EXPORTING iv_name = 'INDEX_IOBJ' + CHANGING cg_data = ). + TRY. + CALL FUNCTION 'BAPI_ODSO_CREATE' + EXPORTING + details = + IMPORTING + odsobject = lv_dsonam + TABLES + infoobjects = + navigationattributes = + indexes = + indexesinfoobjects = + return = lt_return. + + CATCH cx_sy_dyn_call_illegal_func. + zcx_abapgit_exception=>raise( |Necessary BW function modules not found or object not supported| ). + ENDTRY. + + READ TABLE lt_return WITH KEY type = 'E' INTO ls_return. + IF sy-subrc = 0. + zcx_abapgit_exception=>raise( |Error when creating ODSO: { ls_return-message }| ). + ENDIF. + + CALL FUNCTION 'BAPI_ODSO_ACTIVATE' + EXPORTING + odsobject = lv_dsonam + TABLES + return = lt_return. + + READ TABLE lt_return WITH KEY type = 'E' INTO ls_return. + IF sy-subrc = 0. + zcx_abapgit_exception=>raise( |Error when activating ODSO: { ls_return-message }| ). + ENDIF. + + tadir_insert( iv_package ). + + corr_insert( iv_package ). + + ENDMETHOD. + + + METHOD zif_abapgit_object~exists. + + DATA: lv_iobjnm TYPE c LENGTH 30. + + SELECT SINGLE odsobject + FROM ('RSDODSO') + INTO lv_iobjnm + WHERE odsobject = ms_item-obj_name. + + rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. + + + METHOD zif_abapgit_object~get_comparator. + RETURN. + ENDMETHOD. + + + METHOD zif_abapgit_object~get_deserialize_steps. + APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps. + ENDMETHOD. + + + METHOD zif_abapgit_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. + + + METHOD zif_abapgit_object~is_active. + + DATA: lv_dsona TYPE c LENGTH 30, + lo_odso TYPE REF TO object, + lv_isact TYPE abap_bool. + + lv_dsona = ms_item-obj_name. + + CALL METHOD ('CL_RSD_ODSO')=>('FACTORY') + EXPORTING + i_odsobject = lv_dsona + RECEIVING + r_r_odso = lo_odso. + + CALL METHOD lo_odso->('IS_ACTIVE') + RECEIVING + r_is_active = lv_isact. + + rv_active = lv_isact. + + ENDMETHOD. + + + METHOD zif_abapgit_object~is_locked. + + DATA: lv_object TYPE eqegraarg. + + lv_object = ms_item-obj_name. + OVERLAY lv_object WITH ' '. + lv_object = lv_object && '*'. + + rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'RSD_S_PROV' + iv_argument = lv_object ). + + ENDMETHOD. + + + METHOD zif_abapgit_object~jump. + zcx_abapgit_exception=>raise( |Jump to ODSO is not yet supported| ). + ENDMETHOD. + + + METHOD zif_abapgit_object~serialize. + + DATA: lv_dsonam TYPE c LENGTH 30, + lr_details TYPE REF TO data, + lr_infoobjects TYPE REF TO data, + lr_navigation TYPE REF TO data, + lr_indexes TYPE REF TO data, + lr_index_iobj TYPE REF TO data, + ls_return TYPE bapiret2. + + FIELD-SYMBOLS: + TYPE any, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE, + TYPE STANDARD TABLE. + + TRY. + CREATE DATA lr_details TYPE ('BAPI6116'). + CREATE DATA lr_infoobjects TYPE STANDARD TABLE OF ('BAPI6116IO'). + CREATE DATA lr_navigation TYPE STANDARD TABLE OF ('BAPI6116NA'). + CREATE DATA lr_indexes TYPE STANDARD TABLE OF ('BAPI6116IN'). + CREATE DATA lr_index_iobj TYPE STANDARD TABLE OF ('BAPI6116II'). + CATCH cx_sy_create_data_error. + zcx_abapgit_exception=>raise( |ODSO is not supported on this system| ). + ENDTRY. + + ASSIGN lr_details->* TO . + ASSIGN lr_infoobjects->* TO . + ASSIGN lr_navigation->* TO . + ASSIGN lr_indexes->* TO . + ASSIGN lr_index_iobj->* TO . + + lv_dsonam = ms_item-obj_name. + + CALL FUNCTION 'BAPI_ODSO_GETDETAIL' + EXPORTING + odsobject = lv_dsonam + IMPORTING + details = + return = ls_return + TABLES + infoobjects = + navigationattributes = + indexes = + indexesinfoobjects = . + + IF ls_return-type = 'E'. + zcx_abapgit_exception=>raise( |Error when geting details of ODSO: { ls_return-message }| ). + ENDIF. + + clear_field( EXPORTING iv_fieldname = 'TSTPNM' + CHANGING cs_metadata = ). + + clear_field( EXPORTING iv_fieldname = 'TIMESTMP' + CHANGING cs_metadata = ). + + clear_field( EXPORTING iv_fieldname = 'CONTTIMESTMP' + CHANGING cs_metadata = ). + + clear_field( EXPORTING iv_fieldname = 'OWNER' + CHANGING cs_metadata = ). + + io_xml->add( iv_name = 'ODSO' + ig_data = ). + + io_xml->add( iv_name = 'INFOOBJECTS' + ig_data = ). + + io_xml->add( iv_name = 'NAVIGATION' + ig_data = ). + + io_xml->add( iv_name = 'INDEXES' + ig_data = ). + + io_xml->add( iv_name = 'INDEX_IOBJ' + ig_data = ). + + ENDMETHOD. + + METHOD clear_field. + + FIELD-SYMBOLS: TYPE data. + + ASSIGN COMPONENT iv_fieldname + OF STRUCTURE cs_metadata + TO . + ASSERT sy-subrc = 0. + + CLEAR: . + + ENDMETHOD. +ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_odso.clas.xml b/src/objects/zcl_abapgit_object_odso.clas.xml new file mode 100644 index 000000000..1c346deb0 --- /dev/null +++ b/src/objects/zcl_abapgit_object_odso.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_OBJECT_ODSO + E + ODSO + 1 + X + X + X + + + + diff --git a/src/zcl_abapgit_objects.clas.abap b/src/zcl_abapgit_objects.clas.abap index 754ee0896..8ba0976a0 100644 --- a/src/zcl_abapgit_objects.clas.abap +++ b/src/zcl_abapgit_objects.clas.abap @@ -35,11 +35,11 @@ CLASS zcl_abapgit_objects DEFINITION CLASS-METHODS serialize IMPORTING - !is_item TYPE zif_abapgit_definitions=>ty_item - !iv_language TYPE spras + !is_item TYPE zif_abapgit_definitions=>ty_item + !iv_language TYPE spras !iv_serialize_master_lang_only TYPE abap_bool DEFAULT abap_false RETURNING - VALUE(rs_files_and_item) TYPE ty_serialization + VALUE(rs_files_and_item) TYPE ty_serialization RAISING zcx_abapgit_exception . CLASS-METHODS deserialize @@ -1078,6 +1078,11 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION. APPEND TO rt_results. ENDLOOP. +* IOBJ has to be handled before ODSO + LOOP AT it_results ASSIGNING WHERE obj_type = 'IOBJ'. + APPEND TO rt_results. + ENDLOOP. + LOOP AT it_results ASSIGNING WHERE obj_type <> 'IASP' AND obj_type <> 'PROG' @@ -1087,7 +1092,8 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION. AND obj_type <> 'ENHS' AND obj_type <> 'DDLS' AND obj_type <> 'SPRX' - AND obj_type <> 'WEBI'. + AND obj_type <> 'WEBI' + AND obj_type <> 'IOBJ'. APPEND TO rt_results. ENDLOOP.