diff --git a/src/objects/zcl_abapgit_object_intf.clas.abap b/src/objects/zcl_abapgit_object_intf.clas.abap index b89e205ec..7fe43610b 100644 --- a/src/objects/zcl_abapgit_object_intf.clas.abap +++ b/src/objects/zcl_abapgit_object_intf.clas.abap @@ -172,14 +172,38 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. METHOD zif_abapgit_object~delete. - DATA: ls_clskey TYPE seoclskey. + DATA: ls_clskey TYPE seoclskey, + ls_vseointerf TYPE vseointerf. + ls_clskey-clsname = ms_item-obj_name. + ls_vseointerf = mi_object_oriented_object_fct->get_interface_properties( ls_clskey ). + + IF ls_vseointerf-clsproxy = abap_true. + " Proxy interfaces are managed via SPRX + RETURN. + ENDIF. + + IF zif_abapgit_object~exists( ) = abap_false. + RETURN. + ENDIF. mi_object_oriented_object_fct->delete( ls_clskey ). ENDMETHOD. METHOD zif_abapgit_object~deserialize. + + DATA: ls_vseointerf TYPE vseointerf, + ls_clskey TYPE seoclskey. + + io_xml->read( EXPORTING iv_name = 'VSEOINTERF' + CHANGING cg_data = ls_vseointerf ). + + IF ls_vseointerf-clsproxy = abap_true. + " Proxy interfaces are managed via SPRX + RETURN. + ENDIF. + deserialize_abap( io_xml = io_xml iv_package = iv_package ). @@ -229,6 +253,25 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. ENDMETHOD. + METHOD zif_abapgit_object~is_active. + rv_active = is_active( ). + ENDMETHOD. + + + METHOD zif_abapgit_object~is_locked. + + DATA: lv_object TYPE eqegraarg. + + lv_object = |{ ms_item-obj_name }|. + OVERLAY lv_object WITH '==============================P'. + lv_object = lv_object && '*'. + + rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESEOCLASS' + iv_argument = lv_object ). + + ENDMETHOD. + + METHOD zif_abapgit_object~jump. CALL FUNCTION 'RS_TOOL_ACCESS' EXPORTING @@ -265,22 +308,4 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION. serialize_xml( io_xml ). ENDMETHOD. - - METHOD zif_abapgit_object~is_locked. - - DATA: lv_object TYPE eqegraarg. - - lv_object = |{ ms_item-obj_name }|. - OVERLAY lv_object WITH '==============================P'. - lv_object = lv_object && '*'. - - rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESEOCLASS' - iv_argument = lv_object ). - - ENDMETHOD. - - - METHOD zif_abapgit_object~is_active. - rv_active = is_active( ). - ENDMETHOD. ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_sprx.clas.abap b/src/objects/zcl_abapgit_object_sprx.clas.abap new file mode 100644 index 000000000..990bfdf44 --- /dev/null +++ b/src/objects/zcl_abapgit_object_sprx.clas.abap @@ -0,0 +1,485 @@ +CLASS zcl_abapgit_object_sprx DEFINITION +INHERITING FROM zcl_abapgit_objects_super + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES: + zif_abapgit_object. + + METHODS: + constructor + IMPORTING + is_item TYPE zif_abapgit_definitions=>ty_item + iv_language TYPE spras + RAISING + zcx_abapgit_exception. + + PRIVATE SECTION. + CONSTANTS: + BEGIN OF c_proxy, + data TYPE string VALUE 'PROXY_DATA' ##NO_TEXT, + header TYPE string VALUE 'PROXY_HEADER' ##NO_TEXT, + END OF c_proxy. + + METHODS: + get_object_and_name + EXPORTING + ev_object TYPE sproxhdr-object + ev_obj_name TYPE sproxhdr-obj_name, + + activate_classes + IMPORTING + it_sproxdat_new TYPE sprx_dat_t + RAISING + zcx_abapgit_exception, + + generate_service_definition + IMPORTING + it_sproxdat_new TYPE sprx_dat_t + RAISING + zcx_abapgit_exception, + + delta_handling + IMPORTING + io_xml TYPE REF TO zcl_abapgit_xml_input + EXPORTING + et_sproxhdr_new TYPE sprx_hdr_t + et_sproxdat_new TYPE sprx_dat_t + RAISING + zcx_abapgit_exception, + + check_sprx_tadir + RAISING + zcx_abapgit_exception, + + dequeue_proxy + RAISING + zcx_abapgit_exception, + + save + IMPORTING + it_sproxhdr_new TYPE sprx_hdr_t + it_sproxdat_new TYPE sprx_dat_t. + + DATA: + mv_object TYPE sproxhdr-object, + mv_obj_name TYPE sproxhdr-obj_name. + +ENDCLASS. + + + +CLASS zcl_abapgit_object_sprx IMPLEMENTATION. + + + METHOD activate_classes. + + DATA: lt_objects TYPE STANDARD TABLE OF dwinactiv, + ls_object LIKE LINE OF lt_objects. + + FIELD-SYMBOLS: TYPE sprx_dat. + + " Somehow the classes aren't activated by the proxy framework. + " This seems weird and it's almost certain a result of wrong API calls. + " So as a quick fix we activate them ourselves. This surely has to + " be improved in the future. ZCL_ABAPGIT_OBJECTS_ACTIVATION cannot + " be used as it doesn't activate classes. + + LOOP AT it_sproxdat_new ASSIGNING + WHERE object1 = 'CLAS'. + + ls_object-object = -object1. + ls_object-obj_name = -obj_name1. + INSERT ls_object INTO TABLE lt_objects. + + ENDLOOP. + + CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE' + EXPORTING + activate_ddic_objects = abap_false + with_popup = abap_false + TABLES + objects = lt_objects + EXCEPTIONS + excecution_error = 1 + cancelled = 2 + insert_into_corr_error = 3 + OTHERS = 4. + + IF sy-subrc <> 0. + zcx_abapgit_exception=>raise( |Error from RS_WORKING_OBJECTS_ACTIVATE. Subrc={ sy-subrc }| ). + ENDIF. + + ENDMETHOD. + + + METHOD constructor. + + super->constructor( is_item = is_item + iv_language = iv_language ). + + get_object_and_name( + IMPORTING + ev_object = mv_object + ev_obj_name = mv_obj_name ). + + ENDMETHOD. + + + METHOD delta_handling. + + DATA: lo_proxy TYPE REF TO cl_proxy, + lt_delta TYPE sprx_t_delta, + ls_db_data TYPE sprx_db_data. + + "add Delta-Handling to avoid that single objects created without the dependent objects. + "Thereby the dependent objects will be deleted + TRY. + lo_proxy = cl_proxy_fact=>load_by_abap_name( + object = mv_object + obj_name = mv_obj_name ). + + + lt_delta = lo_proxy->get_delta_all( ). + + ls_db_data = cl_proxy_db=>serialize( + proxy = lo_proxy + inactive = abap_false + delta = lt_delta ). + + et_sproxhdr_new = ls_db_data-sproxhdr. + et_sproxdat_new = ls_db_data-sproxdat. + + CATCH cx_proxy_gen_error. + "No delta for this object -> create + + io_xml->read( + EXPORTING + iv_name = c_proxy-header + CHANGING + cg_data = et_sproxhdr_new ). + + IF et_sproxhdr_new IS INITIAL. + zcx_abapgit_exception=>raise( |SPRX - error deserialize: { ms_item-obj_name }| ). + ENDIF. + + io_xml->read( + EXPORTING + iv_name = c_proxy-data + CHANGING + cg_data = et_sproxdat_new ). + + ENDTRY. + + ENDMETHOD. + + + METHOD generate_service_definition. + + DATA: lv_transport TYPE e070use-ordernum, + lo_proxy_object TYPE REF TO cl_proxy_object, + lx_proxy_fault TYPE REF TO cx_proxy_fault. + + lv_transport = zcl_abapgit_default_transport=>get_instance( + )->get( )-ordernum. + + TRY. + lo_proxy_object = cl_pxn_factory=>create( + application = 'PROXY_UI' + display_only = abap_false + saveable = abap_true + )->load_by_abap_name_int( + object = mv_object + obj_name = mv_obj_name + )->proxy. + + lo_proxy_object->activate( + EXPORTING + activate_all = abap_true + CHANGING + transport_number = lv_transport ). + + lo_proxy_object->dequeue( ). + + CATCH cx_proxy_fault INTO lx_proxy_fault. + zcx_abapgit_exception=>raise( iv_text = |{ lx_proxy_fault->get_text( ) }| + ix_previous = lx_proxy_fault ). + ENDTRY. + + activate_classes( it_sproxdat_new ). + + ENDMETHOD. + + + METHOD get_object_and_name. + + ev_object = ms_item-obj_name(4). + ev_obj_name = ms_item-obj_name+4. + + ENDMETHOD. + + + METHOD zif_abapgit_object~changed_by. + + DATA lv_changed_by TYPE sproxhdr-changed_by. + + rv_user = c_user_unknown. + + SELECT SINGLE changed_by + FROM sproxhdr + INTO lv_changed_by + WHERE object = mv_object + AND obj_name = mv_obj_name + AND inactive = abap_false. + + IF sy-subrc = 0 + AND lv_changed_by IS NOT INITIAL. + rv_user = lv_changed_by. + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. + ENDMETHOD. + + + METHOD zif_abapgit_object~delete. + + DATA: + lv_object TYPE sproxhdr-object, + lv_obj_name TYPE sproxhdr-obj_name, + lv_return_code TYPE i, + lt_log TYPE sprx_log_t. + + get_object_and_name( + IMPORTING + ev_object = lv_object + ev_obj_name = lv_obj_name ). + + cl_proxy_data=>delete_single_proxy( + EXPORTING + object = lv_object + obj_name = lv_obj_name + CHANGING + c_return_code = lv_return_code + ct_log = lt_log ). + IF lv_return_code <> 0. + zcx_abapgit_exception=>raise( 'SPRX: Error from DELETE_SINGLE_PROXY' ). + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_object~deserialize. + + DATA: lt_sproxhdr_new TYPE sprx_hdr_t, + lt_sproxdat_new TYPE sprx_dat_t. + + tadir_insert( iv_package ). + + delta_handling( + EXPORTING + io_xml = io_xml + IMPORTING + et_sproxhdr_new = lt_sproxhdr_new + et_sproxdat_new = lt_sproxdat_new ). + + save( + it_sproxhdr_new = lt_sproxhdr_new + it_sproxdat_new = lt_sproxdat_new ). + + check_sprx_tadir( ). + + dequeue_proxy( ). + + IF mv_object = 'INTF'. + generate_service_definition( lt_sproxdat_new ). + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_object~exists. + + DATA: + lv_status TYPE prx_status, + lv_status_text TYPE prx_status_t. + + cl_proxy_data=>db_get_status( + EXPORTING + object = mv_object + obj_name = mv_obj_name + IMPORTING + status = lv_status + status_text = lv_status_text ). + + IF lv_status = if_proxy=>c_state_active. + rv_bool = abap_true. + ELSE. + rv_bool = abap_false. + ENDIF. + + ENDMETHOD. + + + METHOD zif_abapgit_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. + + + METHOD zif_abapgit_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. + + + METHOD zif_abapgit_object~is_active. + rv_active = abap_true. "dummy implementation + ENDMETHOD. + + + METHOD zif_abapgit_object~is_locked. + rv_is_locked = abap_false. + ENDMETHOD. + + + METHOD zif_abapgit_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. + + + METHOD zif_abapgit_object~serialize. + + DATA: + lo_proxy TYPE REF TO cl_proxy, + ls_sprx_db_data TYPE sprx_db_data, + lt_delta TYPE sprx_t_delta. + + FIELD-SYMBOLS: + LIKE LINE OF ls_sprx_db_data-sproxhdr, + TYPE sprx_dat. + + IF zif_abapgit_object~exists( ) = abap_false. + RETURN. + ENDIF. + + TRY. + lo_proxy = cl_proxy_fact=>load_by_abap_name( + object = mv_object + obj_name = mv_obj_name ). + + lt_delta = lo_proxy->get_delta_all( ). + + ls_sprx_db_data = cl_proxy_db=>serialize( + proxy = lo_proxy + inactive = abap_false + delta = lt_delta ). + + + LOOP AT ls_sprx_db_data-sproxhdr ASSIGNING . + + CLEAR: + -created_by, + -created_on, + -changed_by, + -changed_on. + + ENDLOOP. + + LOOP AT ls_sprx_db_data-sproxdat ASSIGNING . + + CLEAR -warnings. + + ENDLOOP. + + io_xml->add( + iv_name = c_proxy-header + ig_data = ls_sprx_db_data-sproxhdr ). + + io_xml->add( + iv_name = c_proxy-data + ig_data = ls_sprx_db_data-sproxdat ). + + CATCH cx_proxy_gen_error. + zcx_abapgit_exception=>raise( |SPRX - error load proxy { mv_obj_name }| ). + ENDTRY. + + ENDMETHOD. + + METHOD check_sprx_tadir. + + DATA: lt_abap_keys TYPE prx_abapobjects, + ls_abap_key LIKE LINE OF lt_abap_keys, + lx_error TYPE REF TO cx_proxy_gen_error. + + ls_abap_key-object = mv_object. + ls_abap_key-obj_name = mv_obj_name. + APPEND ls_abap_key TO lt_abap_keys. + + TRY. + cl_proxy_utils=>check_sprx_tadir( + objects = lt_abap_keys + repair = abap_true ). + + CATCH cx_proxy_gen_error INTO lx_error. + zcx_abapgit_exception=>raise( iv_text = |{ lx_error->get_text( ) }| + ix_previous = lx_error ). + ENDTRY. + + ENDMETHOD. + + + METHOD dequeue_proxy. + + DATA: lo_proxy TYPE REF TO cl_proxy, + lx_error TYPE REF TO cx_proxy_gen_error. + + TRY. + lo_proxy = cl_proxy_fact=>load_by_abap_name( + object = mv_object + obj_name = mv_obj_name ). + + lo_proxy->dequeue( ). + + CATCH cx_proxy_gen_error INTO lx_error. + zcx_abapgit_exception=>raise( iv_text = |{ lx_error->get_text( ) }| + ix_previous = lx_error ). + ENDTRY. + + ENDMETHOD. + + + METHOD save. + + DATA: + lt_sproxhdr_old TYPE sprx_hdr_t, + lt_sproxdat_old TYPE sprx_dat_t, + lt_sproxsvar_old TYPE sprx_svar_t, + lt_sproxintf_old TYPE sprx_matchintf_t, + lt_sproxsvar_new TYPE sprx_svar_t, + lt_sproxintf_new TYPE sprx_matchintf_t. + + cl_proxy_data=>db_save( + sproxhdr_old = lt_sproxhdr_old + sproxdat_old = lt_sproxdat_old + sproxsvar_old = lt_sproxsvar_old + sproxintf_old = lt_sproxintf_old + sproxhdr_new = it_sproxhdr_new + sproxdat_new = it_sproxdat_new + sproxsvar_new = lt_sproxsvar_new + sproxintf_new = lt_sproxintf_new ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/objects/zcl_abapgit_object_sprx.clas.xml b/src/objects/zcl_abapgit_object_sprx.clas.xml new file mode 100644 index 000000000..3588d0b36 --- /dev/null +++ b/src/objects/zcl_abapgit_object_sprx.clas.xml @@ -0,0 +1,17 @@ + + + + + + ZCL_ABAPGIT_OBJECT_SPRX + 1 + E + Proxy Objects + 1 + X + X + X + + + + diff --git a/src/objects/zcl_abapgit_object_tabl.clas.abap b/src/objects/zcl_abapgit_object_tabl.clas.abap index 59a2cba95..a37b3a1b4 100644 --- a/src/objects/zcl_abapgit_object_tabl.clas.abap +++ b/src/objects/zcl_abapgit_object_tabl.clas.abap @@ -432,6 +432,10 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION. FIELD-SYMBOLS: TYPE any. + IF zif_abapgit_object~exists( ) = abap_false. + " Proxies e.g. delete on its own, nothing todo here then. + RETURN. + ENDIF. lv_objname = ms_item-obj_name. diff --git a/src/objects/zcl_abapgit_object_ttyp.clas.abap b/src/objects/zcl_abapgit_object_ttyp.clas.abap index 8063f2b72..c25cc5bcb 100644 --- a/src/objects/zcl_abapgit_object_ttyp.clas.abap +++ b/src/objects/zcl_abapgit_object_ttyp.clas.abap @@ -64,6 +64,9 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION. DATA: lv_objname TYPE rsedd0-ddobjname. + IF zif_abapgit_object~exists( ) = abap_false. + RETURN. + ENDIF. lv_objname = ms_item-obj_name. diff --git a/src/objects/zcl_abapgit_object_webi.clas.abap b/src/objects/zcl_abapgit_object_webi.clas.abap index 9d6abfa38..31acb4e9a 100644 --- a/src/objects/zcl_abapgit_object_webi.clas.abap +++ b/src/objects/zcl_abapgit_object_webi.clas.abap @@ -23,6 +23,8 @@ CLASS zcl_abapgit_object_webi DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje pvependpoint TYPE STANDARD TABLE OF vependpoint WITH DEFAULT KEY, pvepvisoapext TYPE STANDARD TABLE OF vepvisoapext WITH DEFAULT KEY, pvepparasoapext TYPE STANDARD TABLE OF vepparasoapext WITH DEFAULT KEY, + pwsheader TYPE STANDARD TABLE OF wsheader WITH DEFAULT KEY, + pwssoapprop TYPE STANDARD TABLE OF wssoapprop WITH DEFAULT KEY, END OF ty_webi. DATA: mi_vi TYPE REF TO if_ws_md_vif. @@ -48,8 +50,7 @@ CLASS zcl_abapgit_object_webi DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje ENDCLASS. - -CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION. +CLASS zcl_abapgit_object_webi IMPLEMENTATION. METHOD handle_endpoint. @@ -113,13 +114,22 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION. LOOP AT is_webi-pvepfunction ASSIGNING . IF mi_vi->has_function( funcname = -function - version = sews_c_vif_version-active ) = abap_true. + version = sews_c_vif_version-active ) = abap_true. CONTINUE. ENDIF. - li_function = mi_vi->create_function( - funcname = -function - mapped_name = -mappedname ). + IF mi_vi->has_function( funcname = -function + version = sews_c_vif_version-inactive ) = abap_true. + + li_function = mi_vi->get_function( funcname = -function + version = sews_c_vif_version-inactive ). + + ELSE. + + li_function = mi_vi->create_function( funcname = -function + mapped_name = -mappedname ). + + ENDIF. li_function->set_is_exposed( -is_exposed ). @@ -182,7 +192,12 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION. RETURN. ENDIF. - li_soap = mi_vi->create_soap_extension_virtinfc( ls_soap-soap_appl_uri ). + IF mi_vi->has_soap_extension_virtinfc( sews_c_vif_version-inactive ) = abap_true. + li_soap = mi_vi->get_soap_extension_virtinfc( sews_c_vif_version-inactive ). + ELSE. + li_soap = mi_vi->create_soap_extension_virtinfc( ls_soap-soap_appl_uri ). + ENDIF. + li_soap->set_namespace( ls_soap-namespace ). ENDMETHOD. @@ -300,20 +315,27 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION. METHOD zif_abapgit_object~deserialize. - DATA: ls_webi TYPE ty_webi, - lv_name TYPE vepname, - ls_header LIKE LINE OF ls_webi-pvepheader, - lv_text TYPE string ##needed, - lx_root TYPE REF TO cx_root, - lv_exists TYPE abap_bool, - li_root TYPE REF TO if_ws_md_vif_root. + DATA: ls_webi TYPE ty_webi, + lv_name TYPE vepname, + ls_header LIKE LINE OF ls_webi-pvepheader, + lx_root TYPE REF TO cx_root, + lv_exists TYPE abap_bool, + li_root TYPE REF TO if_ws_md_vif_root, + ls_endpoint LIKE LINE OF ls_webi-pvependpoint. io_xml->read( EXPORTING iv_name = 'WEBI' - CHANGING cg_data = ls_webi ). + CHANGING cg_data = ls_webi ). lv_name = ms_item-obj_name. + READ TABLE ls_webi-pvependpoint INDEX 1 INTO ls_endpoint. + ASSERT sy-subrc = 0. + IF ls_endpoint-auto_generated = abap_true. + " handled by SPRX. + RETURN. + ENDIF. + READ TABLE ls_webi-pvepheader INDEX 1 INTO ls_header. ASSERT sy-subrc = 0. @@ -348,8 +370,7 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION. mi_vi->if_ws_md_lockable_object~unlock( ). CATCH cx_ws_md_exception ##no_handler. ENDTRY. - lv_text = lx_root->if_message~get_text( ). - zcx_abapgit_exception=>raise( 'error deserializing WEBI' ). + zcx_abapgit_exception=>raise( lx_root->if_message~get_text( ) ). ENDTRY. zcl_abapgit_objects_activation=>add_item( ms_item ). @@ -410,8 +431,9 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION. li_vi TYPE REF TO if_ws_md_vif, lv_name TYPE vepname. - FIELD-SYMBOLS: LIKE LINE OF ls_webi-pvepheader, - LIKE LINE OF ls_webi-pvependpoint. + FIELD-SYMBOLS: LIKE LINE OF ls_webi-pvepheader, + LIKE LINE OF ls_webi-pvependpoint, + TYPE wsheader. CALL FUNCTION 'WEBI_GET_OBJECT' EXPORTING @@ -434,6 +456,8 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION. pvependpoint = ls_webi-pvependpoint pvepvisoapext = ls_webi-pvepvisoapext pvepparasoapext = ls_webi-pvepparasoapext + pwsheader = ls_webi-pwsheader + pwssoapprop = ls_webi-pwssoapprop EXCEPTIONS version_not_found = 1 webi_not_exist = 2 @@ -455,19 +479,31 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION. zcx_abapgit_exception=>raise( 'error serializing WEBI' ). ENDTRY. - LOOP AT ls_webi-pvepheader ASSIGNING . - CLEAR -author. - CLEAR -createdon. - CLEAR -changedby. - CLEAR -changedon. - CLEAR -ctime. - CLEAR -text_id. - CLEAR -utime. - CLEAR -wsint_version. + LOOP AT ls_webi-pvepheader ASSIGNING . + CLEAR -author. + CLEAR -createdon. + CLEAR -changedby. + CLEAR -changedon. + CLEAR -ctime. + CLEAR -text_id. + CLEAR -utime. + CLEAR -wsint_version. ENDLOOP. - LOOP AT ls_webi-pvependpoint ASSIGNING . - CLEAR: -clustd. + LOOP AT ls_webi-pvependpoint ASSIGNING . + CLEAR -clustd. + ENDLOOP. + + LOOP AT ls_webi-pwsheader ASSIGNING . + + CLEAR: + -author, + -createdon, + -changedby, + -changedon, + -ctime, + -utime. + ENDLOOP. io_xml->add( iv_name = 'WEBI' diff --git a/src/zcl_abapgit_objects.clas.abap b/src/zcl_abapgit_objects.clas.abap index 70256cec0..0a2a32c01 100644 --- a/src/zcl_abapgit_objects.clas.abap +++ b/src/zcl_abapgit_objects.clas.abap @@ -224,11 +224,12 @@ CLASS zcl_abapgit_objects DEFINITION it_results TYPE zif_abapgit_definitions=>ty_results_tt RETURNING VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt. + ENDCLASS. -CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION. +CLASS zcl_abapgit_objects IMPLEMENTATION. METHOD adjust_namespaces. @@ -691,6 +692,8 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION. METHOD filter_files_to_deserialize. + FIELD-SYMBOLS: LIKE LINE OF rt_results. + rt_results = it_results. DELETE rt_results WHERE match = abap_true. " Full match @@ -819,6 +822,16 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF it_results. +* WEBI has to be handled before SPRX. + LOOP AT it_results ASSIGNING WHERE obj_type = 'WEBI'. + APPEND TO rt_results. + ENDLOOP. + +* SPRX has to be handled before depended objects CLAS/INFT/TABL etc. + LOOP AT it_results ASSIGNING WHERE obj_type = 'SPRX'. + APPEND TO rt_results. + ENDLOOP. + * XSLT has to be handled before CLAS/PROG LOOP AT it_results ASSIGNING WHERE obj_type = 'XSLT'. APPEND TO rt_results. @@ -855,7 +868,9 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION. AND obj_type <> 'XSLT' AND obj_type <> 'PINF' AND obj_type <> 'ENHS' - AND obj_type <> 'DDLS'. + AND obj_type <> 'DDLS' + AND obj_type <> 'SPRX' + AND obj_type <> 'WEBI'. APPEND TO rt_results. ENDLOOP.