From cd09fe2b743ca962dfa07d52f062a4eca2ab2123 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 11 Feb 2017 11:11:02 +0000 Subject: [PATCH 1/3] DDLS support, #425 --- src/zabapgit_object_ddls.prog.abap | 138 ++++++++++++++++++++++ src/zabapgit_object_ddls.prog.xml | 22 ++++ src/zabapgit_object_serializing.prog.abap | 1 + src/zabapgit_object_view.prog.abap | 18 ++- src/zabapgit_tadir.prog.abap | 1 + 5 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 src/zabapgit_object_ddls.prog.abap create mode 100644 src/zabapgit_object_ddls.prog.xml diff --git a/src/zabapgit_object_ddls.prog.abap b/src/zabapgit_object_ddls.prog.abap new file mode 100644 index 000000000..4c5299ab0 --- /dev/null +++ b/src/zabapgit_object_ddls.prog.abap @@ -0,0 +1,138 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_VIEW +*&---------------------------------------------------------------------* + +* todo: +* - downport + +*----------------------------------------------------------------------* +* CLASS lcl_object_view DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_ddls 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_ddls IMPLEMENTATION. + + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + + METHOD lif_object~changed_by. +* todo + rv_user = c_user_unknown. + ENDMETHOD. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + + rs_metadata-ddic = abap_true. + rs_metadata-delete_tadir = abap_true. + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. +* todo + rv_bool = abap_true. + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + lcx_exception=>raise( 'todo, DDLS jump' ). + ENDMETHOD. "jump + + METHOD lif_object~delete. + + DATA: li_ddl TYPE REF TO if_dd_ddl_handler. + + + li_ddl = cl_dd_ddl_handler_factory=>create( ). + TRY. + li_ddl->delete( ms_item-obj_name ). + CATCH cx_dd_ddl_delete. +* todo + ENDTRY. + + ENDMETHOD. "delete + + METHOD lif_object~serialize. + + DATA: li_ddl TYPE REF TO if_dd_ddl_handler, + ls_ddddlsrcv TYPE ddddlsrcv. + + + li_ddl = cl_dd_ddl_handler_factory=>create( ). + + TRY. + li_ddl->read( + EXPORTING + name = ms_item-obj_name + get_state = 'A' + IMPORTING + ddddlsrcv_wa = ls_ddddlsrcv ). + CATCH cx_dd_ddl_read. +* todo + BREAK-POINT. + ENDTRY. + + CLEAR ls_ddddlsrcv-as4user. + CLEAR ls_ddddlsrcv-as4date. + CLEAR ls_ddddlsrcv-as4time. + + mo_files->add_string( iv_ext = 'asddls' + iv_string = ls_ddddlsrcv-source ) ##NO_TEXT. + + CLEAR ls_ddddlsrcv-source. + + io_xml->add( iv_name = 'DDLS' + ig_data = ls_ddddlsrcv ). + + ENDMETHOD. "serialize + + METHOD lif_object~deserialize. + + DATA: li_ddl TYPE REF TO if_dd_ddl_handler, + ls_ddddlsrcv TYPE ddddlsrcv. + + + io_xml->read( EXPORTING iv_name = 'DDLS' + CHANGING cg_data = ls_ddddlsrcv ). + + ls_ddddlsrcv-source = mo_files->read_string( 'asddls' ) ##NO_TEXT. + + li_ddl = cl_dd_ddl_handler_factory=>create( ). + + TRY. + li_ddl->save( + EXPORTING + name = ms_item-obj_name + put_state = 'N' + ddddlsrcv_wa = ls_ddddlsrcv ). + + li_ddl->write_tadir( + objectname = ms_item-obj_name + devclass = iv_package + prid = 0 ). + CATCH cx_dd_ddl_save. +* todo + BREAK-POINT. + ENDTRY. + + lcl_objects_activation=>add_item( ms_item ). + + ENDMETHOD. "deserialize + + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + +ENDCLASS. "lcl_object_view IMPLEMENTATION diff --git a/src/zabapgit_object_ddls.prog.xml b/src/zabapgit_object_ddls.prog.xml new file mode 100644 index 000000000..b9c4d376d --- /dev/null +++ b/src/zabapgit_object_ddls.prog.xml @@ -0,0 +1,22 @@ + + + + + + ZABAPGIT_OBJECT_DDLS + A + X + I + E + X + + + + R + Include ZABAPGIT_OBJECT_VIEW + 28 + + + + + diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index a15b14df5..4e34ba17e 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -8,6 +8,7 @@ INCLUDE zabapgit_object_acid. INCLUDE zabapgit_object_auth. INCLUDE zabapgit_object_oo_functions. INCLUDE zabapgit_object_clas. +INCLUDE zabapgit_object_ddls. INCLUDE zabapgit_object_doct. INCLUDE zabapgit_object_docv. INCLUDE zabapgit_object_doma. diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index 49632e13f..ab5d12e93 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -65,7 +65,8 @@ CLASS lcl_object_view IMPLEMENTATION. METHOD lif_object~exists. - DATA: lv_viewname TYPE dd25l-viewname. + DATA: lv_viewname TYPE dd25l-viewname, + lv_ddl_view TYPE abap_bool. SELECT SINGLE viewname FROM dd25l INTO lv_viewname @@ -74,6 +75,21 @@ CLASS lcl_object_view IMPLEMENTATION. AND as4vers = '0000'. rv_bool = boolc( sy-subrc = 0 ). + IF rv_bool = abap_true. +* todo, downport + TRY. + CALL METHOD cl_dd_ddl_utilities=>check_for_ddl_view + EXPORTING + objname = lv_viewname + RECEIVING + is_ddl_view = lv_ddl_view. + CATCH cx_dd_ddl_exception. + ENDTRY. + IF lv_ddl_view = abap_true. + rv_bool = abap_false. + ENDIF. + ENDIF. + ENDMETHOD. "lif_object~exists METHOD lif_object~jump. diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index 660c64914..10dd69ff8 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -141,6 +141,7 @@ CLASS lcl_tadir IMPLEMENTATION. AND object <> 'SOTR' AND object <> 'SFB1' AND object <> 'SFB2' + AND object <> 'STOB' " auto generated by core data services AND delflag = abap_false ORDER BY PRIMARY KEY. "#EC CI_GENBUFF "#EC CI_SUBRC From f61bb69cd714382248bd1067bde924c3fcd7d4de Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 11 Feb 2017 11:43:16 +0000 Subject: [PATCH 2/3] DDLS: some downporting --- src/zabapgit_object_ddls.prog.abap | 70 ++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/src/zabapgit_object_ddls.prog.abap b/src/zabapgit_object_ddls.prog.abap index 4c5299ab0..3fea231c3 100644 --- a/src/zabapgit_object_ddls.prog.abap +++ b/src/zabapgit_object_ddls.prog.abap @@ -52,12 +52,17 @@ CLASS lcl_object_ddls IMPLEMENTATION. METHOD lif_object~delete. - DATA: li_ddl TYPE REF TO if_dd_ddl_handler. + DATA: li_ddl TYPE REF TO object. - li_ddl = cl_dd_ddl_handler_factory=>create( ). + CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') + RECEIVING + handler = li_ddl. + TRY. - li_ddl->delete( ms_item-obj_name ). + CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~DELETE') + EXPORTING + name = ms_item-obj_name. CATCH cx_dd_ddl_delete. * todo ENDTRY. @@ -66,41 +71,59 @@ CLASS lcl_object_ddls IMPLEMENTATION. METHOD lif_object~serialize. - DATA: li_ddl TYPE REF TO if_dd_ddl_handler, - ls_ddddlsrcv TYPE ddddlsrcv. + DATA: li_ddl TYPE REF TO object, + lv_source TYPE string, + lr_data TYPE REF TO data. + + FIELD-SYMBOLS: TYPE any, + TYPE any. - li_ddl = cl_dd_ddl_handler_factory=>create( ). + CREATE DATA lr_data TYPE ('DDDDLSRCV'). + ASSIGN lr_data->* TO . + + CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') + RECEIVING + handler = li_ddl. TRY. - li_ddl->read( + CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~READ') EXPORTING name = ms_item-obj_name get_state = 'A' IMPORTING - ddddlsrcv_wa = ls_ddddlsrcv ). + ddddlsrcv_wa = . CATCH cx_dd_ddl_read. * todo BREAK-POINT. ENDTRY. - CLEAR ls_ddddlsrcv-as4user. - CLEAR ls_ddddlsrcv-as4date. - CLEAR ls_ddddlsrcv-as4time. + ASSIGN COMPONENT 'AS4USER' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + CLEAR . + ASSIGN COMPONENT 'AS4DATE' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + CLEAR . + ASSIGN COMPONENT 'AS4TIME' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + CLEAR . + + ASSIGN COMPONENT 'SOURCE' OF STRUCTURE TO . + ASSERT sy-subrc = 0. mo_files->add_string( iv_ext = 'asddls' - iv_string = ls_ddddlsrcv-source ) ##NO_TEXT. + iv_string = ) ##NO_TEXT. - CLEAR ls_ddddlsrcv-source. + CLEAR . io_xml->add( iv_name = 'DDLS' - ig_data = ls_ddddlsrcv ). + ig_data = ). ENDMETHOD. "serialize METHOD lif_object~deserialize. - DATA: li_ddl TYPE REF TO if_dd_ddl_handler, + DATA: li_ddl TYPE REF TO object, ls_ddddlsrcv TYPE ddddlsrcv. @@ -109,19 +132,22 @@ CLASS lcl_object_ddls IMPLEMENTATION. ls_ddddlsrcv-source = mo_files->read_string( 'asddls' ) ##NO_TEXT. - li_ddl = cl_dd_ddl_handler_factory=>create( ). + CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') + RECEIVING + handler = li_ddl. TRY. - li_ddl->save( + CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~SAVE') EXPORTING name = ms_item-obj_name put_state = 'N' - ddddlsrcv_wa = ls_ddddlsrcv ). + ddddlsrcv_wa = ls_ddddlsrcv. - li_ddl->write_tadir( - objectname = ms_item-obj_name - devclass = iv_package - prid = 0 ). + CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~WRITE_TADIR') + EXPORTING + objectname = ms_item-obj_name + devclass = iv_package + prid = 0. CATCH cx_dd_ddl_save. * todo BREAK-POINT. From 4b1002afbce16c4f8c3ada030503d409888ebb58 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 13 Feb 2017 10:45:08 +0100 Subject: [PATCH 3/3] DDLS: downport --- src/zabapgit_object_ddls.prog.abap | 38 +++++++++++++++++------------- src/zabapgit_object_view.prog.abap | 16 ++++++------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/src/zabapgit_object_ddls.prog.abap b/src/zabapgit_object_ddls.prog.abap index 3fea231c3..18b7c8022 100644 --- a/src/zabapgit_object_ddls.prog.abap +++ b/src/zabapgit_object_ddls.prog.abap @@ -32,7 +32,7 @@ CLASS lcl_object_ddls IMPLEMENTATION. METHOD lif_object~changed_by. * todo rv_user = c_user_unknown. - ENDMETHOD. + ENDMETHOD. "lif_object~changed_by METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). @@ -63,8 +63,8 @@ CLASS lcl_object_ddls IMPLEMENTATION. CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~DELETE') EXPORTING name = ms_item-obj_name. - CATCH cx_dd_ddl_delete. -* todo + CATCH cx_root. + lcx_exception=>raise( 'DDLS error' ). ENDTRY. ENDMETHOD. "delete @@ -93,9 +93,8 @@ CLASS lcl_object_ddls IMPLEMENTATION. get_state = 'A' IMPORTING ddddlsrcv_wa = . - CATCH cx_dd_ddl_read. -* todo - BREAK-POINT. + CATCH cx_root. + lcx_exception=>raise( 'DDLS error' ). ENDTRY. ASSIGN COMPONENT 'AS4USER' OF STRUCTURE TO . @@ -112,7 +111,7 @@ CLASS lcl_object_ddls IMPLEMENTATION. ASSERT sy-subrc = 0. mo_files->add_string( iv_ext = 'asddls' - iv_string = ) ##NO_TEXT. + iv_string = ) ##no_text. CLEAR . @@ -123,14 +122,22 @@ CLASS lcl_object_ddls IMPLEMENTATION. METHOD lif_object~deserialize. - DATA: li_ddl TYPE REF TO object, - ls_ddddlsrcv TYPE ddddlsrcv. + DATA: li_ddl TYPE REF TO object, + lr_data TYPE REF TO data. + FIELD-SYMBOLS: TYPE any, + TYPE any. + + + CREATE DATA lr_data TYPE ('DDDDLSRCV'). + ASSIGN lr_data->* TO . io_xml->read( EXPORTING iv_name = 'DDLS' - CHANGING cg_data = ls_ddddlsrcv ). + CHANGING cg_data = ). - ls_ddddlsrcv-source = mo_files->read_string( 'asddls' ) ##NO_TEXT. + ASSIGN COMPONENT 'SOURCE' OF STRUCTURE TO . + ASSERT sy-subrc = 0. + = mo_files->read_string( 'asddls' ) ##no_text. CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE') RECEIVING @@ -141,16 +148,15 @@ CLASS lcl_object_ddls IMPLEMENTATION. EXPORTING name = ms_item-obj_name put_state = 'N' - ddddlsrcv_wa = ls_ddddlsrcv. + ddddlsrcv_wa = . CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~WRITE_TADIR') EXPORTING objectname = ms_item-obj_name devclass = iv_package prid = 0. - CATCH cx_dd_ddl_save. -* todo - BREAK-POINT. + CATCH cx_root. + lcx_exception=>raise( 'DDLS error' ). ENDTRY. lcl_objects_activation=>add_item( ms_item ). @@ -159,6 +165,6 @@ CLASS lcl_object_ddls IMPLEMENTATION. METHOD lif_object~compare_to_remote_version. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. - ENDMETHOD. + ENDMETHOD. "lif_object~compare_to_remote_version ENDCLASS. "lcl_object_view IMPLEMENTATION diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index ab5d12e93..da3799483 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -56,7 +56,7 @@ CLASS lcl_object_view IMPLEMENTATION. rv_user = c_user_unknown. ENDIF. - ENDMETHOD. + ENDMETHOD. "lif_object~changed_by METHOD lif_object~get_metadata. rs_metadata = get_metadata( ). @@ -76,18 +76,18 @@ CLASS lcl_object_view IMPLEMENTATION. rv_bool = boolc( sy-subrc = 0 ). IF rv_bool = abap_true. -* todo, downport TRY. - CALL METHOD cl_dd_ddl_utilities=>check_for_ddl_view + CALL METHOD ('CL_DD_DDL_UTILITIES')=>('CHECK_FOR_DDL_VIEW') EXPORTING objname = lv_viewname RECEIVING is_ddl_view = lv_ddl_view. - CATCH cx_dd_ddl_exception. + + IF lv_ddl_view = abap_true. + rv_bool = abap_false. + ENDIF. + CATCH cx_root. ENDTRY. - IF lv_ddl_view = abap_true. - rv_bool = abap_false. - ENDIF. ENDIF. ENDMETHOD. "lif_object~exists @@ -262,6 +262,6 @@ CLASS lcl_object_view IMPLEMENTATION. METHOD lif_object~compare_to_remote_version. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. - ENDMETHOD. + ENDMETHOD. "lif_object~compare_to_remote_version ENDCLASS. "lcl_object_view IMPLEMENTATION