From a5e50342e16f88974191b96030461288d0b95427 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Mon, 7 Aug 2017 19:36:45 +0000 Subject: [PATCH 1/3] First stept CMPT implementation --- src/zabapgit_object_cmpt.prog.abap | 135 ++++++++++++++++++++++ src/zabapgit_object_cmpt.prog.xml | 22 ++++ src/zabapgit_object_serializing.prog.abap | 1 + 3 files changed, 158 insertions(+) create mode 100644 src/zabapgit_object_cmpt.prog.abap create mode 100644 src/zabapgit_object_cmpt.prog.xml diff --git a/src/zabapgit_object_cmpt.prog.abap b/src/zabapgit_object_cmpt.prog.abap new file mode 100644 index 000000000..37083cfa9 --- /dev/null +++ b/src/zabapgit_object_cmpt.prog.abap @@ -0,0 +1,135 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_CMPT +*&---------------------------------------------------------------------* + +CLASS lcl_object_cmpt DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. +ENDCLASS. + +CLASS lcl_object_cmpt IMPLEMENTATION. + + METHOD lif_object~has_changed_since. + + rv_changed = abap_true. + + ENDMETHOD. + + METHOD lif_object~changed_by. + + DATA(template) = CAST cl_cmp_template( cl_cmp_template=>s_create_from_db( i_name = |{ ms_item-obj_name }| + i_version = 'A' ) ). + + + rv_user = template->if_cmp_template_edit~get_change_user( ). + + ENDMETHOD. + + METHOD lif_object~get_metadata. + + rs_metadata = get_metadata( ). + rs_metadata-delete_tadir = abap_true. + + ENDMETHOD. + + METHOD lif_object~exists. + + DATA: name TYPE c LENGTH 30. + + name = ms_item-obj_name. + + rv_bool = cl_cmp_template=>s_template_exists( i_name = name + i_version = 'A' ). + + ENDMETHOD. + + METHOD lif_object~serialize. + + DATA(cmp_db) = cl_cmp_template=>s_get_db_access( ). + + DATA(template) = cmp_db->read_template( i_name = |{ ms_item-obj_name }| + i_version = 'A' ). + + io_xml->add( iv_name = 'CMPT' + ig_data = template ). + + ENDMETHOD. + + METHOD lif_object~deserialize. + + DATA: template TYPE if_cmp_template_db=>typ_template. + + io_xml->read( + EXPORTING + iv_name = 'CMPT' + CHANGING + cg_data = template ). + + DATA(cmp_db) = cl_cmp_template=>s_get_db_access( ). + + cmp_db->save_template( i_template_db = template + i_flg_header = abap_true + i_flg_lines = abap_true ). + + CALL FUNCTION 'RS_CORR_INSERT' + EXPORTING + object = ms_item-obj_name + object_class = ms_item-obj_type + mode = 'I' + 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. + lcx_exception=>raise( 'error from RS_CORR_INSERT, CMPT' ). + ENDIF. + + ENDMETHOD. + + METHOD lif_object~delete. + + DATA(cmp_db) = cl_cmp_template=>s_get_db_access( ). + + DATA(deleted) = cmp_db->delete_template( i_name = |{ ms_item-obj_name }| + i_version = 'A' + i_flg_header = abap_true + i_flg_lines = abap_true ). + + IF deleted = abap_false. + lcx_exception=>raise( |Error deleting CMPT { ms_item-obj_name }| ). + ENDIF. + + ENDMETHOD. + + + METHOD lif_object~jump. + + CALL FUNCTION 'RS_TOOL_ACCESS' + EXPORTING + operation = 'SHOW' + object_name = ms_item-obj_name + object_type = ms_item-obj_type + EXCEPTIONS + not_executed = 1 + invalid_object_type = 2 + OTHERS = 3. + + IF sy-subrc <> 0. + lcx_exception=>raise( |Error from RS_TOOL_ACCESS, CMPT| ). + ENDIF. + + ENDMETHOD. + + METHOD lif_object~compare_to_remote_version. + + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zabapgit_object_cmpt.prog.xml b/src/zabapgit_object_cmpt.prog.xml new file mode 100644 index 000000000..fc9840ac2 --- /dev/null +++ b/src/zabapgit_object_cmpt.prog.xml @@ -0,0 +1,22 @@ + + + + + + ZABAPGIT_OBJECT_CMPT + A + X + I + E + X + + + + R + Include ZABAPGIT_OBJECT_CMPT + 28 + + + + + diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index a1d4a6ac0..faf27989e 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_cmpt. INCLUDE zabapgit_object_dcls. INCLUDE zabapgit_object_ddls. INCLUDE zabapgit_object_dial. From 5a108dd275cb736c5d978b520c2ec558ff740507 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Mon, 7 Aug 2017 20:04:06 +0000 Subject: [PATCH 2/3] downport CMPT --- src/zabapgit_object_cmpt.prog.abap | 130 +++++++++++++++++++++++------ 1 file changed, 105 insertions(+), 25 deletions(-) diff --git a/src/zabapgit_object_cmpt.prog.abap b/src/zabapgit_object_cmpt.prog.abap index 37083cfa9..8becf90a4 100644 --- a/src/zabapgit_object_cmpt.prog.abap +++ b/src/zabapgit_object_cmpt.prog.abap @@ -5,11 +5,36 @@ CLASS lcl_object_cmpt DEFINITION INHERITING FROM lcl_objects_super FINAL. PUBLIC SECTION. + METHODS: + constructor + IMPORTING + is_item TYPE lif_defs=>ty_item + iv_language TYPE spras. + INTERFACES lif_object. + + PRIVATE SECTION. + DATA: mo_cmp_db TYPE REF TO object. + ENDCLASS. CLASS lcl_object_cmpt IMPLEMENTATION. + METHOD constructor. + + super->constructor( is_item = is_item + iv_language = iv_language ). + + TRY. + CALL METHOD ('CL_CMP_TEMPLATE')=>('S_GET_DB_ACCESS') + RECEIVING + r_ref_db_access = mo_cmp_db. + + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + METHOD lif_object~has_changed_since. rv_changed = abap_true. @@ -18,11 +43,23 @@ CLASS lcl_object_cmpt IMPLEMENTATION. METHOD lif_object~changed_by. - DATA(template) = CAST cl_cmp_template( cl_cmp_template=>s_create_from_db( i_name = |{ ms_item-obj_name }| - i_version = 'A' ) ). + DATA: mi_cmp_template TYPE REF TO object. + TRY. + CALL METHOD ('CL_CMP_TEMPLATE')=>('S_CREATE_FROM_DB') + EXPORTING + i_name = |{ ms_item-obj_name }| + i_version = 'A' + RECEIVING + r_ref_template = mi_cmp_template. - rv_user = template->if_cmp_template_edit~get_change_user( ). + CALL METHOD mi_cmp_template->('IF_CMP_TEMPLATE_EDIT~GET_CHANGE_USER') + RECEIVING + r_user = rv_user. + + CATCH cx_root. + lcx_exception=>raise( 'CMPT not supported' ). + ENDTRY. ENDMETHOD. @@ -39,38 +76,72 @@ CLASS lcl_object_cmpt IMPLEMENTATION. name = ms_item-obj_name. - rv_bool = cl_cmp_template=>s_template_exists( i_name = name - i_version = 'A' ). + TRY. + CALL METHOD ('CL_CMP_TEMPLATE')=>('S_TEMPLATE_EXISTS') + EXPORTING + i_name = name + i_version = 'A' + RECEIVING + r_flg_exists = rv_bool. + + CATCH cx_root. + lcx_exception=>raise( 'CMPT not supported' ). + ENDTRY. ENDMETHOD. METHOD lif_object~serialize. - DATA(cmp_db) = cl_cmp_template=>s_get_db_access( ). + DATA: lr_template TYPE REF TO data. + FIELD-SYMBOLS: