fix some naming conventions #1132 (#1211)

This commit is contained in:
Lars Hvam 2018-02-17 13:55:12 +01:00 committed by GitHub
parent 85d364d460
commit 803148fa0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
48 changed files with 3362 additions and 3048 deletions

View File

@ -67,11 +67,11 @@ CLASS ZCL_ABAPGIT_2FA_AUTH_REGISTRY IMPLEMENTATION.
METHOD get_authenticator_for_url.
FIELD-SYMBOLS: <lo_authenticator> LIKE LINE OF gt_registered_authenticators.
FIELD-SYMBOLS: <li_authenticator> LIKE LINE OF gt_registered_authenticators.
LOOP AT gt_registered_authenticators ASSIGNING <lo_authenticator>.
IF <lo_authenticator>->supports_url( iv_url ) = abap_true.
ro_authenticator = <lo_authenticator>.
LOOP AT gt_registered_authenticators ASSIGNING <li_authenticator>.
IF <li_authenticator>->supports_url( iv_url ) = abap_true.
ro_authenticator = <li_authenticator>.
RETURN.
ENDIF.
ENDLOOP.

View File

@ -6,36 +6,46 @@ CLASS zcl_abapgit_object_auth DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_auth IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
CLASS ZCL_ABAPGIT_OBJECT_AUTH IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
* looks like "changed by user" is not stored in the database
rv_user = c_user_unknown.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_authx TYPE authx.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
SELECT SINGLE * FROM authx INTO ls_authx
WHERE fieldname = ms_item-obj_name. "#EC CI_GENBUFF
METHOD zif_abapgit_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.
RETURN.
zcx_abapgit_exception=>raise( 'error from SUSR_AUTF_DELETE_FIELD' ).
ENDIF.
io_xml->add( iv_name = 'AUTHX'
ig_data = ls_authx ).
ENDMETHOD. "zif_abapgit_object~delete
ENDMETHOD. "zif_abapgit_object~serialize
METHOD zif_abapgit_object~deserialize.
* see include LSAUT_FIELDF02
@ -63,29 +73,6 @@ CLASS zcl_abapgit_object_auth IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~deserialize
METHOD zif_abapgit_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.
zcx_abapgit_exception=>raise( 'error from SUSR_AUTF_DELETE_FIELD' ).
ENDIF.
ENDMETHOD. "zif_abapgit_object~delete
METHOD zif_abapgit_object~exists.
@ -99,22 +86,45 @@ CLASS zcl_abapgit_object_auth IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~exists
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~jump.
DATA: field TYPE fieldname.
DATA: lv_field TYPE fieldname.
field = ms_item-obj_name.
lv_field = ms_item-obj_name.
* TODO, this function module does not exist in 702
CALL FUNCTION 'SU20_MAINTAIN_SNGL'
EXPORTING
id_field = field
id_field = lv_field
id_wbo_mode = abap_false.
ENDMETHOD. "zif_abapgit_object~jump
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_auth IMPLEMENTATION
METHOD zif_abapgit_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. "zif_abapgit_object~serialize
ENDCLASS.

View File

@ -33,150 +33,140 @@ CLASS zcl_abapgit_object_clas_old DEFINITION PUBLIC INHERITING FROM zcl_abapgit_
ENDCLASS.
CLASS zcl_abapgit_object_clas_old IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
DATA:
lt_includes TYPE seoincl_t.
FIELD-SYMBOLS <incl> LIKE LINE OF lt_includes.
CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
lt_includes = mo_object_oriented_object_fct->get_includes( ms_item-obj_name ).
LOOP AT lt_includes ASSIGNING <incl>.
rv_changed = check_prog_changed_since(
iv_program = <incl>
iv_timestamp = iv_timestamp
iv_skip_gui = abap_true ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~changed_by.
TYPES: BEGIN OF ty_includes,
programm TYPE programm,
END OF ty_includes.
TYPES: BEGIN OF ty_reposrc,
unam TYPE reposrc-unam,
udat TYPE reposrc-udat,
utime TYPE reposrc-utime,
END OF ty_reposrc.
DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc,
ls_reposrc LIKE LINE OF lt_reposrc,
lt_includes TYPE STANDARD TABLE OF ty_includes.
lt_includes = mo_object_oriented_object_fct->get_includes( ms_item-obj_name ).
ASSERT lines( lt_includes ) > 0.
SELECT unam udat utime FROM reposrc
INTO TABLE lt_reposrc
FOR ALL ENTRIES IN lt_includes
WHERE progname = lt_includes-programm
AND r3state = 'A'.
IF sy-subrc <> 0.
rv_user = c_user_unknown.
ELSE.
SORT lt_reposrc BY udat DESCENDING utime DESCENDING.
READ TABLE lt_reposrc INDEX 1 INTO ls_reposrc.
ASSERT sy-subrc = 0.
rv_user = ls_reposrc-unam.
ENDIF.
METHOD constructor.
super->constructor(
is_item = is_item
iv_language = iv_language ).
mo_object_oriented_object_fct = zcl_abapgit_oo_factory=>make( ms_item-obj_type ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: ls_class_key TYPE seoclskey.
METHOD deserialize_abap.
DATA: ls_vseoclass TYPE vseoclass,
lt_source TYPE seop_source_string,
lt_local_definitions TYPE seop_source_string,
lt_local_implementations TYPE seop_source_string,
lt_local_macros TYPE seop_source_string,
lt_test_classes TYPE seop_source_string,
lt_descriptions TYPE zif_abapgit_definitions=>ty_seocompotx_tt,
ls_class_key TYPE seoclskey.
lt_source = mo_files->read_abap( ).
lt_local_definitions = mo_files->read_abap( iv_extra = 'locals_def'
iv_error = abap_false ). "#EC NOTEXT
lt_local_implementations = mo_files->read_abap( iv_extra = 'locals_imp'
iv_error = abap_false ). "#EC NOTEXT
lt_local_macros = mo_files->read_abap( iv_extra = 'macros'
iv_error = abap_false ). "#EC NOTEXT
lt_test_classes = mo_files->read_abap( iv_extra = 'testclasses'
iv_error = abap_false ). "#EC NOTEXT
ls_class_key-clsname = ms_item-obj_name.
rv_bool = mo_object_oriented_object_fct->exists( iv_object_name = ls_class_key ).
ENDMETHOD. "zif_abapgit_object~exists
io_xml->read( EXPORTING iv_name = 'VSEOCLASS'
CHANGING cg_data = ls_vseoclass ).
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
mo_object_oriented_object_fct->create(
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = 'CLAS'
in_new_window = abap_true.
ENDMETHOD. "jump
iv_package = iv_package
CHANGING
is_properties = ls_vseoclass ).
METHOD zif_abapgit_object~delete.
DATA: ls_clskey TYPE seoclskey.
ls_clskey-clsname = ms_item-obj_name.
mo_object_oriented_object_fct->generate_locals(
is_key = ls_class_key
iv_force = seox_true
it_local_definitions = lt_local_definitions
it_local_implementations = lt_local_implementations
it_local_macros = lt_local_macros
it_local_test_classes = lt_test_classes ).
mo_object_oriented_object_fct->delete( ls_clskey ).
ENDMETHOD. "delete
mo_object_oriented_object_fct->deserialize_source(
is_key = ls_class_key
it_source = lt_source ).
METHOD zif_abapgit_object~serialize.
io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
CHANGING cg_data = lt_descriptions ).
DATA: lt_source TYPE seop_source_string,
ls_class_key TYPE seoclskey.
mo_object_oriented_object_fct->update_descriptions(
is_key = ls_class_key
it_descriptions = lt_descriptions ).
ls_class_key-clsname = ms_item-obj_name.
mo_object_oriented_object_fct->add_to_activation_list( ms_item ).
ENDMETHOD. "deserialize
IF zif_abapgit_object~exists( ) = abap_false.
METHOD deserialize_docu.
DATA: lt_lines TYPE tlinetab,
lv_object TYPE dokhl-object.
io_xml->read( EXPORTING iv_name = 'LINES'
CHANGING cg_data = lt_lines ).
IF lt_lines[] IS INITIAL.
RETURN.
ENDIF.
CALL FUNCTION 'SEO_BUFFER_REFRESH'
EXPORTING
version = seoc_version_active
force = seox_true.
CALL FUNCTION 'SEO_BUFFER_REFRESH'
EXPORTING
version = seoc_version_inactive
force = seox_true.
lv_object = ms_item-obj_name.
lt_source = mo_object_oriented_object_fct->serialize_abap( ls_class_key ).
mo_object_oriented_object_fct->create_documentation(
it_lines = lt_lines
iv_object_name = lv_object
iv_language = mv_language ).
ENDMETHOD.
mo_files->add_abap( lt_source ).
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_locals_def ).
IF NOT lt_source[] IS INITIAL.
mo_files->add_abap( iv_extra = 'locals_def'
it_abap = lt_source ). "#EC NOTEXT
METHOD deserialize_sotr.
"OTR stands for Online Text Repository
DATA: lt_sotr TYPE zif_abapgit_definitions=>ty_sotr_tt.
io_xml->read( EXPORTING iv_name = 'SOTR'
CHANGING cg_data = lt_sotr ).
IF lines( lt_sotr ) = 0.
RETURN.
ENDIF.
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_locals_imp ).
IF NOT lt_source[] IS INITIAL.
mo_files->add_abap( iv_extra = 'locals_imp'
it_abap = lt_source ). "#EC NOTEXT
mo_object_oriented_object_fct->create_sotr(
iv_package = iv_package
it_sotr = lt_sotr ).
ENDMETHOD.
METHOD deserialize_tpool.
DATA: lv_clsname TYPE seoclsname,
lt_tpool_ext TYPE zif_abapgit_definitions=>ty_tpool_tt,
lt_tpool TYPE textpool_table.
io_xml->read( EXPORTING iv_name = 'TPOOL'
CHANGING cg_data = lt_tpool_ext ).
lt_tpool = read_tpool( lt_tpool_ext ).
IF lt_tpool[] IS INITIAL.
RETURN.
ENDIF.
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_testclasses ).
lv_clsname = ms_item-obj_name.
mv_skip_testclass = mo_object_oriented_object_fct->get_skip_test_classes( ).
IF NOT lt_source[] IS INITIAL AND mv_skip_testclass = abap_false.
mo_files->add_abap( iv_extra = 'testclasses'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_macros ).
IF NOT lt_source[] IS INITIAL.
mo_files->add_abap( iv_extra = 'macros'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
serialize_xml( io_xml ).
ENDMETHOD. "serialize
mo_object_oriented_object_fct->insert_text_pool(
iv_class_name = lv_clsname
it_text_pool = lt_tpool
iv_language = mv_language ).
ENDMETHOD. "deserialize_textpool
METHOD serialize_xml.
@ -251,6 +241,56 @@ CLASS zcl_abapgit_object_clas_old IMPLEMENTATION.
ENDMETHOD. "serialize_xml
METHOD zif_abapgit_object~changed_by.
TYPES: BEGIN OF ty_includes,
programm TYPE programm,
END OF ty_includes.
TYPES: BEGIN OF ty_reposrc,
unam TYPE reposrc-unam,
udat TYPE reposrc-udat,
utime TYPE reposrc-utime,
END OF ty_reposrc.
DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc,
ls_reposrc LIKE LINE OF lt_reposrc,
lt_includes TYPE STANDARD TABLE OF ty_includes.
lt_includes = mo_object_oriented_object_fct->get_includes( ms_item-obj_name ).
ASSERT lines( lt_includes ) > 0.
SELECT unam udat utime FROM reposrc
INTO TABLE lt_reposrc
FOR ALL ENTRIES IN lt_includes
WHERE progname = lt_includes-programm
AND r3state = 'A'.
IF sy-subrc <> 0.
rv_user = c_user_unknown.
ELSE.
SORT lt_reposrc BY udat DESCENDING utime DESCENDING.
READ TABLE lt_reposrc INDEX 1 INTO ls_reposrc.
ASSERT sy-subrc = 0.
rv_user = ls_reposrc-unam.
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: ls_clskey TYPE seoclskey.
ls_clskey-clsname = ms_item-obj_name.
mo_object_oriented_object_fct->delete( ls_clskey ).
ENDMETHOD. "delete
METHOD zif_abapgit_object~deserialize.
deserialize_abap( io_xml = io_xml
iv_package = iv_package ).
@ -263,134 +303,109 @@ CLASS zcl_abapgit_object_clas_old IMPLEMENTATION.
deserialize_docu( io_xml ).
ENDMETHOD. "deserialize
METHOD deserialize_sotr.
"OTR stands for Online Text Repository
DATA: lt_sotr TYPE zif_abapgit_definitions=>ty_sotr_tt.
io_xml->read( EXPORTING iv_name = 'SOTR'
CHANGING cg_data = lt_sotr ).
METHOD zif_abapgit_object~exists.
DATA: ls_class_key TYPE seoclskey.
ls_class_key-clsname = ms_item-obj_name.
IF lines( lt_sotr ) = 0.
RETURN.
ENDIF.
rv_bool = mo_object_oriented_object_fct->exists( iv_object_name = ls_class_key ).
ENDMETHOD. "zif_abapgit_object~exists
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~has_changed_since.
DATA: lt_includes TYPE seoincl_t.
FIELD-SYMBOLS <lv_incl> LIKE LINE OF lt_includes.
lt_includes = mo_object_oriented_object_fct->get_includes( ms_item-obj_name ).
LOOP AT lt_includes ASSIGNING <lv_incl>.
rv_changed = check_prog_changed_since(
iv_program = <lv_incl>
iv_timestamp = iv_timestamp
iv_skip_gui = abap_true ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
mo_object_oriented_object_fct->create_sotr(
iv_package = iv_package
it_sotr = lt_sotr ).
ENDMETHOD.
METHOD deserialize_docu.
DATA: lt_lines TYPE tlinetab,
lv_object TYPE dokhl-object.
io_xml->read( EXPORTING iv_name = 'LINES'
CHANGING cg_data = lt_lines ).
IF lt_lines[] IS INITIAL.
RETURN.
ENDIF.
lv_object = ms_item-obj_name.
mo_object_oriented_object_fct->create_documentation(
it_lines = lt_lines
iv_object_name = lv_object
iv_language = mv_language ).
ENDMETHOD.
METHOD deserialize_tpool.
DATA: lv_clsname TYPE seoclsname,
lt_tpool_ext TYPE zif_abapgit_definitions=>ty_tpool_tt,
lt_tpool TYPE textpool_table.
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = 'CLAS'
in_new_window = abap_true.
ENDMETHOD. "jump
io_xml->read( EXPORTING iv_name = 'TPOOL'
CHANGING cg_data = lt_tpool_ext ).
lt_tpool = read_tpool( lt_tpool_ext ).
METHOD zif_abapgit_object~serialize.
IF lt_tpool[] IS INITIAL.
RETURN.
ENDIF.
lv_clsname = ms_item-obj_name.
mo_object_oriented_object_fct->insert_text_pool(
iv_class_name = lv_clsname
it_text_pool = lt_tpool
iv_language = mv_language ).
ENDMETHOD. "deserialize_textpool
METHOD deserialize_abap.
DATA: ls_vseoclass TYPE vseoclass,
lt_source TYPE seop_source_string,
lt_local_definitions TYPE seop_source_string,
lt_local_implementations TYPE seop_source_string,
lt_local_macros TYPE seop_source_string,
lt_test_classes TYPE seop_source_string,
lt_descriptions TYPE zif_abapgit_definitions=>ty_seocompotx_tt,
ls_class_key TYPE seoclskey.
lt_source = mo_files->read_abap( ).
lt_local_definitions = mo_files->read_abap( iv_extra = 'locals_def'
iv_error = abap_false ). "#EC NOTEXT
lt_local_implementations = mo_files->read_abap( iv_extra = 'locals_imp'
iv_error = abap_false ). "#EC NOTEXT
lt_local_macros = mo_files->read_abap( iv_extra = 'macros'
iv_error = abap_false ). "#EC NOTEXT
lt_test_classes = mo_files->read_abap( iv_extra = 'testclasses'
iv_error = abap_false ). "#EC NOTEXT
DATA: lt_source TYPE seop_source_string,
ls_class_key TYPE seoclskey.
ls_class_key-clsname = ms_item-obj_name.
io_xml->read( EXPORTING iv_name = 'VSEOCLASS'
CHANGING cg_data = ls_vseoclass ).
IF zif_abapgit_object~exists( ) = abap_false.
RETURN.
ENDIF.
mo_object_oriented_object_fct->create(
CALL FUNCTION 'SEO_BUFFER_REFRESH'
EXPORTING
iv_package = iv_package
CHANGING
is_properties = ls_vseoclass ).
version = seoc_version_active
force = seox_true.
CALL FUNCTION 'SEO_BUFFER_REFRESH'
EXPORTING
version = seoc_version_inactive
force = seox_true.
mo_object_oriented_object_fct->generate_locals(
is_key = ls_class_key
iv_force = seox_true
it_local_definitions = lt_local_definitions
it_local_implementations = lt_local_implementations
it_local_macros = lt_local_macros
it_local_test_classes = lt_test_classes ).
lt_source = mo_object_oriented_object_fct->serialize_abap( ls_class_key ).
mo_object_oriented_object_fct->deserialize_source(
is_key = ls_class_key
it_source = lt_source ).
mo_files->add_abap( lt_source ).
io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
CHANGING cg_data = lt_descriptions ).
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_locals_def ).
IF NOT lt_source[] IS INITIAL.
mo_files->add_abap( iv_extra = 'locals_def'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
mo_object_oriented_object_fct->update_descriptions(
is_key = ls_class_key
it_descriptions = lt_descriptions ).
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_locals_imp ).
IF NOT lt_source[] IS INITIAL.
mo_files->add_abap( iv_extra = 'locals_imp'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
mo_object_oriented_object_fct->add_to_activation_list( ms_item ).
ENDMETHOD. "deserialize
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_testclasses ).
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
mv_skip_testclass = mo_object_oriented_object_fct->get_skip_test_classes( ).
IF NOT lt_source[] IS INITIAL AND mv_skip_testclass = abap_false.
mo_files->add_abap( iv_extra = 'testclasses'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
METHOD constructor.
super->constructor(
is_item = is_item
iv_language = iv_language ).
mo_object_oriented_object_fct = zcl_abapgit_oo_factory=>make( ms_item-obj_type ).
ENDMETHOD.
lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key
iv_type = seop_ext_class_macros ).
IF NOT lt_source[] IS INITIAL.
mo_files->add_abap( iv_extra = 'macros'
it_abap = lt_source ). "#EC NOTEXT
ENDIF.
ENDCLASS. "zcl_abapgit_object_CLAS IMPLEMENTATION
serialize_xml( io_xml ).
ENDMETHOD. "serialize
ENDCLASS.

View File

@ -14,7 +14,10 @@ CLASS zcl_abapgit_object_cmpt DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_cmpt IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECT_CMPT IMPLEMENTATION.
METHOD constructor.
@ -31,15 +34,10 @@ CLASS zcl_abapgit_object_cmpt IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
DATA: mi_cmp_template TYPE REF TO object.
DATA: lo_cmp_template TYPE REF TO object.
TRY.
CALL METHOD ('CL_CMP_TEMPLATE')=>('S_CREATE_FROM_DB')
@ -47,9 +45,9 @@ CLASS zcl_abapgit_object_cmpt IMPLEMENTATION.
i_name = |{ ms_item-obj_name }|
i_version = 'A'
RECEIVING
r_ref_template = mi_cmp_template.
r_ref_template = lo_cmp_template.
CALL METHOD mi_cmp_template->('IF_CMP_TEMPLATE_EDIT~GET_CHANGE_USER')
CALL METHOD lo_cmp_template->('IF_CMP_TEMPLATE_EDIT~GET_CHANGE_USER')
RECEIVING
r_user = rv_user.
@ -59,77 +57,57 @@ CLASS zcl_abapgit_object_cmpt IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: name TYPE c LENGTH 30.
METHOD zif_abapgit_object~delete.
name = ms_item-obj_name.
DATA: lv_deleted TYPE abap_bool.
TRY.
CALL METHOD ('CL_CMP_TEMPLATE')=>('S_TEMPLATE_EXISTS')
CALL METHOD mo_cmp_db->('IF_CMP_TEMPLATE_DB~DELETE_TEMPLATE')
EXPORTING
i_name = name
i_version = 'A'
i_name = |{ ms_item-obj_name }|
i_version = 'A'
i_flg_header = abap_true
i_flg_lines = abap_true
RECEIVING
r_flg_exists = rv_bool.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'CMPT not supported' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lr_template TYPE REF TO data.
FIELD-SYMBOLS: <template> TYPE any.
TRY.
CREATE DATA lr_template TYPE ('IF_CMP_TEMPLATE_DB=>TYP_TEMPLATE').
ASSIGN lr_template->* TO <template>.
CALL METHOD mo_cmp_db->('IF_CMP_TEMPLATE_DB~READ_TEMPLATE')
EXPORTING
i_name = |{ ms_item-obj_name }|
i_version = 'A'
RECEIVING
r_template = <template>.
io_xml->add( iv_name = 'CMPT'
ig_data = <template> ).
r_flg_deleted = lv_deleted.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'CMPT not supported' ).
ENDTRY.
IF lv_deleted = abap_false.
zcx_abapgit_exception=>raise( |Error deleting CMPT { ms_item-obj_name }| ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lr_template TYPE REF TO data.
FIELD-SYMBOLS: <template> TYPE any.
FIELD-SYMBOLS: <lg_template> TYPE any.
TRY.
CREATE DATA lr_template TYPE ('IF_CMP_TEMPLATE_DB=>TYP_TEMPLATE').
ASSIGN lr_template->* TO <template>.
ASSIGN lr_template->* TO <lg_template>.
io_xml->read(
EXPORTING
iv_name = 'CMPT'
CHANGING
cg_data = <template> ).
cg_data = <lg_template> ).
CALL METHOD mo_cmp_db->('IF_CMP_TEMPLATE_DB~SAVE_TEMPLATE')
EXPORTING
i_template_db = <template>
i_template_db = <lg_template>
i_flg_header = abap_true
i_flg_lines = abap_true.
@ -157,27 +135,39 @@ CLASS zcl_abapgit_object_cmpt IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: deleted TYPE abap_bool.
METHOD zif_abapgit_object~exists.
DATA: lv_name TYPE c LENGTH 30.
lv_name = ms_item-obj_name.
TRY.
CALL METHOD mo_cmp_db->('IF_CMP_TEMPLATE_DB~DELETE_TEMPLATE')
CALL METHOD ('CL_CMP_TEMPLATE')=>('S_TEMPLATE_EXISTS')
EXPORTING
i_name = |{ ms_item-obj_name }|
i_version = 'A'
i_flg_header = abap_true
i_flg_lines = abap_true
i_name = lv_name
i_version = 'A'
RECEIVING
r_flg_deleted = deleted.
r_flg_exists = rv_bool.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'CMPT not supported' ).
ENDTRY.
IF deleted = abap_false.
zcx_abapgit_exception=>raise( |Error deleting CMPT { ms_item-obj_name }| ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
@ -200,10 +190,30 @@ CLASS zcl_abapgit_object_cmpt IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
METHOD zif_abapgit_object~serialize.
DATA: lr_template TYPE REF TO data.
FIELD-SYMBOLS: <lg_template> TYPE any.
TRY.
CREATE DATA lr_template TYPE ('IF_CMP_TEMPLATE_DB=>TYP_TEMPLATE').
ASSIGN lr_template->* TO <lg_template>.
CALL METHOD mo_cmp_db->('IF_CMP_TEMPLATE_DB~READ_TEMPLATE')
EXPORTING
i_name = |{ ms_item-obj_name }|
i_version = 'A'
RECEIVING
r_template = <lg_template>.
io_xml->add( iv_name = 'CMPT'
ig_data = <lg_template> ).
CATCH cx_root.
zcx_abapgit_exception=>raise( 'CMPT not supported' ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -6,33 +6,97 @@ CLASS zcl_abapgit_object_dcls DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
CLASS ZCL_ABAPGIT_OBJECT_DCLS IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
rs_metadata-delete_tadir = abap_true.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: li_dcl TYPE REF TO object.
METHOD zif_abapgit_object~delete.
DATA: lo_dcl TYPE REF TO object.
TRY.
CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
ro_handler = li_dcl.
ro_handler = lo_dcl.
CALL METHOD li_dcl->('CHECK_EXISTENCE')
CALL METHOD lo_dcl->('DELETE')
EXPORTING
iv_dclname = ms_item-obj_name.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DCLS error' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lr_data TYPE REF TO data,
lo_dcl TYPE REF TO object.
FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_field> TYPE any.
CREATE DATA lr_data TYPE ('ACM_S_DCLSRC').
ASSIGN lr_data->* TO <lg_data>.
io_xml->read(
EXPORTING
iv_name = 'DCLS'
CHANGING
cg_data = <lg_data> ).
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
<lg_field> = mo_files->read_string( 'asdcls' ).
TRY.
CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
ro_handler = lo_dcl.
CALL METHOD lo_dcl->('SAVE')
EXPORTING
iv_dclname = ms_item-obj_name
iv_put_state = 'A'
is_dclsrc = <lg_data>
iv_devclass = iv_package
iv_access_mode = 'INSERT'.
tadir_insert( iv_package ).
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DCLS error' ).
ENDTRY.
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lo_dcl TYPE REF TO object.
TRY.
CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
ro_handler = lo_dcl.
CALL METHOD lo_dcl->('CHECK_EXISTENCE')
EXPORTING
iv_objectname = ms_item-obj_name
RECEIVING
@ -44,6 +108,20 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
TRY.
@ -57,129 +135,63 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: li_dcl TYPE REF TO object.
TRY.
CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
ro_handler = li_dcl.
CALL METHOD li_dcl->('DELETE')
EXPORTING
iv_dclname = ms_item-obj_name.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DCLS error' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lr_data TYPE REF TO data,
li_dcl TYPE REF TO object.
lo_dcl TYPE REF TO object.
FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_field> TYPE any.
FIELD-SYMBOLS: <ls_data> TYPE any,
<field> TYPE any.
CREATE DATA lr_data TYPE ('ACM_S_DCLSRC').
ASSIGN lr_data->* TO <ls_data>.
ASSIGN lr_data->* TO <lg_data>.
TRY.
CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
ro_handler = li_dcl.
ro_handler = lo_dcl.
CALL METHOD li_dcl->('READ')
CALL METHOD lo_dcl->('READ')
EXPORTING
iv_dclname = ms_item-obj_name
IMPORTING
es_dclsrc = <ls_data>.
es_dclsrc = <lg_data>.
ASSIGN COMPONENT 'AS4USER' OF STRUCTURE <ls_data> TO <field>.
ASSIGN COMPONENT 'AS4USER' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'AS4DATE' OF STRUCTURE <ls_data> TO <field>.
ASSIGN COMPONENT 'AS4DATE' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'AS4TIME' OF STRUCTURE <ls_data> TO <field>.
ASSIGN COMPONENT 'AS4TIME' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <ls_data> TO <field>.
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CREATED_DATE' OF STRUCTURE <ls_data> TO <field>.
ASSIGN COMPONENT 'CREATED_DATE' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <ls_data> TO <field>.
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
mo_files->add_string( iv_ext = 'asdcls' iv_string = <field> ).
mo_files->add_string( iv_ext = 'asdcls' iv_string = <lg_field> ).
CLEAR <field>.
CLEAR <lg_field>.
io_xml->add( iv_name = 'DCLS'
ig_data = <ls_data> ).
ig_data = <lg_data> ).
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DCLS error' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lr_data TYPE REF TO data,
li_dcl TYPE REF TO object.
FIELD-SYMBOLS: <ls_data> TYPE any,
<field> TYPE any.
CREATE DATA lr_data TYPE ('ACM_S_DCLSRC').
ASSIGN lr_data->* TO <ls_data>.
io_xml->read(
EXPORTING
iv_name = 'DCLS'
CHANGING
cg_data = <ls_data> ).
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <ls_data> TO <field>.
ASSERT sy-subrc = 0.
<field> = mo_files->read_string( 'asdcls' ).
TRY.
CALL METHOD ('CL_ACM_DCL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
ro_handler = li_dcl.
CALL METHOD li_dcl->('SAVE')
EXPORTING
iv_dclname = ms_item-obj_name
iv_put_state = 'A'
is_dclsrc = <ls_data>
iv_devclass = iv_package
iv_access_mode = 'INSERT'.
tadir_insert( iv_package ).
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DCLS error' ).
ENDTRY.
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
ENDCLASS.

View File

@ -11,40 +11,96 @@ CLASS zcl_abapgit_object_ddls DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
METHOD open_adt_stob.
DATA: lr_data TYPE REF TO data.
DATA: lo_ddl TYPE REF TO object.
FIELD-SYMBOLS: <lt_ddnames> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <lt_entity_view> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <lg_ddnames> TYPE any.
FIELD-SYMBOLS: <lg_entity_view> TYPE any.
FIELD-SYMBOLS: <lg_ddname> TYPE any.
FIELD-SYMBOLS: <lg_ddlname> TYPE any.
TRY.
CREATE DATA lr_data TYPE ('IF_DD_DDL_TYPES=>TY_T_DDOBJ').
ASSIGN lr_data->* TO <lt_ddnames>.
CREATE DATA lr_data LIKE LINE OF <lt_ddnames>.
ASSIGN lr_data->* TO <lg_ddnames>.
CREATE DATA lr_data TYPE ('IF_DD_DDL_TYPES=>TY_T_ENTITY_OF_VIEW').
ASSIGN lr_data->* TO <lt_entity_view>.
CREATE DATA lr_data LIKE LINE OF <lt_entity_view>.
ASSIGN lr_data->* TO <lg_entity_view>.
CLEAR <lt_ddnames>.
ASSIGN COMPONENT 'NAME' OF STRUCTURE <lg_ddnames> TO <lg_ddname>.
<lg_ddname> = iv_ddls_name.
INSERT <lg_ddnames> INTO TABLE <lt_ddnames>.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = lo_ddl.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~GET_VIEWNAME_FROM_ENTITYNAME')
EXPORTING
ddnames = <lt_ddnames>
IMPORTING
view_of_entity = <lt_entity_view>.
READ TABLE <lt_entity_view> ASSIGNING <lg_entity_view> INDEX 1.
IF sy-subrc = 0.
ASSIGN COMPONENT 'DDLNAME' OF STRUCTURE <lg_entity_view> TO <lg_ddlname>.
jump_adt( i_obj_name = <lg_ddlname>
i_obj_type = 'DDLS' ).
ENDIF.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DDLS Jump Error' ).
ENDTRY.
ENDMETHOD. "open_adt_stob
METHOD zif_abapgit_object~changed_by.
DATA: li_ddl TYPE REF TO object,
DATA: lo_ddl TYPE REF TO object,
lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any,
<lv_field> TYPE any.
FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_field> TYPE any.
CREATE DATA lr_data TYPE ('DDDDLSRCV').
ASSIGN lr_data->* TO <ls_data>.
ASSIGN lr_data->* TO <lg_data>.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = li_ddl.
handler = lo_ddl.
TRY.
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~READ')
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ')
EXPORTING
name = ms_item-obj_name
get_state = 'A'
IMPORTING
ddddlsrcv_wa = <ls_data>.
ddddlsrcv_wa = <lg_data>.
ASSIGN COMPONENT 'AS4USER' OF STRUCTURE <ls_data> TO <lv_field>.
ASSIGN COMPONENT 'AS4USER' OF STRUCTURE <lg_data> TO <lg_field>.
IF sy-subrc = 0.
rv_user = <lv_field>.
rv_user = <lg_field>.
ENDIF.
CATCH cx_root.
ENDTRY.
@ -55,25 +111,88 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~changed_by
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
rs_metadata-delete_tadir = abap_true.
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. "zif_abapgit_object~compare_to_remote_version
METHOD zif_abapgit_object~exists.
DATA: lv_state TYPE objstate,
li_ddl TYPE REF TO object.
METHOD zif_abapgit_object~delete.
DATA: lo_ddl TYPE REF TO object.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = li_ddl.
handler = lo_ddl.
TRY.
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~READ')
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~DELETE')
EXPORTING
name = ms_item-obj_name.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DDLS error deleting' ).
ENDTRY.
ENDMETHOD. "delete
METHOD zif_abapgit_object~deserialize.
DATA: lo_ddl TYPE REF TO object,
lr_data TYPE REF TO data.
FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_field> TYPE any.
CREATE DATA lr_data TYPE ('DDDDLSRCV').
ASSIGN lr_data->* TO <lg_data>.
io_xml->read( EXPORTING iv_name = 'DDLS'
CHANGING cg_data = <lg_data> ).
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
<lg_field> = mo_files->read_string( 'asddls' ) ##no_text.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = lo_ddl.
TRY.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE')
EXPORTING
name = ms_item-obj_name
put_state = 'N'
ddddlsrcv_wa = <lg_data>.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~WRITE_TADIR')
EXPORTING
objectname = ms_item-obj_name
devclass = iv_package
prid = 0.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DDLS error writing TADIR' ).
ENDTRY.
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD. "deserialize
METHOD zif_abapgit_object~exists.
DATA: lv_state TYPE objstate,
lo_ddl TYPE REF TO object.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = lo_ddl.
TRY.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ')
EXPORTING
name = ms_item-obj_name
get_state = 'A'
@ -90,6 +209,20 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~exists
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
rs_metadata-delete_tadir = abap_true.
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~jump.
DATA: lv_typename TYPE typename.
@ -113,174 +246,54 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
ENDMETHOD. "jump
METHOD zif_abapgit_object~delete.
DATA: li_ddl TYPE REF TO object.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = li_ddl.
TRY.
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~DELETE')
EXPORTING
name = ms_item-obj_name.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DDLS error deleting' ).
ENDTRY.
ENDMETHOD. "delete
METHOD zif_abapgit_object~serialize.
DATA: li_ddl TYPE REF TO object,
DATA: lo_ddl TYPE REF TO object,
lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any,
<lv_field> TYPE any.
FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_field> TYPE any.
CREATE DATA lr_data TYPE ('DDDDLSRCV').
ASSIGN lr_data->* TO <ls_data>.
ASSIGN lr_data->* TO <lg_data>.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = li_ddl.
handler = lo_ddl.
TRY.
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~READ')
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~READ')
EXPORTING
name = ms_item-obj_name
get_state = 'A'
IMPORTING
ddddlsrcv_wa = <ls_data>.
ddddlsrcv_wa = <lg_data>.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DDLS error reading' ).
ENDTRY.
ASSIGN COMPONENT 'AS4USER' OF STRUCTURE <ls_data> TO <lv_field>.
ASSIGN COMPONENT 'AS4USER' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lv_field>.
ASSIGN COMPONENT 'AS4DATE' OF STRUCTURE <ls_data> TO <lv_field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'AS4DATE' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lv_field>.
ASSIGN COMPONENT 'AS4TIME' OF STRUCTURE <ls_data> TO <lv_field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'AS4TIME' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lv_field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <ls_data> TO <lv_field>.
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0.
mo_files->add_string( iv_ext = 'asddls'
iv_string = <lv_field> ) ##no_text.
iv_string = <lg_field> ) ##no_text.
CLEAR <lv_field>.
CLEAR <lg_field>.
io_xml->add( iv_name = 'DDLS'
ig_data = <ls_data> ).
ig_data = <lg_data> ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~deserialize.
DATA: li_ddl TYPE REF TO object,
lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any,
<lv_field> TYPE any.
CREATE DATA lr_data TYPE ('DDDDLSRCV').
ASSIGN lr_data->* TO <ls_data>.
io_xml->read( EXPORTING iv_name = 'DDLS'
CHANGING cg_data = <ls_data> ).
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <ls_data> TO <lv_field>.
ASSERT sy-subrc = 0.
<lv_field> = mo_files->read_string( 'asddls' ) ##no_text.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = li_ddl.
TRY.
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~SAVE')
EXPORTING
name = ms_item-obj_name
put_state = 'N'
ddddlsrcv_wa = <ls_data>.
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~WRITE_TADIR')
EXPORTING
objectname = ms_item-obj_name
devclass = iv_package
prid = 0.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DDLS error writing TADIR' ).
ENDTRY.
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD. "deserialize
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. "zif_abapgit_object~compare_to_remote_version
METHOD open_adt_stob.
DATA: lr_data TYPE REF TO data.
DATA: li_ddl TYPE REF TO object.
FIELD-SYMBOLS: <lt_ddnames> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <lt_entity_view> TYPE STANDARD TABLE.
FIELD-SYMBOLS: <ls_ddnames> TYPE any.
FIELD-SYMBOLS: <ls_entity_view> TYPE any.
FIELD-SYMBOLS: <lv_ddname> TYPE any.
FIELD-SYMBOLS: <lv_ddlname> TYPE any.
TRY.
CREATE DATA lr_data TYPE ('IF_DD_DDL_TYPES=>TY_T_DDOBJ').
ASSIGN lr_data->* TO <lt_ddnames>.
CREATE DATA lr_data LIKE LINE OF <lt_ddnames>.
ASSIGN lr_data->* TO <ls_ddnames>.
CREATE DATA lr_data TYPE ('IF_DD_DDL_TYPES=>TY_T_ENTITY_OF_VIEW').
ASSIGN lr_data->* TO <lt_entity_view>.
CREATE DATA lr_data LIKE LINE OF <lt_entity_view>.
ASSIGN lr_data->* TO <ls_entity_view>.
CLEAR <lt_ddnames>.
ASSIGN COMPONENT 'NAME' OF STRUCTURE <ls_ddnames> TO <lv_ddname>.
<lv_ddname> = iv_ddls_name.
INSERT <ls_ddnames> INTO TABLE <lt_ddnames>.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = li_ddl.
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~GET_VIEWNAME_FROM_ENTITYNAME')
EXPORTING
ddnames = <lt_ddnames>
IMPORTING
view_of_entity = <lt_entity_view>.
READ TABLE <lt_entity_view> ASSIGNING <ls_entity_view> INDEX 1.
IF sy-subrc = 0.
ASSIGN COMPONENT 'DDLNAME' OF STRUCTURE <ls_entity_view> TO <lv_ddlname>.
jump_adt( i_obj_name = <lv_ddlname>
i_obj_type = 'DDLS' ).
ENDIF.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'DDLS Jump Error' ).
ENDTRY.
ENDMETHOD. "open_adt_stob
ENDCLASS. "zcl_abapgit_object_view IMPLEMENTATION
ENDCLASS.

View File

@ -26,156 +26,55 @@ CLASS zcl_abapgit_object_ddlx DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_ddlx IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown.
ENDMETHOD.
CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
METHOD clear_field.
DATA: lv_object_key TYPE seu_objkey.
FIELD-SYMBOLS: <lg_field> TYPE data.
lv_object_key = ms_item-obj_name.
ASSIGN COMPONENT iv_fieldname
OF STRUCTURE cs_metadata
TO <lg_field>.
ASSERT sy-subrc = 0.
rv_bool = abap_true.
TRY.
get_persistence( )->get( p_object_key = lv_object_key
p_version = swbm_version_active
p_existence_check_only = abap_true ).
CATCH cx_swb_exception.
rv_bool = abap_false.
ENDTRY.
CLEAR: <lg_field>.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
TRY.
jump_adt( i_obj_name = ms_item-obj_name
i_obj_type = ms_item-obj_type ).
METHOD clear_fields.
CATCH zcx_abapgit_exception.
zcx_abapgit_exception=>raise( 'DDLX Jump Error' ).
ENDTRY.
FIELD-SYMBOLS: <lg_metadata> TYPE any.
ENDMETHOD.
ASSIGN COMPONENT 'METADATA'
OF STRUCTURE cs_data
TO <lg_metadata>.
ASSERT sy-subrc = 0.
METHOD zif_abapgit_object~delete.
clear_field( EXPORTING iv_fieldname = 'CHANGED_AT'
CHANGING cs_metadata = <lg_metadata> ).
DATA: lv_object_key TYPE seu_objkey,
lo_data_model TYPE REF TO if_wb_object_data_model,
lv_text TYPE string,
lx_error TYPE REF TO cx_root.
clear_field( EXPORTING iv_fieldname = 'CHANGED_BY'
CHANGING cs_metadata = <lg_metadata> ).
lv_object_key = ms_item-obj_name.
clear_field( EXPORTING iv_fieldname = 'CREATED_AT'
CHANGING cs_metadata = <lg_metadata> ).
TRY.
CREATE OBJECT lo_data_model
TYPE ('CL_DDLX_WB_OBJECT_DATA').
clear_field( EXPORTING iv_fieldname = 'CREATED_BY'
CHANGING cs_metadata = <lg_metadata> ).
get_persistence( )->delete( p_object_key = lv_object_key
p_version = swbm_version_active ).
clear_field( EXPORTING iv_fieldname = 'RESPONSIBLE'
CHANGING cs_metadata = <lg_metadata> ).
CATCH cx_root INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
clear_field( EXPORTING iv_fieldname = 'PACKAGE_REF-NAME'
CHANGING cs_metadata = <lg_metadata> ).
ENDMETHOD.
clear_field( EXPORTING iv_fieldname = 'CONTAINER_REF-PACKAGE_NAME'
CHANGING cs_metadata = <lg_metadata> ).
METHOD zif_abapgit_object~serialize.
DATA: lv_object_key TYPE seu_objkey,
lo_data_model TYPE REF TO if_wb_object_data_model,
lo_persistence TYPE REF TO if_wb_object_persist,
lr_data TYPE REF TO data,
lv_text TYPE string,
lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: <ls_data> TYPE any.
lv_object_key = ms_item-obj_name.
TRY.
CREATE DATA lr_data
TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA').
ASSIGN lr_data->* TO <ls_data>.
CREATE OBJECT lo_data_model
TYPE ('CL_DDLX_WB_OBJECT_DATA').
lo_persistence = get_persistence( ).
lo_persistence->get(
EXPORTING
p_object_key = lv_object_key
p_version = swbm_version_active
CHANGING
p_object_data = lo_data_model ).
lo_data_model->get_data(
IMPORTING
p_data = <ls_data> ).
clear_fields( CHANGING cs_data = <ls_data> ).
io_xml->add( iv_name = 'DDLX'
ig_data = <ls_data> ).
CATCH cx_root INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lo_data_model TYPE REF TO if_wb_object_data_model,
lr_data TYPE REF TO data,
lv_text TYPE string,
lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: <ls_data> TYPE any.
TRY.
CREATE DATA lr_data
TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA').
ASSIGN lr_data->* TO <ls_data>.
io_xml->read(
EXPORTING
iv_name = 'DDLX'
CHANGING
cg_data = <ls_data> ).
CREATE OBJECT lo_data_model
TYPE ('CL_DDLX_WB_OBJECT_DATA').
lo_data_model->set_data( <ls_data> ).
get_persistence( )->save( lo_data_model ).
CATCH cx_root INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
@ -198,50 +97,161 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION.
ENDMETHOD.
METHOD clear_fields.
METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown.
ENDMETHOD.
FIELD-SYMBOLS: <metadata> TYPE any.
ASSIGN COMPONENT 'METADATA'
OF STRUCTURE cs_data
TO <metadata>.
ASSERT sy-subrc = 0.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
clear_field( EXPORTING iv_fieldname = 'CHANGED_AT'
CHANGING cs_metadata = <metadata> ).
clear_field( EXPORTING iv_fieldname = 'CHANGED_BY'
CHANGING cs_metadata = <metadata> ).
METHOD zif_abapgit_object~delete.
clear_field( EXPORTING iv_fieldname = 'CREATED_AT'
CHANGING cs_metadata = <metadata> ).
DATA: lv_object_key TYPE seu_objkey,
li_data_model TYPE REF TO if_wb_object_data_model,
lv_text TYPE string,
lx_error TYPE REF TO cx_root.
clear_field( EXPORTING iv_fieldname = 'CREATED_BY'
CHANGING cs_metadata = <metadata> ).
clear_field( EXPORTING iv_fieldname = 'RESPONSIBLE'
CHANGING cs_metadata = <metadata> ).
lv_object_key = ms_item-obj_name.
clear_field( EXPORTING iv_fieldname = 'PACKAGE_REF-NAME'
CHANGING cs_metadata = <metadata> ).
TRY.
CREATE OBJECT li_data_model TYPE ('CL_DDLX_WB_OBJECT_DATA').
clear_field( EXPORTING iv_fieldname = 'CONTAINER_REF-PACKAGE_NAME'
CHANGING cs_metadata = <metadata> ).
get_persistence( )->delete( p_object_key = lv_object_key
p_version = swbm_version_active ).
CATCH cx_root INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
METHOD clear_field.
METHOD zif_abapgit_object~deserialize.
FIELD-SYMBOLS: <field> TYPE data.
DATA: li_data_model TYPE REF TO if_wb_object_data_model,
lr_data TYPE REF TO data,
lv_text TYPE string,
lx_error TYPE REF TO cx_root.
ASSIGN COMPONENT iv_fieldname
OF STRUCTURE cs_metadata
TO <field>.
ASSERT sy-subrc = 0.
FIELD-SYMBOLS: <lg_data> TYPE any.
CLEAR: <field>.
TRY.
CREATE DATA lr_data
TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA').
ASSIGN lr_data->* TO <lg_data>.
io_xml->read(
EXPORTING
iv_name = 'DDLX'
CHANGING
cg_data = <lg_data> ).
CREATE OBJECT li_data_model
TYPE ('CL_DDLX_WB_OBJECT_DATA').
li_data_model->set_data( <lg_data> ).
get_persistence( )->save( li_data_model ).
CATCH cx_root INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lv_object_key TYPE seu_objkey.
lv_object_key = ms_item-obj_name.
rv_bool = abap_true.
TRY.
get_persistence( )->get( p_object_key = lv_object_key
p_version = swbm_version_active
p_existence_check_only = abap_true ).
CATCH cx_swb_exception.
rv_bool = abap_false.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
TRY.
jump_adt( i_obj_name = ms_item-obj_name
i_obj_type = ms_item-obj_type ).
CATCH zcx_abapgit_exception.
zcx_abapgit_exception=>raise( 'DDLX Jump Error' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lv_object_key TYPE seu_objkey,
li_data_model TYPE REF TO if_wb_object_data_model,
li_persistence TYPE REF TO if_wb_object_persist,
lr_data TYPE REF TO data,
lv_text TYPE string,
lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: <lg_data> TYPE any.
lv_object_key = ms_item-obj_name.
TRY.
CREATE DATA lr_data
TYPE ('CL_DDLX_WB_OBJECT_DATA=>TY_OBJECT_DATA').
ASSIGN lr_data->* TO <lg_data>.
CREATE OBJECT li_data_model
TYPE ('CL_DDLX_WB_OBJECT_DATA').
li_persistence = get_persistence( ).
li_persistence->get(
EXPORTING
p_object_key = lv_object_key
p_version = swbm_version_active
CHANGING
p_object_data = li_data_model ).
li_data_model->get_data(
IMPORTING
p_data = <lg_data> ).
clear_fields( CHANGING cs_data = <lg_data> ).
io_xml->add( iv_name = 'DDLX'
ig_data = <lg_data> ).
CATCH cx_root INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -25,13 +25,18 @@ CLASS zcl_abapgit_object_devc DEFINITION PUBLIC
mv_local_devclass TYPE devclass.
ENDCLASS.
CLASS zcl_abapgit_object_devc IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECT_DEVC IMPLEMENTATION.
METHOD constructor.
super->constructor( is_item = is_item
iv_language = iv_language ).
mv_local_devclass = is_item-devclass.
ENDMETHOD.
METHOD get_package.
IF me->zif_abapgit_object~exists( ) = abap_true.
cl_package_factory=>load_package(
@ -55,14 +60,154 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
ENDIF.
ENDMETHOD.
METHOD set_lock.
DATA: lv_changeable TYPE abap_bool.
ii_package->get_changeable( IMPORTING e_changeable = lv_changeable ).
IF lv_changeable <> iv_lock.
ii_package->set_changeable(
EXPORTING
i_changeable = iv_lock
EXCEPTIONS
object_locked_by_other_user = 1
permission_failure = 2
object_already_changeable = 3
object_already_unlocked = 4
object_just_created = 5
object_deleted = 6
object_modified = 7
object_not_existing = 8
object_invalid = 9
unexpected_error = 10
OTHERS = 11 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->SET_CHANGEABLE { sy-subrc }| ).
ENDIF.
ENDIF.
ii_package->set_permissions_changeable(
EXPORTING
i_changeable = iv_lock
i_suppress_dialog = abap_true
EXCEPTIONS
object_already_changeable = 1
object_already_unlocked = 2
object_locked_by_other_user = 3
object_modified = 4
object_just_created = 5
object_deleted = 6
permission_failure = 7
object_invalid = 8
unexpected_error = 9
OTHERS = 10 ).
IF ( sy-subrc = 1 AND iv_lock = abap_true ) OR ( sy-subrc = 2 AND iv_lock = abap_false ).
" There's no getter to find out beforehand...
ELSEIF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->SET_PERMISSIONS_CHANGEABLE { sy-subrc }| ).
ENDIF.
ENDMETHOD.
METHOD update_pinf_usages.
DATA: lt_current_permissions TYPE tpak_permission_to_use_list,
li_usage TYPE REF TO if_package_permission_to_use,
ls_data_sign TYPE scomppsign,
ls_add_permission_data TYPE pkgpermdat,
lt_handled TYPE SORTED TABLE OF i WITH UNIQUE KEY table_line.
FIELD-SYMBOLS: <ls_usage_data> LIKE LINE OF it_usage_data.
" Get the current permissions
ii_package->get_permissions_to_use(
IMPORTING
e_permissions = lt_current_permissions
EXCEPTIONS
object_invalid = 1
unexpected_error = 2
OTHERS = 3 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE=>GET_PERMISSIONS_TO_USE { sy-subrc }| ).
ENDIF.
ls_data_sign-err_sever = abap_true.
" New permissions
LOOP AT it_usage_data ASSIGNING <ls_usage_data>.
READ TABLE lt_current_permissions
WITH KEY table_line->package_interface_name = <ls_usage_data>-intf_name
INTO li_usage.
IF sy-subrc = 0 AND li_usage IS BOUND.
INSERT sy-tabix INTO TABLE lt_handled.
" Permission already exists, update attributes
li_usage->set_all_attributes(
EXPORTING
i_permission_data = <ls_usage_data>
i_data_sign = ls_data_sign
EXCEPTIONS
object_not_changeable = 1
object_invalid = 2
intern_err = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise(
|Error from IF_PACKAGE_PERMISSION_TO_USE->SET_ALL_ATTRIBUTES { sy-subrc }| ).
ENDIF.
ELSE.
" Permission does not exist yet, add it
MOVE-CORRESPONDING <ls_usage_data> TO ls_add_permission_data.
ii_package->add_permission_to_use(
EXPORTING
i_pkg_permission_data = ls_add_permission_data
EXCEPTIONS
object_not_changeable = 1
object_access_error = 2
object_already_existing = 3
object_invalid = 4
unexpected_error = 5
OTHERS = 6 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->ADD_PERMISSION_TO_USE { sy-subrc }| ).
ENDIF.
ENDIF.
FREE li_usage.
ENDLOOP.
" Delete missing usages
LOOP AT lt_current_permissions INTO li_usage.
READ TABLE lt_handled WITH TABLE KEY table_line = sy-tabix TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
CONTINUE.
ENDIF.
li_usage->delete(
EXCEPTIONS
object_not_changeable = 1
object_invalid = 2
deletion_not_allowed = 3
intern_err = 4
OTHERS = 5 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->DELETE { sy-subrc }| ).
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
rv_user = get_package( )->changed_by.
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.
" Package deletion is a bit tricky. A package can only be deleted if there are no objects
" contained in it. This includes subpackages, so first the leaf packages need to be deleted.
@ -71,6 +216,7 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
" -> Package deletion is currently not supported by abapGit
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: li_package TYPE REF TO if_package,
ls_package_data TYPE scompkdtln,
@ -234,6 +380,7 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
set_lock( ii_package = li_package iv_lock = abap_false ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
" Check remote package if deserialize has not been called before this
@ -254,14 +401,17 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
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~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
@ -278,6 +428,7 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_package_data TYPE scompkdtln,
li_package TYPE REF TO if_package,
@ -286,7 +437,8 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
ls_usage_data TYPE scomppdtln,
li_usage TYPE REF TO if_package_permission_to_use.
FIELD-SYMBOLS: <field> TYPE any.
FIELD-SYMBOLS: <lg_field> TYPE any.
li_package = get_package( ).
IF li_package IS NOT BOUND.
@ -323,9 +475,9 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
ASSIGN COMPONENT 'TRANSLATION_GRAPH_DEPTH_TEXT'
OF STRUCTURE ls_package_data
TO <field>.
TO <lg_field>.
IF sy-subrc = 0.
CLEAR: <field>.
CLEAR: <lg_field>.
ENDIF.
" Clear things related to local installation package
@ -338,9 +490,9 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
ASSIGN COMPONENT 'TRANSLATION_GRAPH_DEPTH'
OF STRUCTURE ls_package_data
TO <field>.
TO <lg_field>.
IF sy-subrc = 0.
CLEAR: <field>.
CLEAR: <lg_field>.
ENDIF.
CLEAR: ls_package_data-korrflag.
@ -381,139 +533,4 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
io_xml->add( iv_name = 'PERMISSION' ig_data = lt_usage_data ).
ENDIF.
ENDMETHOD.
METHOD update_pinf_usages.
DATA: lt_current_permissions TYPE tpak_permission_to_use_list,
li_usage TYPE REF TO if_package_permission_to_use,
ls_data_sign TYPE scomppsign,
ls_add_permission_data TYPE pkgpermdat,
lt_handled TYPE SORTED TABLE OF i WITH UNIQUE KEY table_line.
FIELD-SYMBOLS: <ls_usage_data> LIKE LINE OF it_usage_data.
" Get the current permissions
ii_package->get_permissions_to_use(
IMPORTING
e_permissions = lt_current_permissions
EXCEPTIONS
object_invalid = 1
unexpected_error = 2
OTHERS = 3 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE=>GET_PERMISSIONS_TO_USE { sy-subrc }| ).
ENDIF.
ls_data_sign-err_sever = abap_true.
" New permissions
LOOP AT it_usage_data ASSIGNING <ls_usage_data>.
READ TABLE lt_current_permissions
WITH KEY table_line->package_interface_name = <ls_usage_data>-intf_name
INTO li_usage.
IF sy-subrc = 0 AND li_usage IS BOUND.
INSERT sy-tabix INTO TABLE lt_handled.
" Permission already exists, update attributes
li_usage->set_all_attributes(
EXPORTING
i_permission_data = <ls_usage_data>
i_data_sign = ls_data_sign
EXCEPTIONS
object_not_changeable = 1
object_invalid = 2
intern_err = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise(
|Error from IF_PACKAGE_PERMISSION_TO_USE->SET_ALL_ATTRIBUTES { sy-subrc }| ).
ENDIF.
ELSE.
" Permission does not exist yet, add it
MOVE-CORRESPONDING <ls_usage_data> TO ls_add_permission_data.
ii_package->add_permission_to_use(
EXPORTING
i_pkg_permission_data = ls_add_permission_data
EXCEPTIONS
object_not_changeable = 1
object_access_error = 2
object_already_existing = 3
object_invalid = 4
unexpected_error = 5
OTHERS = 6 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->ADD_PERMISSION_TO_USE { sy-subrc }| ).
ENDIF.
ENDIF.
FREE li_usage.
ENDLOOP.
" Delete missing usages
LOOP AT lt_current_permissions INTO li_usage.
READ TABLE lt_handled WITH TABLE KEY table_line = sy-tabix TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
CONTINUE.
ENDIF.
li_usage->delete(
EXCEPTIONS
object_not_changeable = 1
object_invalid = 2
deletion_not_allowed = 3
intern_err = 4
OTHERS = 5 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->DELETE { sy-subrc }| ).
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD set_lock.
DATA: lv_changeable TYPE abap_bool.
ii_package->get_changeable( IMPORTING e_changeable = lv_changeable ).
IF lv_changeable <> iv_lock.
ii_package->set_changeable(
EXPORTING
i_changeable = iv_lock
EXCEPTIONS
object_locked_by_other_user = 1
permission_failure = 2
object_already_changeable = 3
object_already_unlocked = 4
object_just_created = 5
object_deleted = 6
object_modified = 7
object_not_existing = 8
object_invalid = 9
unexpected_error = 10
OTHERS = 11 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->SET_CHANGEABLE { sy-subrc }| ).
ENDIF.
ENDIF.
ii_package->set_permissions_changeable(
EXPORTING
i_changeable = iv_lock
i_suppress_dialog = abap_true
EXCEPTIONS
object_already_changeable = 1
object_already_unlocked = 2
object_locked_by_other_user = 3
object_modified = 4
object_just_created = 5
object_deleted = 6
permission_failure = 7
object_invalid = 8
unexpected_error = 9
OTHERS = 10 ).
IF ( sy-subrc = 1 AND iv_lock = abap_true ) OR ( sy-subrc = 2 AND iv_lock = abap_false ).
" There's no getter to find out beforehand...
ELSEIF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from IF_PACKAGE->SET_PERMISSIONS_CHANGEABLE { sy-subrc }| ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -17,13 +17,10 @@ CLASS zcl_abapgit_object_dial DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_dial IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
CLASS ZCL_ABAPGIT_OBJECT_DIAL IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
@ -31,70 +28,13 @@ CLASS zcl_abapgit_object_dial IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: ls_tdct TYPE tdct.
ls_tdct = _read_tdct( ).
rv_bool = boolc( ls_tdct IS NOT INITIAL ).
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_dialog_module TYPE ty_dialog_module.
ls_dialog_module-tdct = _read_tdct( ).
SELECT * FROM diapar
INTO TABLE ls_dialog_module-dia_pars
WHERE dnam = ls_dialog_module-tdct-dnam.
io_xml->add( iv_name = 'DIAL'
ig_data = ls_dialog_module ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_dialog_module TYPE ty_dialog_module.
io_xml->read(
EXPORTING
iv_name = 'DIAL'
CHANGING
cg_data = ls_dialog_module ).
CALL FUNCTION 'RS_DIALOG_CREATE'
EXPORTING
dialogname = ls_dialog_module-tdct-dnam
dynpronumber = ls_dialog_module-tdct-dynr
programname = ls_dialog_module-tdct-prog
suppress_corr_check = abap_false
* It seems that dia_par parameter doesn't do anything, but we can't omit it
* Parameters are inserted below
TABLES
dia_par = ls_dialog_module-dia_pars
EXCEPTIONS
dialog_already_exists = 1
invalid_name = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error deserializing dialogmodule { ms_item-obj_name }| ).
ENDIF.
" It seems that there's no API for diapar, therefore we manipulate it directly
INSERT diapar FROM TABLE ls_dialog_module-dia_pars.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
@ -158,15 +98,75 @@ CLASS zcl_abapgit_object_dial IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_dialog_module TYPE ty_dialog_module.
io_xml->read(
EXPORTING
iv_name = 'DIAL'
CHANGING
cg_data = ls_dialog_module ).
CALL FUNCTION 'RS_DIALOG_CREATE'
EXPORTING
dialogname = ls_dialog_module-tdct-dnam
dynpronumber = ls_dialog_module-tdct-dynr
programname = ls_dialog_module-tdct-prog
suppress_corr_check = abap_false
* It seems that dia_par parameter doesn't do anything, but we can't omit it
* Parameters are inserted below
TABLES
dia_par = ls_dialog_module-dia_pars
EXCEPTIONS
dialog_already_exists = 1
invalid_name = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error deserializing dialogmodule { ms_item-obj_name }| ).
ENDIF.
" It seems that there's no API for diapar, therefore we manipulate it directly
INSERT diapar FROM TABLE ls_dialog_module-dia_pars.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: ls_tdct TYPE tdct.
ls_tdct = _read_tdct( ).
rv_bool = boolc( ls_tdct IS NOT INITIAL ).
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~jump.
DATA: objectname TYPE tdct-dnam.
DATA: lv_objectname TYPE tdct-dnam.
objectname = ms_item-obj_name.
lv_objectname = ms_item-obj_name.
CALL FUNCTION 'RS_DIALOG_SHOW'
EXPORTING
objectname = objectname
objectname = lv_objectname
type = 'VW'
EXCEPTIONS
object_not_found = 1
@ -178,23 +178,32 @@ CLASS zcl_abapgit_object_dial IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
METHOD zif_abapgit_object~serialize.
DATA: ls_dialog_module TYPE ty_dialog_module.
ls_dialog_module-tdct = _read_tdct( ).
SELECT * FROM diapar
INTO TABLE ls_dialog_module-dia_pars
WHERE dnam = ls_dialog_module-tdct-dnam.
io_xml->add( iv_name = 'DIAL'
ig_data = ls_dialog_module ).
ENDMETHOD.
METHOD _read_tdct.
DATA: dnam TYPE tdct-dnam.
DATA: lv_dnam TYPE tdct-dnam.
dnam = ms_item-obj_name.
lv_dnam = ms_item-obj_name.
SELECT SINGLE * FROM tdct
INTO rs_tdct
WHERE dnam = dnam.
WHERE dnam = lv_dnam.
ENDMETHOD.
ENDCLASS.

View File

@ -34,25 +34,150 @@ CLASS zcl_abapgit_object_doma DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_doma IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
DATA: lv_date TYPE dats,
lv_time TYPE tims.
CLASS ZCL_ABAPGIT_OBJECT_DOMA IMPLEMENTATION.
SELECT SINGLE as4date as4time FROM dd01l
INTO (lv_date, lv_time)
WHERE domname = ms_item-obj_name
AND as4local = 'A'
AND as4vers = '0000'.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
METHOD deserialize_texts.
DATA: lv_name TYPE ddobjname,
ls_dd01v_tmp TYPE dd01v,
lt_dd07v_tmp TYPE TABLE OF dd07v,
lt_i18n_langs TYPE TABLE OF langu,
lt_dd01_texts TYPE tt_dd01_texts,
lt_dd07_texts TYPE tt_dd07_texts.
FIELD-SYMBOLS: <lv_lang> LIKE LINE OF lt_i18n_langs,
<ls_dd07v> LIKE LINE OF it_dd07v,
<ls_dd01_text> LIKE LINE OF lt_dd01_texts,
<ls_dd07_text> LIKE LINE OF lt_dd07_texts.
lv_name = ms_item-obj_name.
io_xml->read( EXPORTING iv_name = 'I18N_LANGS'
CHANGING cg_data = lt_i18n_langs ).
io_xml->read( EXPORTING iv_name = 'DD01_TEXTS'
CHANGING cg_data = lt_dd01_texts ).
io_xml->read( EXPORTING iv_name = 'DD07_TEXTS'
CHANGING cg_data = lt_dd07_texts ).
SORT lt_i18n_langs.
SORT lt_dd07_texts BY ddlanguage. " Optimization
LOOP AT lt_i18n_langs ASSIGNING <lv_lang>.
" Domain description
ls_dd01v_tmp = is_dd01v.
READ TABLE lt_dd01_texts ASSIGNING <ls_dd01_text> WITH KEY ddlanguage = <lv_lang>.
IF sy-subrc > 0.
zcx_abapgit_exception=>raise( |DD01_TEXTS cannot find lang { <lv_lang> } in XML| ).
ENDIF.
MOVE-CORRESPONDING <ls_dd01_text> TO ls_dd01v_tmp.
" Domain values
lt_dd07v_tmp = it_dd07v.
LOOP AT lt_dd07v_tmp ASSIGNING <ls_dd07v>.
READ TABLE lt_dd07_texts ASSIGNING <ls_dd07_text>
WITH KEY ddlanguage = <lv_lang> valpos = <ls_dd07v>-valpos.
CHECK sy-subrc = 0. " ! no translation -> master translation remain (maybe not OK)
MOVE-CORRESPONDING <ls_dd07_text> TO <ls_dd07v>.
DELETE lt_dd07_texts INDEX sy-tabix. " Optimization
ENDLOOP.
CALL FUNCTION 'DDIF_DOMA_PUT'
EXPORTING
name = lv_name
dd01v_wa = ls_dd01v_tmp
TABLES
dd07v_tab = lt_dd07v_tmp
EXCEPTIONS
doma_not_found = 1
name_inconsistent = 2
doma_inconsistent = 3
put_failure = 4
put_refused = 5
OTHERS = 6.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from DDIF_DOMA_PUT @TEXTS' ).
ENDIF.
ENDLOOP.
ENDMETHOD. "deserialize_texts
METHOD serialize_texts.
DATA: lv_name TYPE ddobjname,
lv_index TYPE i,
ls_dd01v TYPE dd01v,
lt_dd07v TYPE TABLE OF dd07v,
lt_i18n_langs TYPE TABLE OF langu,
lt_dd01_texts TYPE tt_dd01_texts,
lt_dd07_texts TYPE tt_dd07_texts.
FIELD-SYMBOLS: <lv_lang> LIKE LINE OF lt_i18n_langs,
<ls_dd07v> LIKE LINE OF lt_dd07v,
<ls_dd01_text> LIKE LINE OF lt_dd01_texts,
<ls_dd07_text> LIKE LINE OF lt_dd07_texts.
lv_name = ms_item-obj_name.
" Collect additional languages, skip master lang - it was serialized already
SELECT DISTINCT ddlanguage AS langu INTO TABLE lt_i18n_langs
FROM dd01v
WHERE domname = lv_name
AND ddlanguage <> mv_language. "#EC CI_SUBRC
LOOP AT lt_i18n_langs ASSIGNING <lv_lang>.
lv_index = sy-tabix.
CALL FUNCTION 'DDIF_DOMA_GET'
EXPORTING
name = lv_name
langu = <lv_lang>
IMPORTING
dd01v_wa = ls_dd01v
TABLES
dd07v_tab = lt_dd07v
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0 OR ls_dd01v-ddlanguage IS INITIAL.
DELETE lt_i18n_langs INDEX lv_index. " Don't save this lang
CONTINUE.
ENDIF.
APPEND INITIAL LINE TO lt_dd01_texts ASSIGNING <ls_dd01_text>.
MOVE-CORRESPONDING ls_dd01v TO <ls_dd01_text>.
LOOP AT lt_dd07v ASSIGNING <ls_dd07v>.
APPEND INITIAL LINE TO lt_dd07_texts ASSIGNING <ls_dd07_text>.
MOVE-CORRESPONDING <ls_dd07v> TO <ls_dd07_text>.
ENDLOOP.
ENDLOOP.
SORT lt_i18n_langs ASCENDING.
SORT lt_dd01_texts BY ddlanguage ASCENDING.
SORT lt_dd07_texts BY valpos ASCENDING ddlanguage ASCENDING.
IF lines( lt_i18n_langs ) > 0.
io_xml->add( iv_name = 'I18N_LANGS'
ig_data = lt_i18n_langs ).
io_xml->add( iv_name = 'DD01_TEXTS'
ig_data = lt_dd01_texts ).
io_xml->add( iv_name = 'DD07_TEXTS'
ig_data = lt_dd07_texts ).
ENDIF.
ENDMETHOD. "serialize_texts
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~changed_by.
@ -66,30 +191,11 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~exists.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
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. "zif_abapgit_object~exists
METHOD zif_abapgit_object~jump.
jump_se11( iv_radio = 'RSRD1-DOMA'
iv_field = 'RSRD1-DOMA_VAL' ).
ENDMETHOD. "jump
METHOD zif_abapgit_object~delete.
* see class CL_WB_DDIC
@ -115,6 +221,102 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
ENDMETHOD. "delete
METHOD zif_abapgit_object~deserialize.
* package SEDD
* package SDIC
* fm TR_TADIR_INTERFACE
* fm RS_CORR_INSERT ?
DATA: lv_name TYPE ddobjname,
ls_dd01v TYPE dd01v,
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.
zcx_abapgit_exception=>raise( 'error from DDIF_DOMA_PUT' ).
ENDIF.
deserialize_texts( io_xml = io_xml
is_dd01v = ls_dd01v
it_dd07v = lt_dd07v ).
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD. "deserialize
METHOD zif_abapgit_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. "zif_abapgit_object~exists
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-ddic = abap_true.
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~has_changed_since.
DATA: lv_date TYPE dats,
lv_time TYPE tims.
SELECT SINGLE as4date as4time FROM dd01l
INTO (lv_date, lv_time)
WHERE domname = ms_item-obj_name
AND as4local = 'A'
AND as4vers = '0000'.
rv_changed = check_timestamp(
iv_timestamp = iv_timestamp
iv_date = lv_date
iv_time = lv_time ).
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~jump.
jump_se11( iv_radio = 'RSRD1-DOMA'
iv_field = 'RSRD1-DOMA_VAL' ).
ENDMETHOD. "jump
METHOD zif_abapgit_object~serialize.
DATA: lv_name TYPE ddobjname,
@ -166,193 +368,4 @@ CLASS zcl_abapgit_object_doma IMPLEMENTATION.
serialize_texts( io_xml ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~deserialize.
* package SEDD
* package SDIC
* fm TR_TADIR_INTERFACE
* fm RS_CORR_INSERT ?
DATA: lv_name TYPE ddobjname,
ls_dd01v TYPE dd01v,
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.
zcx_abapgit_exception=>raise( 'error from DDIF_DOMA_PUT' ).
ENDIF.
deserialize_texts( io_xml = io_xml
is_dd01v = ls_dd01v
it_dd07v = lt_dd07v ).
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD. "deserialize
METHOD serialize_texts.
DATA: lv_name TYPE ddobjname,
lv_index TYPE i,
ls_dd01v TYPE dd01v,
lt_dd07v TYPE TABLE OF dd07v,
lt_i18n_langs TYPE TABLE OF langu,
lt_dd01_texts TYPE tt_dd01_texts,
lt_dd07_texts TYPE tt_dd07_texts.
FIELD-SYMBOLS: <lang> LIKE LINE OF lt_i18n_langs,
<dd07v> LIKE LINE OF lt_dd07v,
<dd01_text> LIKE LINE OF lt_dd01_texts,
<dd07_text> LIKE LINE OF lt_dd07_texts.
lv_name = ms_item-obj_name.
" Collect additional languages, skip master lang - it was serialized already
SELECT DISTINCT ddlanguage AS langu INTO TABLE lt_i18n_langs
FROM dd01v
WHERE domname = lv_name
AND ddlanguage <> mv_language. "#EC CI_SUBRC
LOOP AT lt_i18n_langs ASSIGNING <lang>.
lv_index = sy-tabix.
CALL FUNCTION 'DDIF_DOMA_GET'
EXPORTING
name = lv_name
langu = <lang>
IMPORTING
dd01v_wa = ls_dd01v
TABLES
dd07v_tab = lt_dd07v
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0 OR ls_dd01v-ddlanguage IS INITIAL.
DELETE lt_i18n_langs INDEX lv_index. " Don't save this lang
CONTINUE.
ENDIF.
APPEND INITIAL LINE TO lt_dd01_texts ASSIGNING <dd01_text>.
MOVE-CORRESPONDING ls_dd01v TO <dd01_text>.
LOOP AT lt_dd07v ASSIGNING <dd07v>.
APPEND INITIAL LINE TO lt_dd07_texts ASSIGNING <dd07_text>.
MOVE-CORRESPONDING <dd07v> TO <dd07_text>.
ENDLOOP.
ENDLOOP.
SORT lt_i18n_langs ASCENDING.
SORT lt_dd01_texts BY ddlanguage ASCENDING.
SORT lt_dd07_texts BY valpos ASCENDING ddlanguage ASCENDING.
IF lines( lt_i18n_langs ) > 0.
io_xml->add( iv_name = 'I18N_LANGS'
ig_data = lt_i18n_langs ).
io_xml->add( iv_name = 'DD01_TEXTS'
ig_data = lt_dd01_texts ).
io_xml->add( iv_name = 'DD07_TEXTS'
ig_data = lt_dd07_texts ).
ENDIF.
ENDMETHOD. "serialize_texts
METHOD deserialize_texts.
DATA: lv_name TYPE ddobjname,
ls_dd01v_tmp TYPE dd01v,
lt_dd07v_tmp TYPE TABLE OF dd07v,
lt_i18n_langs TYPE TABLE OF langu,
lt_dd01_texts TYPE tt_dd01_texts,
lt_dd07_texts TYPE tt_dd07_texts.
FIELD-SYMBOLS: <lang> LIKE LINE OF lt_i18n_langs,
<dd07v> LIKE LINE OF it_dd07v,
<dd01_text> LIKE LINE OF lt_dd01_texts,
<dd07_text> LIKE LINE OF lt_dd07_texts.
lv_name = ms_item-obj_name.
io_xml->read( EXPORTING iv_name = 'I18N_LANGS'
CHANGING cg_data = lt_i18n_langs ).
io_xml->read( EXPORTING iv_name = 'DD01_TEXTS'
CHANGING cg_data = lt_dd01_texts ).
io_xml->read( EXPORTING iv_name = 'DD07_TEXTS'
CHANGING cg_data = lt_dd07_texts ).
SORT lt_i18n_langs.
SORT lt_dd07_texts BY ddlanguage. " Optimization
LOOP AT lt_i18n_langs ASSIGNING <lang>.
" Domain description
ls_dd01v_tmp = is_dd01v.
READ TABLE lt_dd01_texts ASSIGNING <dd01_text> WITH KEY ddlanguage = <lang>.
IF sy-subrc > 0.
zcx_abapgit_exception=>raise( |DD01_TEXTS cannot find lang { <lang> } in XML| ).
ENDIF.
MOVE-CORRESPONDING <dd01_text> TO ls_dd01v_tmp.
" Domain values
lt_dd07v_tmp = it_dd07v.
LOOP AT lt_dd07v_tmp ASSIGNING <dd07v>.
READ TABLE lt_dd07_texts ASSIGNING <dd07_text>
WITH KEY ddlanguage = <lang> valpos = <dd07v>-valpos.
CHECK sy-subrc = 0. " ! no translation -> master translation remain (maybe not OK)
MOVE-CORRESPONDING <dd07_text> TO <dd07v>.
DELETE lt_dd07_texts INDEX sy-tabix. " Optimization
ENDLOOP.
CALL FUNCTION 'DDIF_DOMA_PUT'
EXPORTING
name = lv_name
dd01v_wa = ls_dd01v_tmp
TABLES
dd07v_tab = lt_dd07v_tmp
EXCEPTIONS
doma_not_found = 1
name_inconsistent = 2
doma_inconsistent = 3
put_failure = 4
put_refused = 5
OTHERS = 6.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from DDIF_DOMA_PUT @TEXTS' ).
ENDIF.
ENDLOOP.
ENDMETHOD. "deserialize_texts
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_doma IMPLEMENTATION
ENDCLASS.

View File

@ -13,28 +13,32 @@ CLASS zcl_abapgit_object_enho_fugr DEFINITION PUBLIC.
ENDCLASS.
CLASS zcl_abapgit_object_enho_fugr IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECT_ENHO_FUGR IMPLEMENTATION.
METHOD constructor.
ms_item = is_item.
mo_files = io_files.
ENDMETHOD. "constructor
METHOD zif_abapgit_object_enho~deserialize.
DATA: lo_fugrdata TYPE REF TO cl_enh_tool_fugr,
ls_enha_data TYPE enhfugrdata,
li_tool TYPE REF TO if_enh_tool,
tool TYPE enhtooltype,
lv_tool TYPE enhtooltype,
lv_package TYPE devclass.
FIELD-SYMBOLS: <fuba> TYPE enhfugrfuncdata.
FIELD-SYMBOLS: <ls_fuba> TYPE enhfugrfuncdata.
io_xml->read(
EXPORTING
iv_name = 'TOOL'
CHANGING
cg_data = tool ).
cg_data = lv_tool ).
io_xml->read(
EXPORTING
@ -49,7 +53,7 @@ CLASS zcl_abapgit_object_enho_fugr IMPLEMENTATION.
EXPORTING
enhname = |{ ms_item-obj_name }|
enhtype = ''
enhtooltype = tool
enhtooltype = lv_tool
IMPORTING
enhancement = li_tool
CHANGING
@ -59,10 +63,10 @@ CLASS zcl_abapgit_object_enho_fugr IMPLEMENTATION.
lo_fugrdata->set_fugr( ls_enha_data-fugr ).
LOOP AT ls_enha_data-enh_fubas ASSIGNING <fuba>.
LOOP AT ls_enha_data-enh_fubas ASSIGNING <ls_fuba>.
lo_fugrdata->set_func_data( func_name = <fuba>-fuba
func_enhadata = <fuba> ).
lo_fugrdata->set_func_data( func_name = <ls_fuba>-fuba
func_enhadata = <ls_fuba> ).
ENDLOOP.
@ -75,32 +79,32 @@ CLASS zcl_abapgit_object_enho_fugr IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object_enho~deserialize
METHOD zif_abapgit_object_enho~serialize.
DATA: lo_fugrdata TYPE REF TO cl_enh_tool_fugr,
fugr_name TYPE rs38l-area,
lv_fugr_name TYPE rs38l-area,
ls_enha_data TYPE enhfugrdata.
FIELD-SYMBOLS: <docuobj> TYPE enhfugrparamdocu.
FIELD-SYMBOLS: <ls_docuobj> TYPE enhfugrparamdocu.
lo_fugrdata ?= ii_enh_tool.
lo_fugrdata->get_fugr(
IMPORTING
fugr_name = fugr_name ).
fugr_name = lv_fugr_name ).
TRY.
lo_fugrdata->get_all_data_for_fugr(
EXPORTING
fugr_name = fugr_name
fugr_name = lv_fugr_name
IMPORTING
enha_data = ls_enha_data ).
LOOP AT ls_enha_data-docuobjs ASSIGNING <docuobj>.
CLEAR: <docuobj>-shorttext,
<docuobj>-longtext.
LOOP AT ls_enha_data-docuobjs ASSIGNING <ls_docuobj>.
CLEAR: <ls_docuobj>-shorttext,
<ls_docuobj>-longtext.
ENDLOOP.
CATCH cx_enh_not_found.
@ -114,5 +118,4 @@ CLASS zcl_abapgit_object_enho_fugr IMPLEMENTATION.
ig_data = ls_enha_data ).
ENDMETHOD. "zif_abapgit_object_enho~serialize
ENDCLASS. "zcl_abapgit_object_enho_wdyconf IMPLEMENTATION
ENDCLASS.

View File

@ -12,28 +12,33 @@ CLASS zcl_abapgit_object_enho_wdyn DEFINITION PUBLIC.
ENDCLASS.
CLASS zcl_abapgit_object_enho_wdyn IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OBJECT_ENHO_WDYN IMPLEMENTATION.
METHOD constructor.
ms_item = is_item.
ENDMETHOD. "constructor
METHOD zif_abapgit_object_enho~deserialize.
DATA: ls_enh_data TYPE enhwdyn,
li_tool TYPE REF TO if_enh_tool,
lo_wdyn TYPE REF TO cl_enh_tool_wdy,
tool_type TYPE enhtooltype,
package TYPE devclass.
DATA: ls_enh_data TYPE enhwdyn,
li_tool TYPE REF TO if_enh_tool,
lo_wdyn TYPE REF TO cl_enh_tool_wdy,
lv_tool_type TYPE enhtooltype,
lv_package TYPE devclass.
FIELD-SYMBOLS: <ls_controller_data> TYPE enhwdyc,
<ls_view_data> TYPE enhwdyv.
FIELD-SYMBOLS: <controller_data> TYPE enhwdyc,
<view_data> TYPE enhwdyv.
io_xml->read(
EXPORTING
iv_name = 'TOOL'
CHANGING
cg_data = tool_type ).
cg_data = lv_tool_type ).
io_xml->read(
EXPORTING
@ -41,18 +46,18 @@ CLASS zcl_abapgit_object_enho_wdyn IMPLEMENTATION.
CHANGING
cg_data = ls_enh_data ).
package = iv_package.
lv_package = iv_package.
TRY.
cl_enh_factory=>create_enhancement(
EXPORTING
enhname = |{ ms_item-obj_name }|
enhtype = ''
enhtooltype = tool_type
enhtooltype = lv_tool_type
IMPORTING
enhancement = li_tool
CHANGING
devclass = package ).
devclass = lv_package ).
lo_wdyn ?= li_tool.
@ -60,17 +65,17 @@ CLASS zcl_abapgit_object_enho_wdyn IMPLEMENTATION.
lo_wdyn->set_component_data( ls_enh_data-component_data ).
LOOP AT ls_enh_data-controller_data ASSIGNING <controller_data>.
LOOP AT ls_enh_data-controller_data ASSIGNING <ls_controller_data>.
lo_wdyn->set_controller_data( p_controller_name = <controller_data>-controller_name
p_enh_data = <controller_data> ).
lo_wdyn->set_controller_data( p_controller_name = <ls_controller_data>-controller_name
p_enh_data = <ls_controller_data> ).
ENDLOOP.
LOOP AT ls_enh_data-view_data ASSIGNING <view_data>.
LOOP AT ls_enh_data-view_data ASSIGNING <ls_view_data>.
lo_wdyn->set_view_data( p_view_name = <view_data>-view_name
p_enh_data = <view_data> ).
lo_wdyn->set_view_data( p_view_name = <ls_view_data>-view_name
p_enh_data = <ls_view_data> ).
ENDLOOP.
@ -83,20 +88,21 @@ CLASS zcl_abapgit_object_enho_wdyn IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object_enho~deserialize
METHOD zif_abapgit_object_enho~serialize.
DATA: lo_wdyn TYPE REF TO cl_enh_tool_wdy,
component_name TYPE wdy_component_name,
ls_enh_data TYPE enhwdyn.
DATA: lo_wdyn TYPE REF TO cl_enh_tool_wdy,
lv_component_name TYPE wdy_component_name,
ls_enh_data TYPE enhwdyn.
lo_wdyn ?= ii_enh_tool.
component_name = lo_wdyn->get_component_name( ).
lv_component_name = lo_wdyn->get_component_name( ).
TRY.
lo_wdyn->get_all_data_for_comp(
EXPORTING
p_component_name = component_name
p_component_name = lv_component_name
IMPORTING
p_enh_data = ls_enh_data ).
@ -111,5 +117,4 @@ CLASS zcl_abapgit_object_enho_wdyn IMPLEMENTATION.
ENDTRY.
ENDMETHOD. "zif_abapgit_object_enho~serialize
ENDCLASS. "zcl_abapgit_object_enho_wdyconf IMPLEMENTATION
ENDCLASS.

View File

@ -69,125 +69,40 @@ CLASS zcl_abapgit_object_fugr DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
DATA: lt_functab TYPE ty_rs38l_incl_tt,
lt_includes TYPE rso_t_objnm.
FIELD-SYMBOLS: <ls_func> LIKE LINE OF lt_functab,
<include_name> LIKE LINE OF lt_includes.
lt_includes = includes( ). " Main prog also included here
LOOP AT lt_includes ASSIGNING <include_name>.
rv_changed = check_prog_changed_since(
iv_program = <include_name>
iv_timestamp = iv_timestamp ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
lt_functab = functions( ).
LOOP AT lt_functab ASSIGNING <ls_func>.
rv_changed = check_prog_changed_since(
iv_program = <ls_func>-include
iv_timestamp = iv_timestamp ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~changed_by.
TYPES: BEGIN OF ty_stamps,
user TYPE xubname,
date TYPE d,
time TYPE t,
END OF ty_stamps.
DATA: lt_stamps TYPE STANDARD TABLE OF ty_stamps WITH DEFAULT KEY,
lv_program TYPE program,
lt_includes TYPE rso_t_objnm.
FIELD-SYMBOLS: <ls_stamp> LIKE LINE OF lt_stamps,
<lv_include> LIKE LINE OF lt_includes.
lv_program = main_name( ).
CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
CALL FUNCTION 'RS_GET_ALL_INCLUDES'
METHOD are_exceptions_class_based.
DATA:
lt_dokumentation TYPE TABLE OF funct,
lt_exception_list TYPE TABLE OF rsexc,
lt_export_parameter TYPE TABLE OF rsexp,
lt_import_parameter TYPE TABLE OF rsimp,
lt_tables_parameter TYPE TABLE OF rstbl.
CALL FUNCTION 'FUNCTION_IMPORT_DOKU'
EXPORTING
program = lv_program
funcname = iv_function_name
IMPORTING
exception_class = rv_return
TABLES
includetab = lt_includes
dokumentation = lt_dokumentation
exception_list = lt_exception_list
export_parameter = lt_export_parameter
import_parameter = lt_import_parameter
tables_parameter = lt_tables_parameter
EXCEPTIONS
not_existent = 1
no_program = 2
OTHERS = 3.
error_message = 1
function_not_found = 2
invalid_name = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error from RS_GET_ALL_INCLUDES' ).
zcx_abapgit_exception=>raise( 'Error from FUNCTION_IMPORT_DOKU' ).
ENDIF.
SELECT unam AS user udat AS date utime AS time FROM reposrc
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
WHERE progname = lv_program
AND r3state = 'A'. "#EC CI_SUBRC
LOOP AT lt_includes ASSIGNING <lv_include>.
SELECT unam AS user udat AS date utime AS time FROM reposrc
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
WHERE progname = <lv_include>
AND r3state = 'A'. "#EC CI_SUBRC
ENDLOOP.
SELECT unam AS user udat AS date utime AS time FROM repotext " Program text pool
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
WHERE progname = lv_program
AND r3state = 'A'. "#EC CI_SUBRC
SELECT vautor AS user vdatum AS date vzeit AS time FROM eudb " GUI
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
WHERE relid = 'CU'
AND name = lv_program
AND srtf2 = 0 ##TOO_MANY_ITAB_FIELDS.
* Screens: username not stored in D020S database table
SORT lt_stamps BY date DESCENDING time DESCENDING.
READ TABLE lt_stamps INDEX 1 ASSIGNING <ls_stamp>.
IF sy-subrc = 0.
rv_user = <ls_stamp>-user.
ELSE.
rv_user = c_user_unknown.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~exists.
DATA: lv_pool TYPE tlibg-area.
lv_pool = ms_item-obj_name.
CALL FUNCTION 'RS_FUNCTION_POOL_EXISTS'
EXPORTING
function_pool = lv_pool
EXCEPTIONS
pool_not_exists = 1.
rv_bool = boolc( sy-subrc <> 1 ).
ENDMETHOD. "zif_abapgit_object~exists
METHOD deserialize_functions.
@ -283,6 +198,7 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
ENDMETHOD. "deserialize_functions
METHOD deserialize_includes.
DATA: lo_xml TYPE REF TO zcl_abapgit_xml_input,
@ -326,6 +242,7 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
ENDMETHOD. "deserialize_includes
METHOD deserialize_xml.
DATA: lv_complete TYPE rs38l-area,
@ -390,25 +307,31 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
ENDMETHOD. "deserialize_xml
METHOD serialize_xml.
DATA: lt_includes TYPE rso_t_objnm,
lv_areat TYPE tlibt-areat.
METHOD functions.
DATA: lv_area TYPE rs38l-area.
SELECT SINGLE areat INTO lv_areat
FROM tlibt
WHERE spras = mv_language
AND area = ms_item-obj_name. "#EC CI_GENBUFF "#EC CI_SUBRC
lv_area = ms_item-obj_name.
lt_includes = includes( ).
CALL FUNCTION 'RS_FUNCTION_POOL_CONTENTS'
EXPORTING
function_pool = lv_area
TABLES
functab = rt_functab
EXCEPTIONS
function_pool_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error from RS_FUNCTION_POOL_CONTENTS' ).
ENDIF.
io_xml->add( iv_name = 'AREAT'
ig_data = lv_areat ).
io_xml->add( iv_name = 'INCLUDES'
ig_data = lt_includes ).
SORT rt_functab BY funcname ASCENDING.
DELETE ADJACENT DUPLICATES FROM rt_functab COMPARING funcname.
ENDMETHOD. "functions
ENDMETHOD. "serialize_xml
METHOD includes.
@ -487,29 +410,6 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
ENDMETHOD. "includes
METHOD functions.
DATA: lv_area TYPE rs38l-area.
lv_area = ms_item-obj_name.
CALL FUNCTION 'RS_FUNCTION_POOL_CONTENTS'
EXPORTING
function_pool = lv_area
TABLES
functab = rt_functab
EXCEPTIONS
function_pool_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error from RS_FUNCTION_POOL_CONTENTS' ).
ENDIF.
SORT rt_functab BY funcname ASCENDING.
DELETE ADJACENT DUPLICATES FROM rt_functab COMPARING funcname.
ENDMETHOD. "functions
METHOD main_name.
@ -547,6 +447,7 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
ENDMETHOD. "main_name
METHOD serialize_functions.
DATA:
@ -615,6 +516,7 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
ENDMETHOD. "serialize_functions
METHOD serialize_includes.
DATA: lt_includes TYPE rso_t_objnm.
@ -636,35 +538,232 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
ENDMETHOD. "serialize_includes
METHOD are_exceptions_class_based.
DATA:
lt_dokumentation TYPE TABLE OF funct,
lt_exception_list TYPE TABLE OF rsexc,
lt_export_parameter TYPE TABLE OF rsexp,
lt_import_parameter TYPE TABLE OF rsimp,
lt_tables_parameter TYPE TABLE OF rstbl.
CALL FUNCTION 'FUNCTION_IMPORT_DOKU'
METHOD serialize_xml.
DATA: lt_includes TYPE rso_t_objnm,
lv_areat TYPE tlibt-areat.
SELECT SINGLE areat INTO lv_areat
FROM tlibt
WHERE spras = mv_language
AND area = ms_item-obj_name. "#EC CI_GENBUFF "#EC CI_SUBRC
lt_includes = includes( ).
io_xml->add( iv_name = 'AREAT'
ig_data = lv_areat ).
io_xml->add( iv_name = 'INCLUDES'
ig_data = lt_includes ).
ENDMETHOD. "serialize_xml
METHOD zif_abapgit_object~changed_by.
TYPES: BEGIN OF ty_stamps,
user TYPE xubname,
date TYPE d,
time TYPE t,
END OF ty_stamps.
DATA: lt_stamps TYPE STANDARD TABLE OF ty_stamps WITH DEFAULT KEY,
lv_program TYPE program,
lt_includes TYPE rso_t_objnm.
FIELD-SYMBOLS: <ls_stamp> LIKE LINE OF lt_stamps,
<lv_include> LIKE LINE OF lt_includes.
lv_program = main_name( ).
CALL FUNCTION 'RS_GET_ALL_INCLUDES'
EXPORTING
funcname = iv_function_name
IMPORTING
exception_class = rv_return
program = lv_program
TABLES
dokumentation = lt_dokumentation
exception_list = lt_exception_list
export_parameter = lt_export_parameter
import_parameter = lt_import_parameter
tables_parameter = lt_tables_parameter
includetab = lt_includes
EXCEPTIONS
error_message = 1
function_not_found = 2
invalid_name = 3
OTHERS = 4.
not_existent = 1
no_program = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error from FUNCTION_IMPORT_DOKU' ).
zcx_abapgit_exception=>raise( 'Error from RS_GET_ALL_INCLUDES' ).
ENDIF.
SELECT unam AS user udat AS date utime AS time FROM reposrc
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
WHERE progname = lv_program
AND r3state = 'A'. "#EC CI_SUBRC
LOOP AT lt_includes ASSIGNING <lv_include>.
SELECT unam AS user udat AS date utime AS time FROM reposrc
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
WHERE progname = <lv_include>
AND r3state = 'A'. "#EC CI_SUBRC
ENDLOOP.
SELECT unam AS user udat AS date utime AS time FROM repotext " Program text pool
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
WHERE progname = lv_program
AND r3state = 'A'. "#EC CI_SUBRC
SELECT vautor AS user vdatum AS date vzeit AS time FROM eudb " GUI
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
WHERE relid = 'CU'
AND name = lv_program
AND srtf2 = 0 ##TOO_MANY_ITAB_FIELDS.
* Screens: username not stored in D020S database table
SORT lt_stamps BY date DESCENDING time DESCENDING.
READ TABLE lt_stamps INDEX 1 ASSIGNING <ls_stamp>.
IF sy-subrc = 0.
rv_user = <ls_stamp>-user.
ELSE.
rv_user = c_user_unknown.
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_area TYPE rs38l-area.
lv_area = ms_item-obj_name.
CALL FUNCTION 'RS_FUNCTION_POOL_DELETE'
EXPORTING
area = lv_area
suppress_popups = abap_true
skip_progress_ind = abap_true
EXCEPTIONS
canceled_in_corr = 1
enqueue_system_failure = 2
function_exist = 3
not_executed = 4
no_modify_permission = 5
no_show_permission = 6
permission_failure = 7
pool_not_exist = 8
cancelled = 9
OTHERS = 10.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_FUNCTION_POOL_DELETE' ).
ENDIF.
ENDMETHOD. "delete
METHOD zif_abapgit_object~deserialize.
DATA: lv_program_name TYPE programm,
lt_functions TYPE ty_function_tt,
lt_dynpros TYPE ty_dynpro_tt,
ls_cua TYPE ty_cua.
deserialize_xml(
io_xml = io_xml
iv_package = iv_package ).
io_xml->read( EXPORTING iv_name = 'FUNCTIONS'
CHANGING cg_data = lt_functions ).
deserialize_functions( lt_functions ).
deserialize_includes(
io_xml = io_xml
iv_package = iv_package ).
lv_program_name = main_name( ).
io_xml->read( EXPORTING iv_name = 'DYNPROS'
CHANGING cg_data = lt_dynpros ).
deserialize_dynpros( it_dynpros = lt_dynpros ).
io_xml->read( EXPORTING iv_name = 'CUA'
CHANGING cg_data = ls_cua ).
deserialize_cua( iv_program_name = lv_program_name
is_cua = ls_cua ).
ENDMETHOD. "deserialize
METHOD zif_abapgit_object~exists.
DATA: lv_pool TYPE tlibg-area.
lv_pool = ms_item-obj_name.
CALL FUNCTION 'RS_FUNCTION_POOL_EXISTS'
EXPORTING
function_pool = lv_pool
EXCEPTIONS
pool_not_exists = 1.
rv_bool = boolc( sy-subrc <> 1 ).
ENDMETHOD. "zif_abapgit_object~exists
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~has_changed_since.
DATA: lt_functab TYPE ty_rs38l_incl_tt,
lt_includes TYPE rso_t_objnm.
FIELD-SYMBOLS: <ls_func> LIKE LINE OF lt_functab,
<lv_include_name> LIKE LINE OF lt_includes.
lt_includes = includes( ). " Main prog also included here
LOOP AT lt_includes ASSIGNING <lv_include_name>.
rv_changed = check_prog_changed_since(
iv_program = <lv_include_name>
iv_timestamp = iv_timestamp ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
lt_functab = functions( ).
LOOP AT lt_functab ASSIGNING <ls_func>.
rv_changed = check_prog_changed_since(
iv_program = <ls_func>-include
iv_timestamp = iv_timestamp ).
IF rv_changed = abap_true.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = 'FUGR'
in_new_window = abap_true.
ENDMETHOD. "jump
METHOD zif_abapgit_object~serialize.
* function group SEUF
@ -703,82 +802,4 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
ENDIF.
ENDMETHOD. "serialize
METHOD zif_abapgit_object~deserialize.
DATA: lv_program_name TYPE programm,
lt_functions TYPE ty_function_tt,
lt_dynpros TYPE ty_dynpro_tt,
ls_cua TYPE ty_cua.
deserialize_xml(
io_xml = io_xml
iv_package = iv_package ).
io_xml->read( EXPORTING iv_name = 'FUNCTIONS'
CHANGING cg_data = lt_functions ).
deserialize_functions( lt_functions ).
deserialize_includes(
io_xml = io_xml
iv_package = iv_package ).
lv_program_name = main_name( ).
io_xml->read( EXPORTING iv_name = 'DYNPROS'
CHANGING cg_data = lt_dynpros ).
deserialize_dynpros( it_dynpros = lt_dynpros ).
io_xml->read( EXPORTING iv_name = 'CUA'
CHANGING cg_data = ls_cua ).
deserialize_cua( iv_program_name = lv_program_name
is_cua = ls_cua ).
ENDMETHOD. "deserialize
METHOD zif_abapgit_object~delete.
DATA: lv_area TYPE rs38l-area.
lv_area = ms_item-obj_name.
CALL FUNCTION 'RS_FUNCTION_POOL_DELETE'
EXPORTING
area = lv_area
suppress_popups = abap_true
skip_progress_ind = abap_true
EXCEPTIONS
canceled_in_corr = 1
enqueue_system_failure = 2
function_exist = 3
not_executed = 4
no_modify_permission = 5
no_show_permission = 6
permission_failure = 7
pool_not_exist = 8
cancelled = 9
OTHERS = 10.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_FUNCTION_POOL_DELETE' ).
ENDIF.
ENDMETHOD. "delete
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = 'FUGR'
in_new_window = abap_true.
ENDMETHOD. "jump
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_fugr IMPLEMENTATION
ENDCLASS.

View File

@ -8,13 +8,10 @@ CLASS zcl_abapgit_object_jobd DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_jobd IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
CLASS ZCL_ABAPGIT_OBJECT_JOBD IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
@ -22,140 +19,25 @@ CLASS zcl_abapgit_object_jobd IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: jd_name TYPE ty_jd_name.
jd_name = ms_item-obj_name.
TRY.
CALL METHOD ('CL_JR_JD_MANAGER')=>('CHECK_JD_EXISTENCE')
EXPORTING
im_jd_name = jd_name
IMPORTING
ex_is_existing = rv_bool.
CATCH cx_root.
zcx_abapgit_exception=>raise( |JOBD not supported| ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lr_job_definition TYPE REF TO data,
lo_job_definition TYPE REF TO object,
jd_name TYPE ty_jd_name.
FIELD-SYMBOLS: <ls_job_definition> TYPE any,
<field> TYPE any.
jd_name = ms_item-obj_name.
TRY.
CREATE DATA lr_job_definition TYPE ('CL_JR_JOB_DEFINITION=>TY_JOB_DEFINITION').
ASSIGN lr_job_definition->* TO <ls_job_definition>.
ASSERT sy-subrc = 0.
CREATE OBJECT lo_job_definition TYPE ('CL_JR_JOB_DEFINITION')
EXPORTING
im_jd_name = jd_name.
CALL METHOD lo_job_definition->('GET_JD_ATTRIBUTES')
IMPORTING
ex_jd_attributes = <ls_job_definition>.
ASSIGN COMPONENT 'JDPACKAGE' OF STRUCTURE <ls_job_definition> TO <field>.
CLEAR <field>.
ASSIGN COMPONENT 'BTCJOB_USER' OF STRUCTURE <ls_job_definition> TO <field>.
CLEAR <field>.
ASSIGN COMPONENT 'OWNER' OF STRUCTURE <ls_job_definition> TO <field>.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_DATE' OF STRUCTURE <ls_job_definition> TO <field>.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_TIME' OF STRUCTURE <ls_job_definition> TO <field>.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_DATE' OF STRUCTURE <ls_job_definition> TO <field>.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_TIME' OF STRUCTURE <ls_job_definition> TO <field>.
CLEAR <field>.
io_xml->add( iv_name = 'JOBD'
ig_data = <ls_job_definition> ).
CATCH cx_root.
zcx_abapgit_exception=>raise( |Error serializing JOBD| ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lr_job_definition TYPE REF TO data,
lo_job_definition TYPE REF TO object,
jd_name TYPE ty_jd_name.
FIELD-SYMBOLS: <ls_job_definition> TYPE any,
<field> TYPE any.
jd_name = ms_item-obj_name.
TRY.
CREATE DATA lr_job_definition TYPE ('CL_JR_JOB_DEFINITION=>TY_JOB_DEFINITION').
ASSIGN lr_job_definition->* TO <ls_job_definition>.
ASSERT sy-subrc = 0.
io_xml->read(
EXPORTING
iv_name = 'JOBD'
CHANGING
cg_data = <ls_job_definition> ).
CREATE OBJECT lo_job_definition TYPE ('CL_JR_JOB_DEFINITION')
EXPORTING
im_jd_name = jd_name.
ASSIGN COMPONENT 'JDPACKAGE' OF STRUCTURE <ls_job_definition> TO <field>.
<field> = iv_package.
CALL METHOD lo_job_definition->('CREATE_JD')
EXPORTING
im_jd_attributes = <ls_job_definition>.
CATCH cx_root.
zcx_abapgit_exception=>raise( |Error deserializing JOBD| ).
ENDTRY.
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: lo_job_definition TYPE REF TO object,
jd_name TYPE c LENGTH 32.
lv_name TYPE c LENGTH 32.
jd_name = ms_item-obj_name.
lv_name = ms_item-obj_name.
TRY.
CREATE OBJECT lo_job_definition TYPE ('CL_JR_JOB_DEFINITION')
EXPORTING
im_jd_name = jd_name.
im_jd_name = lv_name.
CALL METHOD lo_job_definition->('DELETE_JD').
@ -165,17 +47,98 @@ CLASS zcl_abapgit_object_jobd IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lr_job_definition TYPE REF TO data,
lo_job_definition TYPE REF TO object,
lv_name TYPE ty_jd_name.
FIELD-SYMBOLS: <lg_job_definition> TYPE any,
<lg_field> TYPE any.
lv_name = ms_item-obj_name.
TRY.
CREATE DATA lr_job_definition TYPE ('CL_JR_JOB_DEFINITION=>TY_JOB_DEFINITION').
ASSIGN lr_job_definition->* TO <lg_job_definition>.
ASSERT sy-subrc = 0.
io_xml->read(
EXPORTING
iv_name = 'JOBD'
CHANGING
cg_data = <lg_job_definition> ).
CREATE OBJECT lo_job_definition TYPE ('CL_JR_JOB_DEFINITION')
EXPORTING
im_jd_name = lv_name.
ASSIGN COMPONENT 'JDPACKAGE' OF STRUCTURE <lg_job_definition> TO <lg_field>.
<lg_field> = iv_package.
CALL METHOD lo_job_definition->('CREATE_JD')
EXPORTING
im_jd_attributes = <lg_job_definition>.
CATCH cx_root.
zcx_abapgit_exception=>raise( |Error deserializing JOBD| ).
ENDTRY.
zcl_abapgit_objects_activation=>add_item( ms_item ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lv_name TYPE ty_jd_name.
lv_name = ms_item-obj_name.
TRY.
CALL METHOD ('CL_JR_JD_MANAGER')=>('CHECK_JD_EXISTENCE')
EXPORTING
im_jd_name = lv_name
IMPORTING
ex_is_existing = rv_bool.
CATCH cx_root.
zcx_abapgit_exception=>raise( |JOBD not supported| ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
DATA: obj_name TYPE e071-obj_name.
DATA: lv_obj_name TYPE e071-obj_name.
obj_name = ms_item-obj_name.
lv_obj_name = ms_item-obj_name.
CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL'
EXPORTING
iv_pgmid = 'R3TR'
iv_object = ms_item-obj_type
iv_obj_name = obj_name
iv_obj_name = lv_obj_name
iv_action = 'SHOW'
EXCEPTIONS
jump_not_possible = 1
@ -187,10 +150,59 @@ CLASS zcl_abapgit_object_jobd IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
METHOD zif_abapgit_object~serialize.
DATA: lr_job_definition TYPE REF TO data,
lo_job_definition TYPE REF TO object,
lv_name TYPE ty_jd_name.
FIELD-SYMBOLS: <ls_job_definition> TYPE any,
<lg_field> TYPE any.
lv_name = ms_item-obj_name.
TRY.
CREATE DATA lr_job_definition TYPE ('CL_JR_JOB_DEFINITION=>TY_JOB_DEFINITION').
ASSIGN lr_job_definition->* TO <ls_job_definition>.
ASSERT sy-subrc = 0.
CREATE OBJECT lo_job_definition TYPE ('CL_JR_JOB_DEFINITION')
EXPORTING
im_jd_name = lv_name.
CALL METHOD lo_job_definition->('GET_JD_ATTRIBUTES')
IMPORTING
ex_jd_attributes = <ls_job_definition>.
ASSIGN COMPONENT 'JDPACKAGE' OF STRUCTURE <ls_job_definition> TO <lg_field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'BTCJOB_USER' OF STRUCTURE <ls_job_definition> TO <lg_field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'OWNER' OF STRUCTURE <ls_job_definition> TO <lg_field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CREATED_DATE' OF STRUCTURE <ls_job_definition> TO <lg_field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CREATED_TIME' OF STRUCTURE <ls_job_definition> TO <lg_field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CHANGED_DATE' OF STRUCTURE <ls_job_definition> TO <lg_field>.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CHANGED_TIME' OF STRUCTURE <ls_job_definition> TO <lg_field>.
CLEAR <lg_field>.
io_xml->add( iv_name = 'JOBD'
ig_data = <ls_job_definition> ).
CATCH cx_root.
zcx_abapgit_exception=>raise( |Error serializing JOBD| ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -26,13 +26,10 @@ CLASS zcl_abapgit_object_prag DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_prag IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
CLASS ZCL_ABAPGIT_OBJECT_PRAG IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
@ -40,79 +37,13 @@ CLASS zcl_abapgit_object_prag IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
TRY.
cl_abap_pragma=>get_ref( ms_item-obj_name ).
CATCH cx_abap_pragma_not_exists.
rv_bool = abap_false.
RETURN.
ENDTRY.
rv_bool = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lo_pragma TYPE REF TO cl_abap_pragma,
pragma TYPE zcl_abapgit_object_prag=>ty_pragma.
TRY.
lo_pragma = cl_abap_pragma=>get_ref( ms_item-obj_name ).
pragma-pragma = lo_pragma->pragma.
pragma-extension = lo_pragma->extension.
pragma-signature = lo_pragma->signature.
pragma-description = lo_pragma->description.
io_xml->add( iv_name = 'PRAG'
ig_data = pragma ).
CATCH cx_abap_pragma_not_exists.
_raise_pragma_not_exists( ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: pragma TYPE ty_pragma,
lo_pragma TYPE REF TO cl_abap_pragma.
TRY.
io_xml->read(
EXPORTING
iv_name = 'PRAG'
CHANGING
cg_data = pragma ).
lo_pragma = cl_abap_pragma=>create( p_pragma = ms_item-obj_name
p_package = iv_package ).
lo_pragma->set_info( p_description = pragma-description
p_signature = pragma-signature
p_extension = pragma-extension ).
lo_pragma->save( ).
CATCH cx_abap_pragma_not_exists.
_raise_pragma_not_exists( ).
CATCH cx_abap_pragma_exists.
_raise_pragma_exists( ).
CATCH cx_abap_pragma_enqueue.
_raise_pragma_enqueue( ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
@ -131,6 +62,69 @@ CLASS zcl_abapgit_object_prag IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_pragma TYPE ty_pragma,
lo_pragma TYPE REF TO cl_abap_pragma.
TRY.
io_xml->read(
EXPORTING
iv_name = 'PRAG'
CHANGING
cg_data = ls_pragma ).
lo_pragma = cl_abap_pragma=>create( p_pragma = ms_item-obj_name
p_package = iv_package ).
lo_pragma->set_info( p_description = ls_pragma-description
p_signature = ls_pragma-signature
p_extension = ls_pragma-extension ).
lo_pragma->save( ).
CATCH cx_abap_pragma_not_exists.
_raise_pragma_not_exists( ).
CATCH cx_abap_pragma_exists.
_raise_pragma_exists( ).
CATCH cx_abap_pragma_enqueue.
_raise_pragma_enqueue( ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
TRY.
cl_abap_pragma=>get_ref( ms_item-obj_name ).
CATCH cx_abap_pragma_not_exists.
rv_bool = abap_false.
RETURN.
ENDTRY.
rv_bool = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
@ -145,28 +139,47 @@ CLASS zcl_abapgit_object_prag IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
METHOD zif_abapgit_object~serialize.
DATA: lo_pragma TYPE REF TO cl_abap_pragma,
ls_pragma TYPE zcl_abapgit_object_prag=>ty_pragma.
TRY.
lo_pragma = cl_abap_pragma=>get_ref( ms_item-obj_name ).
ls_pragma-pragma = lo_pragma->pragma.
ls_pragma-extension = lo_pragma->extension.
ls_pragma-signature = lo_pragma->signature.
ls_pragma-description = lo_pragma->description.
io_xml->add( iv_name = 'PRAG'
ig_data = ls_pragma ).
CATCH cx_abap_pragma_not_exists.
_raise_pragma_not_exists( ).
ENDTRY.
ENDMETHOD.
METHOD _raise_pragma_enqueue.
zcx_abapgit_exception=>raise( |Pragma { ms_item-obj_name } enqueue error| ).
ENDMETHOD.
METHOD _raise_pragma_exists.
zcx_abapgit_exception=>raise( |Pragma { ms_item-obj_name } exists| ).
ENDMETHOD.
METHOD _raise_pragma_not_exists.
zcx_abapgit_exception=>raise( |Pragma { ms_item-obj_name } doesn't exist| ).
ENDMETHOD.
ENDCLASS.

View File

@ -21,15 +21,64 @@ CLASS zcl_abapgit_object_prog DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_prog IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = check_prog_changed_since(
iv_program = ms_item-obj_name
iv_timestamp = iv_timestamp ).
CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION.
METHOD deserialize_texts.
DATA: lt_tpool_i18n TYPE tt_tpool_i18n,
lt_tpool TYPE textpool_table.
FIELD-SYMBOLS <tpool> LIKE LINE OF lt_tpool_i18n.
io_xml->read( EXPORTING iv_name = 'I18N_TPOOL'
CHANGING cg_data = lt_tpool_i18n ).
LOOP AT lt_tpool_i18n ASSIGNING <tpool>.
lt_tpool = read_tpool( <tpool>-textpool ).
deserialize_textpool( iv_program = ms_item-obj_name
iv_language = <tpool>-language
it_tpool = lt_tpool ).
ENDLOOP.
ENDMETHOD. "deserialize_texts
METHOD serialize_texts.
DATA: lt_tpool_i18n TYPE tt_tpool_i18n,
lt_tpool TYPE textpool_table.
FIELD-SYMBOLS <ls_tpool> LIKE LINE OF lt_tpool_i18n.
" Table d010tinf stores info. on languages in which program is maintained
" Select all active translations of program texts
" Skip master language - it was already serialized
SELECT DISTINCT language
INTO CORRESPONDING FIELDS OF TABLE lt_tpool_i18n
FROM d010tinf
WHERE r3state = 'A'
AND prog = ms_item-obj_name
AND language <> mv_language.
SORT lt_tpool_i18n BY language ASCENDING.
LOOP AT lt_tpool_i18n ASSIGNING <ls_tpool>.
READ TEXTPOOL ms_item-obj_name
LANGUAGE <ls_tpool>-language
INTO lt_tpool.
<ls_tpool>-textpool = add_tpool( lt_tpool ).
ENDLOOP.
IF lines( lt_tpool_i18n ) > 0.
io_xml->add( iv_name = 'I18N_TPOOL'
ig_data = lt_tpool_i18n ).
ENDIF.
ENDMETHOD. "serialize_texts
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~changed_by.
SELECT SINGLE unam FROM reposrc INTO rv_user
@ -40,31 +89,11 @@ CLASS zcl_abapgit_object_prog IMPLEMENTATION.
ENDIF.
ENDMETHOD. "zif_abapgit_object~changed_by
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~exists.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. "zif_abapgit_object~compare_to_remote_version
DATA: lv_progname TYPE reposrc-progname.
SELECT SINGLE progname FROM reposrc INTO lv_progname
WHERE progname = ms_item-obj_name
AND r3state = 'A'.
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD. "zif_abapgit_object~exists
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = 'PROG'
in_new_window = abap_true.
ENDMETHOD. "jump
METHOD zif_abapgit_object~delete.
@ -90,16 +119,6 @@ CLASS zcl_abapgit_object_prog IMPLEMENTATION.
ENDMETHOD. "delete
METHOD zif_abapgit_object~serialize.
serialize_program( io_xml = io_xml
is_item = ms_item
io_files = mo_files ).
" Texts serializing (translations)
serialize_texts( io_xml ).
ENDMETHOD. "zif_abapgit_serialize~serialize
METHOD zif_abapgit_object~deserialize.
@ -144,59 +163,53 @@ CLASS zcl_abapgit_object_prog IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_serialize~deserialize
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. "zif_abapgit_object~compare_to_remote_version
METHOD serialize_texts.
METHOD zif_abapgit_object~exists.
DATA: lt_tpool_i18n TYPE tt_tpool_i18n,
lt_tpool TYPE textpool_table.
DATA: lv_progname TYPE reposrc-progname.
FIELD-SYMBOLS <tpool> LIKE LINE OF lt_tpool_i18n.
SELECT SINGLE progname FROM reposrc INTO lv_progname
WHERE progname = ms_item-obj_name
AND r3state = 'A'.
rv_bool = boolc( sy-subrc = 0 ).
" Table d010tinf stores info. on languages in which program is maintained
" Select all active translations of program texts
" Skip master language - it was already serialized
SELECT DISTINCT language
INTO CORRESPONDING FIELDS OF TABLE lt_tpool_i18n
FROM d010tinf
WHERE r3state = 'A'
AND prog = ms_item-obj_name
AND language <> mv_language.
ENDMETHOD. "zif_abapgit_object~exists
SORT lt_tpool_i18n BY language ASCENDING.
LOOP AT lt_tpool_i18n ASSIGNING <tpool>.
READ TEXTPOOL ms_item-obj_name
LANGUAGE <tpool>-language
INTO lt_tpool.
<tpool>-textpool = add_tpool( lt_tpool ).
ENDLOOP.
IF lines( lt_tpool_i18n ) > 0.
io_xml->add( iv_name = 'I18N_TPOOL'
ig_data = lt_tpool_i18n ).
ENDIF.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
ENDMETHOD. "serialize_texts
METHOD deserialize_texts.
METHOD zif_abapgit_object~has_changed_since.
DATA: lt_tpool_i18n TYPE tt_tpool_i18n,
lt_tpool TYPE textpool_table.
rv_changed = check_prog_changed_since(
iv_program = ms_item-obj_name
iv_timestamp = iv_timestamp ).
FIELD-SYMBOLS <tpool> LIKE LINE OF lt_tpool_i18n.
ENDMETHOD. "zif_abapgit_object~has_changed_since
io_xml->read( EXPORTING iv_name = 'I18N_TPOOL'
CHANGING cg_data = lt_tpool_i18n ).
LOOP AT lt_tpool_i18n ASSIGNING <tpool>.
lt_tpool = read_tpool( <tpool>-textpool ).
deserialize_textpool( iv_program = ms_item-obj_name
iv_language = <tpool>-language
it_tpool = lt_tpool ).
ENDLOOP.
METHOD zif_abapgit_object~jump.
ENDMETHOD. "deserialize_texts
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = 'PROG'
in_new_window = abap_true.
ENDCLASS. "zcl_abapgit_object_prog IMPLEMENTATION
ENDMETHOD. "jump
METHOD zif_abapgit_object~serialize.
serialize_program( io_xml = io_xml
is_item = ms_item
io_files = mo_files ).
" Texts serializing (translations)
serialize_texts( io_xml ).
ENDMETHOD. "zif_abapgit_serialize~serialize
ENDCLASS.

View File

@ -19,104 +19,10 @@ CLASS zcl_abapgit_object_sfpf DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_sfpf IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~changed_by.
SELECT SINGLE lastuser FROM fplayout
INTO rv_user
WHERE name = ms_item-obj_name
AND state = 'A'.
IF rv_user IS INITIAL.
SELECT SINGLE firstuser FROM fplayout
INTO rv_user
WHERE name = ms_item-obj_name
AND state = 'A'.
ENDIF.
IF rv_user IS INITIAL.
rv_user = c_user_unknown.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~exists.
DATA: lv_name TYPE fpname.
SELECT SINGLE name FROM fplayout
INTO lv_name
WHERE name = ms_item-obj_name
AND state = 'A'.
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD. "zif_abapgit_object~exists
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.
ENDMETHOD. "jump
METHOD zif_abapgit_object~delete.
DATA: lv_name TYPE fpname,
lo_wb_form TYPE REF TO cl_fp_wb_form.
lo_wb_form ?= load( ).
CLASS ZCL_ABAPGIT_OBJECT_SFPF IMPLEMENTATION.
lv_name = ms_item-obj_name.
TRY.
lo_wb_form->delete( lv_name ).
CATCH cx_fp_api.
zcx_abapgit_exception=>raise( 'SFPI error, delete' ).
ENDTRY.
ENDMETHOD. "delete
METHOD load.
DATA: lv_name TYPE fpname.
lv_name = ms_item-obj_name.
TRY.
ri_wb_form = cl_fp_wb_form=>load( lv_name ).
CATCH cx_fp_api.
zcx_abapgit_exception=>raise( 'SFPF error, load' ).
ENDTRY.
ENDMETHOD.
METHOD form_to_xstring.
DATA: li_fp_form TYPE REF TO if_fp_form,
li_wb_form TYPE REF TO if_fp_wb_form.
TRY.
li_wb_form = load( ).
li_fp_form ?= li_wb_form->get_object( ).
rv_xstr = cl_fp_helper=>convert_form_to_xstring( li_fp_form ).
CATCH cx_fp_api.
zcx_abapgit_exception=>raise( 'SFPF error, form_to_xstring' ).
ENDTRY.
ENDMETHOD.
METHOD fix_oref.
@ -129,11 +35,11 @@ CLASS zcl_abapgit_object_sfpf IMPLEMENTATION.
li_node TYPE REF TO if_ixml_node.
DEFINE _lookup.
read table lt_map from &1 transporting no fields.
if sy-subrc <> 0.
append &1 to lt_map.
read table lt_map from &1 transporting no fields.
endif.
READ TABLE lt_map FROM &1 TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
APPEND &1 TO lt_map.
READ TABLE lt_map FROM &1 TRANSPORTING NO FIELDS.
ENDIF.
lv_new = sy-tabix + 100.
END-OF-DEFINITION.
@ -168,18 +74,82 @@ CLASS zcl_abapgit_object_sfpf IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lv_xstr TYPE xstring,
li_document TYPE REF TO if_ixml_document.
METHOD form_to_xstring.
DATA: li_fp_form TYPE REF TO if_fp_form,
li_wb_form TYPE REF TO if_fp_wb_form.
lv_xstr = form_to_xstring( ).
li_document = cl_ixml_80_20=>parse_to_document( stream_xstring = lv_xstr ).
fix_oref( li_document ).
io_xml->set_raw( li_document->get_root_element( ) ).
TRY.
li_wb_form = load( ).
li_fp_form ?= li_wb_form->get_object( ).
rv_xstr = cl_fp_helper=>convert_form_to_xstring( li_fp_form ).
CATCH cx_fp_api.
zcx_abapgit_exception=>raise( 'SFPF error, form_to_xstring' ).
ENDTRY.
ENDMETHOD.
METHOD load.
DATA: lv_name TYPE fpname.
lv_name = ms_item-obj_name.
TRY.
ri_wb_form = cl_fp_wb_form=>load( lv_name ).
CATCH cx_fp_api.
zcx_abapgit_exception=>raise( 'SFPF error, load' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
SELECT SINGLE lastuser FROM fplayout
INTO rv_user
WHERE name = ms_item-obj_name
AND state = 'A'.
IF rv_user IS INITIAL.
SELECT SINGLE firstuser FROM fplayout
INTO rv_user
WHERE name = ms_item-obj_name
AND state = 'A'.
ENDIF.
IF rv_user IS INITIAL.
rv_user = c_user_unknown.
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_name TYPE fpname,
lo_wb_form TYPE REF TO cl_fp_wb_form.
lo_wb_form ?= load( ).
lv_name = ms_item-obj_name.
TRY.
lo_wb_form->delete( lv_name ).
CATCH cx_fp_api.
zcx_abapgit_exception=>raise( 'SFPI error, delete' ).
ENDTRY.
ENDMETHOD. "delete
ENDMETHOD. "serialize
METHOD zif_abapgit_object~deserialize.
@ -207,8 +177,51 @@ CLASS zcl_abapgit_object_sfpf IMPLEMENTATION.
ENDMETHOD. "deserialize
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_doma IMPLEMENTATION
METHOD zif_abapgit_object~exists.
DATA: lv_name TYPE fpname.
SELECT SINGLE name FROM fplayout
INTO lv_name
WHERE name = ms_item-obj_name
AND state = 'A'.
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD. "zif_abapgit_object~exists
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
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.
ENDMETHOD. "jump
METHOD zif_abapgit_object~serialize.
DATA: lv_xstr TYPE xstring,
li_document TYPE REF TO if_ixml_document.
lv_xstr = form_to_xstring( ).
li_document = cl_ixml_80_20=>parse_to_document( stream_xstring = lv_xstr ).
fix_oref( li_document ).
io_xml->set_raw( li_document->get_root_element( ) ).
ENDMETHOD. "serialize
ENDCLASS.

View File

@ -5,13 +5,10 @@ CLASS zcl_abapgit_object_srfc DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_srfc IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
CLASS ZCL_ABAPGIT_OBJECT_SRFC IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
@ -19,102 +16,62 @@ CLASS zcl_abapgit_object_srfc IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lo_object_data TYPE REF TO if_wb_object_data_model,
lo_srfc_persist TYPE REF TO if_wb_object_persist.
METHOD zif_abapgit_object~delete.
TRY.
CREATE OBJECT lo_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
lo_srfc_persist->get(
EXPORTING
p_object_key = |{ ms_item-obj_name }|
p_version = 'A'
CHANGING
p_object_data = lo_object_data ).
CATCH cx_root.
rv_bool = abap_false.
RETURN.
ENDTRY.
rv_bool = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lo_object_data TYPE REF TO if_wb_object_data_model,
lo_srfc_persist TYPE REF TO if_wb_object_persist,
lr_srfc_data TYPE REF TO data,
DATA: li_srfc_persist TYPE REF TO if_wb_object_persist,
lx_error TYPE REF TO cx_root,
lv_text TYPE string.
FIELD-SYMBOLS: <ls_srfc_data> TYPE any.
TRY.
CREATE DATA lr_srfc_data TYPE ('UCONRFCSERV_COMPLETE').
ASSIGN lr_srfc_data->* TO <ls_srfc_data>.
ASSERT sy-subrc = 0.
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
CREATE OBJECT lo_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
lo_srfc_persist->get(
EXPORTING
p_object_key = |{ ms_item-obj_name }|
p_version = 'A'
CHANGING
p_object_data = lo_object_data ).
lo_object_data->get_data(
IMPORTING
p_data = <ls_srfc_data> ).
li_srfc_persist->delete( p_object_key = |{ ms_item-obj_name }|
p_version = 'A' ).
CATCH cx_root INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
io_xml->add( iv_name = 'SRFC'
ig_data = <ls_srfc_data> ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lo_srfc_persist TYPE REF TO if_wb_object_persist,
lo_object_data TYPE REF TO if_wb_object_data_model,
DATA: li_srfc_persist TYPE REF TO if_wb_object_persist,
li_object_data TYPE REF TO if_wb_object_data_model,
lv_text TYPE string,
lr_srfc_data TYPE REF TO data,
lx_error TYPE REF TO cx_root.
FIELD-SYMBOLS: <ls_srfc_data> TYPE any.
FIELD-SYMBOLS: <lg_srfc_data> TYPE any.
TRY.
CREATE DATA lr_srfc_data TYPE ('UCONRFCSERV_COMPLETE').
ASSIGN lr_srfc_data->* TO <ls_srfc_data>.
ASSIGN lr_srfc_data->* TO <lg_srfc_data>.
ASSERT sy-subrc = 0.
io_xml->read(
EXPORTING
iv_name = 'SRFC'
CHANGING
cg_data = <ls_srfc_data> ).
cg_data = <lg_srfc_data> ).
CREATE OBJECT lo_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
CREATE OBJECT lo_object_data TYPE ('CL_UCONRFC_OBJECT_DATA').
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
CREATE OBJECT li_object_data TYPE ('CL_UCONRFC_OBJECT_DATA').
lo_object_data->set_data( <ls_srfc_data> ).
li_object_data->set_data( <lg_srfc_data> ).
lo_srfc_persist->save( lo_object_data ).
li_srfc_persist->save( li_object_data ).
tadir_insert( iv_package ).
@ -125,23 +82,44 @@ CLASS zcl_abapgit_object_srfc IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: lo_srfc_persist TYPE REF TO if_wb_object_persist,
lx_error TYPE REF TO cx_root,
lv_text TYPE string.
METHOD zif_abapgit_object~exists.
DATA: li_object_data TYPE REF TO if_wb_object_data_model,
li_srfc_persist TYPE REF TO if_wb_object_persist.
TRY.
CREATE OBJECT lo_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
lo_srfc_persist->delete( p_object_key = |{ ms_item-obj_name }|
p_version = 'A' ).
li_srfc_persist->get(
EXPORTING
p_object_key = |{ ms_item-obj_name }|
p_version = 'A'
CHANGING
p_object_data = li_object_data ).
CATCH cx_root INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
CATCH cx_root.
rv_bool = abap_false.
RETURN.
ENDTRY.
rv_bool = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
@ -164,10 +142,43 @@ CLASS zcl_abapgit_object_srfc IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
METHOD zif_abapgit_object~serialize.
DATA: li_object_data TYPE REF TO if_wb_object_data_model,
li_srfc_persist TYPE REF TO if_wb_object_persist,
lr_srfc_data TYPE REF TO data,
lx_error TYPE REF TO cx_root,
lv_text TYPE string.
FIELD-SYMBOLS: <ls_srfc_data> TYPE any.
TRY.
CREATE DATA lr_srfc_data TYPE ('UCONRFCSERV_COMPLETE').
ASSIGN lr_srfc_data->* TO <ls_srfc_data>.
ASSERT sy-subrc = 0.
CREATE OBJECT li_srfc_persist TYPE ('CL_UCONRFC_OBJECT_PERSIST').
li_srfc_persist->get(
EXPORTING
p_object_key = |{ ms_item-obj_name }|
p_version = 'A'
CHANGING
p_object_data = li_object_data ).
li_object_data->get_data(
IMPORTING
p_data = <ls_srfc_data> ).
CATCH cx_root INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
io_xml->add( iv_name = 'SRFC'
ig_data = <ls_srfc_data> ).
ENDMETHOD.
ENDCLASS.

View File

@ -12,11 +12,24 @@ CLASS zcl_abapgit_object_ssst DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_ssst IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
CLASS ZCL_ABAPGIT_OBJECT_SSST IMPLEMENTATION.
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.
zcx_abapgit_exception=>raise( 'Font family not found' ).
ENDIF.
ENDMETHOD. "validate_font
METHOD zif_abapgit_object~changed_by.
@ -28,10 +41,107 @@ CLASS zcl_abapgit_object_ssst IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD. "zif_abapgit_object~get_metadata
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_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.
zcx_abapgit_exception=>raise( 'error from SSF_DELETE_STYLE' ).
ENDIF.
ENDMETHOD. "delete
METHOD zif_abapgit_object~deserialize.
* see fm SSF_UPLOAD_STYLE
DATA: ls_header TYPE ssfcats,
ls_new_header TYPE ssfcats,
lt_paragraphs TYPE TABLE OF ssfparas,
lt_strings TYPE TABLE OF ssfstrings,
lt_tabstops TYPE TABLE OF stxstab.
FIELD-SYMBOLS: <lv_spras> TYPE spras.
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_READ_STYLE' "Just load FG
EXPORTING
i_style_name = ls_header-stylename
i_style_active_flag = 'A'
EXCEPTIONS
OTHERS = 0.
IF sy-subrc <> 0.
ENDIF.
SET PARAMETER ID 'EUK' FIELD iv_package.
ASSIGN ('(SAPLSTXBS)MASTER_LANGUAGE') TO <lv_spras>.
IF sy-subrc = 0.
<lv_spras> = ls_header-masterlang.
ENDIF.
CALL FUNCTION 'SSF_SAVE_STYLE'
EXPORTING
i_header = ls_header
IMPORTING
e_header = ls_new_header
TABLES
i_paragraphs = lt_paragraphs
i_strings = lt_strings
i_tabstops = lt_tabstops.
IF ls_new_header IS NOT INITIAL.
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.
zcx_abapgit_exception=>raise( 'error from SSF_ACTIVATE_STYLE' ).
ENDIF.
ENDIF.
ENDMETHOD. "deserialize
METHOD zif_abapgit_object~exists.
@ -46,18 +156,54 @@ CLASS zcl_abapgit_object_ssst IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~exists
METHOD validate_font.
DATA: lv_tdfamily TYPE tfo01-tdfamily.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD. "zif_abapgit_object~get_metadata
SELECT SINGLE tdfamily FROM tfo01 INTO lv_tdfamily
WHERE tdfamily = iv_tdfamily.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~jump.
DATA: ls_bcdata TYPE bdcdata,
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
ls_bcdata-program = 'SAPMSSFS'.
ls_bcdata-dynpro = '0100'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'SSFSCREENS-SNAME'.
ls_bcdata-fval = ms_item-obj_name.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=DISPLAY'.
APPEND ls_bcdata TO lt_bcdata.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
STARTING NEW TASK 'GIT'
EXPORTING
tcode = 'SMARTSTYLES'
mode_val = 'E'
TABLES
using_tab = lt_bcdata
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Font family not found' ).
zcx_abapgit_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, SSST' ).
ENDIF.
ENDMETHOD. "validate_font
ENDMETHOD. "jump
METHOD zif_abapgit_object~serialize.
* see fm SSF_DOWNLOAD_STYLE
@ -117,137 +263,4 @@ CLASS zcl_abapgit_object_ssst IMPLEMENTATION.
iv_name = 'STXSTAB' ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~deserialize.
* see fm SSF_UPLOAD_STYLE
DATA: ls_header TYPE ssfcats,
ls_new_header TYPE ssfcats,
lt_paragraphs TYPE TABLE OF ssfparas,
lt_strings TYPE TABLE OF ssfstrings,
lt_tabstops TYPE TABLE OF stxstab.
FIELD-SYMBOLS: <spras> TYPE spras.
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_READ_STYLE' "Just load FG
EXPORTING
i_style_name = ls_header-stylename
i_style_active_flag = 'A'
EXCEPTIONS
OTHERS = 0.
IF sy-subrc <> 0.
ENDIF.
SET PARAMETER ID 'EUK' FIELD iv_package.
ASSIGN ('(SAPLSTXBS)MASTER_LANGUAGE') TO <spras>.
IF sy-subrc = 0.
<spras> = ls_header-masterlang.
ENDIF.
CALL FUNCTION 'SSF_SAVE_STYLE'
EXPORTING
i_header = ls_header
IMPORTING
e_header = ls_new_header
TABLES
i_paragraphs = lt_paragraphs
i_strings = lt_strings
i_tabstops = lt_tabstops.
IF ls_new_header IS NOT INITIAL.
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.
zcx_abapgit_exception=>raise( 'error from SSF_ACTIVATE_STYLE' ).
ENDIF.
ENDIF.
ENDMETHOD. "deserialize
METHOD zif_abapgit_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.
zcx_abapgit_exception=>raise( 'error from SSF_DELETE_STYLE' ).
ENDIF.
ENDMETHOD. "delete
METHOD zif_abapgit_object~jump.
DATA: ls_bcdata TYPE bdcdata,
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
ls_bcdata-program = 'SAPMSSFS'.
ls_bcdata-dynpro = '0100'.
ls_bcdata-dynbegin = 'X'.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'SSFSCREENS-SNAME'.
ls_bcdata-fval = ms_item-obj_name.
APPEND ls_bcdata TO lt_bcdata.
CLEAR ls_bcdata.
ls_bcdata-fnam = 'BDC_OKCODE'.
ls_bcdata-fval = '=DISPLAY'.
APPEND ls_bcdata TO lt_bcdata.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
STARTING NEW TASK 'GIT'
EXPORTING
tcode = 'SMARTSTYLES'
mode_val = 'E'
TABLES
using_tab = lt_bcdata
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, SSST' ).
ENDIF.
ENDMETHOD. "jump
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_ssst IMPLEMENTATION
ENDCLASS.

View File

@ -73,7 +73,7 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION.
lv_no_ask TYPE abap_bool,
lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any.
FIELD-SYMBOLS: <lg_data> TYPE any.
lv_objname = ms_item-obj_name.
@ -86,8 +86,8 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION.
IF sy-subrc = 0 AND lv_tabclass = 'TRANSP'.
* it cannot delete table with table wihtout asking
CREATE DATA lr_data TYPE (lv_objname).
ASSIGN lr_data->* TO <ls_data>.
SELECT SINGLE * FROM (lv_objname) INTO <ls_data>.
ASSIGN lr_data->* TO <lg_data>.
SELECT SINGLE * FROM (lv_objname) INTO <lg_data>.
IF sy-subrc = 0.
lv_no_ask = abap_false.
ENDIF.

View File

@ -40,31 +40,57 @@ CLASS zcl_abapgit_object_tran DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_tran IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown. " todo
ENDMETHOD.
CLASS ZCL_ABAPGIT_OBJECT_TRAN IMPLEMENTATION.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD split_parameters_comp.
DATA: lv_off TYPE i.
METHOD deserialize_texts.
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.
DATA lt_tpool_i18n TYPE TABLE OF tstct.
FIELD-SYMBOLS <ls_tpool> LIKE LINE OF lt_tpool_i18n.
" Read XML-files data
io_xml->read( EXPORTING iv_name = 'I18N_TPOOL'
CHANGING cg_data = lt_tpool_i18n ).
" Force t-code name (security reasons)
LOOP AT lt_tpool_i18n ASSIGNING <ls_tpool>.
<ls_tpool>-tcode = ms_item-obj_name.
ENDLOOP.
IF lines( lt_tpool_i18n ) > 0.
MODIFY tstct FROM TABLE lt_tpool_i18n.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Update of t-code translations failed' ).
ENDIF.
ENDIF.
ENDMETHOD. "split_parameters_comp
ENDMETHOD. "deserialize_texts
METHOD serialize_texts.
DATA lt_tpool_i18n TYPE TABLE OF tstct.
" Skip master language - it was already serialized
" Don't serialize t-code itself
SELECT sprsl ttext
INTO CORRESPONDING FIELDS OF TABLE lt_tpool_i18n
FROM tstct
WHERE sprsl <> mv_language
AND tcode = ms_item-obj_name. "#EC CI_GENBUFF
IF lines( lt_tpool_i18n ) > 0.
SORT lt_tpool_i18n BY sprsl ASCENDING.
io_xml->add( iv_name = 'I18N_TPOOL'
ig_data = lt_tpool_i18n ).
ENDIF.
ENDMETHOD. "serialize_texts
METHOD split_parameters.
* see subroutine split_parameters in include LSEUKF01
@ -195,52 +221,29 @@ CLASS zcl_abapgit_object_tran IMPLEMENTATION.
ENDIF.
ENDMETHOD. "split_parameters
METHOD zif_abapgit_object~exists.
DATA: lv_tcode TYPE tstc-tcode.
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
SELECT SINGLE tcode FROM tstc INTO lv_tcode
WHERE tcode = ms_item-obj_name. "#EC CI_GENBUFF
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD. "zif_abapgit_object~exists
METHOD zif_abapgit_object~jump.
DATA: lt_bdcdata TYPE TABLE OF bdcdata.
FIELD-SYMBOLS: <ls_bdcdata> LIKE LINE OF lt_bdcdata.
METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown. " todo
ENDMETHOD.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-program = 'SAPLSEUK'.
<ls_bdcdata>-dynpro = '0390'.
<ls_bdcdata>-dynbegin = abap_true.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'BDC_OKCODE'.
<ls_bdcdata>-fval = '=SHOW'.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'TSTC-TCODE'.
<ls_bdcdata>-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 zif_abapgit_object~delete.
@ -262,6 +265,7 @@ CLASS zcl_abapgit_object_tran IMPLEMENTATION.
ENDMETHOD. "delete
METHOD zif_abapgit_object~deserialize.
CONSTANTS: lc_hex_tra TYPE x VALUE '00',
@ -356,6 +360,66 @@ CLASS zcl_abapgit_object_tran IMPLEMENTATION.
ENDMETHOD. "deserialize
METHOD zif_abapgit_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. "zif_abapgit_object~exists
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~jump.
DATA: lt_bdcdata TYPE TABLE OF bdcdata.
FIELD-SYMBOLS: <ls_bdcdata> LIKE LINE OF lt_bdcdata.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-program = 'SAPLSEUK'.
<ls_bdcdata>-dynpro = '0390'.
<ls_bdcdata>-dynbegin = abap_true.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'BDC_OKCODE'.
<ls_bdcdata>-fval = '=SHOW'.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'TSTC-TCODE'.
<ls_bdcdata>-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 zif_abapgit_object~serialize.
DATA: lv_transaction TYPE tstc-tcode,
@ -414,52 +478,4 @@ CLASS zcl_abapgit_object_tran IMPLEMENTATION.
serialize_texts( io_xml ).
ENDMETHOD. "serialize
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD serialize_texts.
DATA lt_tpool_i18n TYPE TABLE OF tstct.
" Skip master language - it was already serialized
" Don't serialize t-code itself
SELECT sprsl ttext
INTO CORRESPONDING FIELDS OF TABLE lt_tpool_i18n
FROM tstct
WHERE sprsl <> mv_language
AND tcode = ms_item-obj_name. "#EC CI_GENBUFF
IF lines( lt_tpool_i18n ) > 0.
SORT lt_tpool_i18n BY sprsl ASCENDING.
io_xml->add( iv_name = 'I18N_TPOOL'
ig_data = lt_tpool_i18n ).
ENDIF.
ENDMETHOD. "serialize_texts
METHOD deserialize_texts.
DATA lt_tpool_i18n TYPE TABLE OF tstct.
FIELD-SYMBOLS <tpool> LIKE LINE OF lt_tpool_i18n.
" Read XML-files data
io_xml->read( EXPORTING iv_name = 'I18N_TPOOL'
CHANGING cg_data = lt_tpool_i18n ).
" Force t-code name (security reasons)
LOOP AT lt_tpool_i18n ASSIGNING <tpool>.
<tpool>-tcode = ms_item-obj_name.
ENDLOOP.
IF lines( lt_tpool_i18n ) > 0.
MODIFY tstct FROM TABLE lt_tpool_i18n.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Update of t-code translations failed' ).
ENDIF.
ENDIF.
ENDMETHOD. "deserialize_texts
ENDCLASS. "zcl_abapgit_object_tran IMPLEMENTATION
ENDCLASS.

View File

@ -26,27 +26,150 @@ CLASS zcl_abapgit_object_ucsa DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_ucsa IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
CLASS ZCL_ABAPGIT_OBJECT_UCSA IMPLEMENTATION.
METHOD clear_dynamic_fields.
FIELD-SYMBOLS: <lg_header> TYPE any.
ASSIGN COMPONENT 'HEADER' OF STRUCTURE cs_complete_comm_assembly
TO <lg_header>.
ASSERT sy-subrc = 0.
clear_field(
EXPORTING iv_fieldname = 'CREATEDBY'
CHANGING cs_header = <lg_header> ).
clear_field(
EXPORTING iv_fieldname = 'CREATEDON'
CHANGING cs_header = <lg_header> ).
clear_field(
EXPORTING iv_fieldname = 'CREATEDAT'
CHANGING cs_header = <lg_header> ).
clear_field(
EXPORTING iv_fieldname = 'CHANGEDBY'
CHANGING cs_header = <lg_header> ).
clear_field(
EXPORTING iv_fieldname = 'CHANGEDON'
CHANGING cs_header = <lg_header> ).
clear_field(
EXPORTING iv_fieldname = 'CHANGEDAT'
CHANGING cs_header = <lg_header> ).
ENDMETHOD.
METHOD clear_field.
FIELD-SYMBOLS: <field> TYPE any.
ASSIGN COMPONENT iv_fieldname OF STRUCTURE cs_header
TO <field>.
ASSERT sy-subrc = 0.
CLEAR: <field>.
ENDMETHOD.
METHOD get_persistence.
CALL METHOD ('CL_UCON_SA_DB_PERSIST')=>('IF_UCON_SA_PERSIST~GET_INSTANCE')
EXPORTING
id = iv_id
RECEIVING
instance = ro_persistence.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
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_id TYPE ty_id,
lx_root TYPE REF TO cx_root,
lv_text TYPE string,
lo_persistence TYPE REF TO object.
TRY.
lv_id = ms_item-obj_name.
lo_persistence = get_persistence( lv_id ).
CALL METHOD lo_persistence->('IF_UCON_SA_PERSIST~DELETE')
EXPORTING
version = zif_abapgit_definitions=>gc_version-active.
CATCH cx_root INTO lx_root.
lv_text = lx_root->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lv_id TYPE ty_id,
lx_root TYPE REF TO cx_root,
lv_text TYPE string,
lo_persistence TYPE REF TO object,
lr_complete_comm_assembly TYPE REF TO data.
FIELD-SYMBOLS: <lg_complete_comm_assembly> TYPE any.
TRY.
CREATE DATA lr_complete_comm_assembly TYPE ('UCONSERVASCOMPLETE').
ASSIGN lr_complete_comm_assembly->* TO <lg_complete_comm_assembly>.
ASSERT sy-subrc = 0.
io_xml->read(
EXPORTING
iv_name = 'UCSA'
CHANGING
cg_data = <lg_complete_comm_assembly> ).
lv_id = ms_item-obj_name.
lo_persistence = get_persistence( lv_id ).
CALL METHOD lo_persistence->('IF_UCON_SA_PERSIST~CREATE').
CALL METHOD lo_persistence->('IF_UCON_SA_PERSIST~SAVE')
EXPORTING
sa = <lg_complete_comm_assembly>
version = zif_abapgit_definitions=>gc_version-active.
tadir_insert( iv_package ).
CATCH cx_root INTO lx_root.
lv_text = lx_root->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: lv_id TYPE ty_id,
@ -75,6 +198,42 @@ CLASS zcl_abapgit_object_ucsa IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
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
EXCEPTIONS
not_executed = 1
invalid_object_type = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_TOOL_ACCESS' ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lv_id TYPE ty_id,
@ -112,150 +271,4 @@ CLASS zcl_abapgit_object_ucsa IMPLEMENTATION.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lv_id TYPE ty_id,
lx_root TYPE REF TO cx_root,
lv_text TYPE string,
lo_persistence TYPE REF TO object,
lr_complete_comm_assembly TYPE REF TO data.
FIELD-SYMBOLS: <ls_complete_comm_assembly> TYPE any.
TRY.
CREATE DATA lr_complete_comm_assembly TYPE ('UCONSERVASCOMPLETE').
ASSIGN lr_complete_comm_assembly->* TO <ls_complete_comm_assembly>.
ASSERT sy-subrc = 0.
io_xml->read(
EXPORTING
iv_name = 'UCSA'
CHANGING
cg_data = <ls_complete_comm_assembly> ).
lv_id = ms_item-obj_name.
lo_persistence = get_persistence( lv_id ).
CALL METHOD lo_persistence->('IF_UCON_SA_PERSIST~CREATE').
CALL METHOD lo_persistence->('IF_UCON_SA_PERSIST~SAVE')
EXPORTING
sa = <ls_complete_comm_assembly>
version = zif_abapgit_definitions=>gc_version-active.
tadir_insert( iv_package ).
CATCH cx_root INTO lx_root.
lv_text = lx_root->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: lv_id TYPE ty_id,
lx_root TYPE REF TO cx_root,
lv_text TYPE string,
lo_persistence TYPE REF TO object.
TRY.
lv_id = ms_item-obj_name.
lo_persistence = get_persistence( lv_id ).
CALL METHOD lo_persistence->('IF_UCON_SA_PERSIST~DELETE')
EXPORTING
version = zif_abapgit_definitions=>gc_version-active.
CATCH cx_root INTO lx_root.
lv_text = lx_root->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
ENDTRY.
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
EXCEPTIONS
not_executed = 1
invalid_object_type = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_TOOL_ACCESS' ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD get_persistence.
CALL METHOD ('CL_UCON_SA_DB_PERSIST')=>('IF_UCON_SA_PERSIST~GET_INSTANCE')
EXPORTING
id = iv_id
RECEIVING
instance = ro_persistence.
ENDMETHOD.
METHOD clear_dynamic_fields.
FIELD-SYMBOLS: <header> TYPE any.
ASSIGN COMPONENT 'HEADER' OF STRUCTURE cs_complete_comm_assembly
TO <header>.
ASSERT sy-subrc = 0.
clear_field(
EXPORTING iv_fieldname = 'CREATEDBY'
CHANGING cs_header = <header> ).
clear_field(
EXPORTING iv_fieldname = 'CREATEDON'
CHANGING cs_header = <header> ).
clear_field(
EXPORTING iv_fieldname = 'CREATEDAT'
CHANGING cs_header = <header> ).
clear_field(
EXPORTING iv_fieldname = 'CHANGEDBY'
CHANGING cs_header = <header> ).
clear_field(
EXPORTING iv_fieldname = 'CHANGEDON'
CHANGING cs_header = <header> ).
clear_field(
EXPORTING iv_fieldname = 'CHANGEDAT'
CHANGING cs_header = <header> ).
ENDMETHOD.
METHOD clear_field.
FIELD-SYMBOLS: <field> TYPE any.
ASSIGN COMPONENT iv_fieldname OF STRUCTURE cs_header
TO <field>.
ASSERT sy-subrc = 0.
CLEAR: <field>.
ENDMETHOD.
ENDCLASS.

View File

@ -46,87 +46,10 @@ CLASS zcl_abapgit_object_webi DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ENDCLASS.
CLASS zcl_abapgit_object_webi IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown. " todo
ENDMETHOD. "zif_abapgit_object~changed_by
CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION.
METHOD zif_abapgit_object~serialize.
DATA: ls_webi TYPE ty_webi,
lt_modilog TYPE STANDARD TABLE OF smodilog WITH DEFAULT KEY,
li_vi TYPE REF TO if_ws_md_vif,
lv_name TYPE vepname.
FIELD-SYMBOLS: <ls_header> LIKE LINE OF ls_webi-pvepheader,
<ls_endpoint> LIKE LINE OF ls_webi-pvependpoint.
CALL FUNCTION 'WEBI_GET_OBJECT'
EXPORTING
webiname = ms_item-obj_name
TABLES
psmodilog = lt_modilog
pvepheader = ls_webi-pvepheader
pvepfunction = ls_webi-pvepfunction
pvepfault = ls_webi-pvepfault
pvepparameter = ls_webi-pvepparameter
pveptype = ls_webi-pveptype
pvepelemtype = ls_webi-pvepelemtype
pveptabletype = ls_webi-pveptabletype
pvepstrutype = ls_webi-pvepstrutype
pveptypesoapext = ls_webi-pveptypesoapext
pvepeletypsoap = ls_webi-pvepeletypsoap
pveptabtypsoap = ls_webi-pveptabtypsoap
pvepfuncsoapext = ls_webi-pvepfuncsoapext
pvepfieldref = ls_webi-pvepfieldref
pvependpoint = ls_webi-pvependpoint
pvepvisoapext = ls_webi-pvepvisoapext
pvepparasoapext = ls_webi-pvepparasoapext
EXCEPTIONS
version_not_found = 1
webi_not_exist = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from WEBI_GET_OBJECT' ).
ENDIF.
SORT ls_webi-pveptype BY
vepname ASCENDING
version ASCENDING
typename ASCENDING.
lv_name = ms_item-obj_name.
TRY.
li_vi = cl_ws_md_factory=>get_vif_root( )->get_virtual_interface( lv_name ).
ls_webi-veptext = li_vi->get_short_text( sews_c_vif_version-active ).
CATCH cx_ws_md_exception.
zcx_abapgit_exception=>raise( 'error serializing WEBI' ).
ENDTRY.
LOOP AT ls_webi-pvepheader ASSIGNING <ls_header>.
CLEAR <ls_header>-author.
CLEAR <ls_header>-createdon.
CLEAR <ls_header>-changedby.
CLEAR <ls_header>-changedon.
CLEAR <ls_header>-ctime.
CLEAR <ls_header>-text_id.
CLEAR <ls_header>-utime.
CLEAR <ls_header>-wsint_version.
ENDLOOP.
LOOP AT ls_webi-pvependpoint ASSIGNING <ls_endpoint>.
CLEAR: <ls_endpoint>-clustd.
ENDLOOP.
io_xml->add( iv_name = 'WEBI'
ig_data = ls_webi ).
ENDMETHOD. "zif_abapgit_object~serialize
METHOD handle_endpoint.
@ -167,12 +90,13 @@ CLASS zcl_abapgit_object_webi IMPLEMENTATION.
ENDMETHOD. "handle_endpoint
METHOD handle_function.
CONSTANTS: BEGIN OF co_parameter_type,
CONSTANTS: BEGIN OF lc_parameter_type,
import TYPE vepparamtype VALUE 'I',
export TYPE vepparamtype VALUE 'O',
END OF co_parameter_type.
END OF lc_parameter_type.
DATA: li_parameter TYPE REF TO if_ws_md_vif_param,
li_soap TYPE REF TO if_ws_md_soap_ext_func,
@ -202,12 +126,12 @@ CLASS zcl_abapgit_object_webi IMPLEMENTATION.
WHERE function = <ls_function>-function.
CASE <ls_parameter>-vepparamtype.
WHEN co_parameter_type-import.
WHEN lc_parameter_type-import.
li_parameter = li_function->create_incoming_parameter(
<ls_parameter>-vepparam ).
WHEN co_parameter_type-export.
WHEN lc_parameter_type-export.
li_parameter = li_function->create_outgoing_parameter(
<ls_parameter>-vepparam ).
@ -244,6 +168,26 @@ CLASS zcl_abapgit_object_webi IMPLEMENTATION.
ENDMETHOD. "handle_function
METHOD handle_soap.
DATA: li_soap TYPE REF TO if_ws_md_soap_ext_virtinfc,
ls_soap LIKE LINE OF is_webi-pvepvisoapext.
READ TABLE is_webi-pvepvisoapext INDEX 1 INTO ls_soap.
ASSERT sy-subrc = 0.
IF mi_vi->has_soap_extension_virtinfc( sews_c_vif_version-active ) = abap_true.
RETURN.
ENDIF.
li_soap = mi_vi->create_soap_extension_virtinfc( ls_soap-soap_appl_uri ).
li_soap->set_namespace( ls_soap-namespace ).
ENDMETHOD. "handle_soap
METHOD handle_types.
DATA: lv_index TYPE i,
@ -325,23 +269,34 @@ CLASS zcl_abapgit_object_webi IMPLEMENTATION.
ENDMETHOD. "handle_types
METHOD handle_soap.
DATA: li_soap TYPE REF TO if_ws_md_soap_ext_virtinfc,
ls_soap LIKE LINE OF is_webi-pvepvisoapext.
METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown. " todo
ENDMETHOD. "zif_abapgit_object~changed_by
READ TABLE is_webi-pvepvisoapext INDEX 1 INTO ls_soap.
ASSERT sy-subrc = 0.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
IF mi_vi->has_soap_extension_virtinfc( sews_c_vif_version-active ) = abap_true.
RETURN.
ENDIF.
li_soap = mi_vi->create_soap_extension_virtinfc( ls_soap-soap_appl_uri ).
li_soap->set_namespace( ls_soap-namespace ).
METHOD zif_abapgit_object~delete.
DATA: lv_name TYPE vepname,
lo_vif TYPE REF TO cl_ws_md_vif_root.
lv_name = ms_item-obj_name.
CREATE OBJECT lo_vif.
TRY.
lo_vif->if_ws_md_vif_root~delete_virtual_interface( lv_name ).
CATCH cx_ws_md_exception.
zcx_abapgit_exception=>raise( 'error deleting WEBI' ).
ENDTRY.
ENDMETHOD. "zif_abapgit_object~delete
ENDMETHOD. "handle_soap
METHOD zif_abapgit_object~deserialize.
@ -399,22 +354,6 @@ CLASS zcl_abapgit_object_webi IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~deserialize
METHOD zif_abapgit_object~delete.
DATA: lv_name TYPE vepname,
lo_vif TYPE REF TO cl_ws_md_vif_root.
lv_name = ms_item-obj_name.
CREATE OBJECT lo_vif.
TRY.
lo_vif->if_ws_md_vif_root~delete_virtual_interface( lv_name ).
CATCH cx_ws_md_exception.
zcx_abapgit_exception=>raise( 'error deleting WEBI' ).
ENDTRY.
ENDMETHOD. "zif_abapgit_object~delete
METHOD zif_abapgit_object~exists.
@ -429,6 +368,17 @@ CLASS zcl_abapgit_object_webi IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~exists
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
@ -440,12 +390,76 @@ CLASS zcl_abapgit_object_webi IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~jump
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
ENDCLASS. "zcl_abapgit_object_webi IMPLEMENTATION
DATA: ls_webi TYPE ty_webi,
lt_modilog TYPE STANDARD TABLE OF smodilog WITH DEFAULT KEY,
li_vi TYPE REF TO if_ws_md_vif,
lv_name TYPE vepname.
FIELD-SYMBOLS: <ls_header> LIKE LINE OF ls_webi-pvepheader,
<ls_endpoint> LIKE LINE OF ls_webi-pvependpoint.
CALL FUNCTION 'WEBI_GET_OBJECT'
EXPORTING
webiname = ms_item-obj_name
TABLES
psmodilog = lt_modilog
pvepheader = ls_webi-pvepheader
pvepfunction = ls_webi-pvepfunction
pvepfault = ls_webi-pvepfault
pvepparameter = ls_webi-pvepparameter
pveptype = ls_webi-pveptype
pvepelemtype = ls_webi-pvepelemtype
pveptabletype = ls_webi-pveptabletype
pvepstrutype = ls_webi-pvepstrutype
pveptypesoapext = ls_webi-pveptypesoapext
pvepeletypsoap = ls_webi-pvepeletypsoap
pveptabtypsoap = ls_webi-pveptabtypsoap
pvepfuncsoapext = ls_webi-pvepfuncsoapext
pvepfieldref = ls_webi-pvepfieldref
pvependpoint = ls_webi-pvependpoint
pvepvisoapext = ls_webi-pvepvisoapext
pvepparasoapext = ls_webi-pvepparasoapext
EXCEPTIONS
version_not_found = 1
webi_not_exist = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from WEBI_GET_OBJECT' ).
ENDIF.
SORT ls_webi-pveptype BY
vepname ASCENDING
version ASCENDING
typename ASCENDING.
lv_name = ms_item-obj_name.
TRY.
li_vi = cl_ws_md_factory=>get_vif_root( )->get_virtual_interface( lv_name ).
ls_webi-veptext = li_vi->get_short_text( sews_c_vif_version-active ).
CATCH cx_ws_md_exception.
zcx_abapgit_exception=>raise( 'error serializing WEBI' ).
ENDTRY.
LOOP AT ls_webi-pvepheader ASSIGNING <ls_header>.
CLEAR <ls_header>-author.
CLEAR <ls_header>-createdon.
CLEAR <ls_header>-changedby.
CLEAR <ls_header>-changedon.
CLEAR <ls_header>-ctime.
CLEAR <ls_header>-text_id.
CLEAR <ls_header>-utime.
CLEAR <ls_header>-wsint_version.
ENDLOOP.
LOOP AT ls_webi-pvependpoint ASSIGNING <ls_endpoint>.
CLEAR: <ls_endpoint>-clustd.
ENDLOOP.
io_xml->add( iv_name = 'WEBI'
ig_data = ls_webi ).
ENDMETHOD. "zif_abapgit_object~serialize
ENDCLASS.

View File

@ -50,12 +50,118 @@ CLASS zcl_abapgit_objects_saxx_super DEFINITION PUBLIC ABSTRACT
ENDCLASS.
CLASS zcl_abapgit_objects_saxx_super IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
CLASS ZCL_ABAPGIT_OBJECTS_SAXX_SUPER IMPLEMENTATION.
METHOD create_channel_objects.
get_names( ).
TRY.
IF mo_appl_obj_data IS NOT BOUND.
CREATE OBJECT mo_appl_obj_data TYPE (mv_appl_obj_cls_name).
ENDIF.
IF mo_persistence IS NOT BOUND.
CREATE OBJECT mo_persistence TYPE (mv_persistence_cls_name).
ENDIF.
CATCH cx_root.
zcx_abapgit_exception=>raise( |{ ms_item-obj_type } not supported| ).
ENDTRY.
ENDMETHOD.
METHOD get_data.
DATA: lv_object_key TYPE seu_objkey.
lv_object_key = ms_item-obj_name.
TRY.
mo_persistence->get(
EXPORTING
p_object_key = lv_object_key
p_version = 'A'
CHANGING
p_object_data = mo_appl_obj_data ).
CATCH cx_root.
zcx_abapgit_exception=>raise( |{ ms_item-obj_type } not supported| ).
ENDTRY.
mo_appl_obj_data->get_data(
IMPORTING
p_data = p_data ).
ENDMETHOD.
METHOD get_names.
IF mv_data_structure_name IS INITIAL.
mv_data_structure_name = get_data_structure_name( ).
ENDIF.
IF mv_appl_obj_cls_name IS INITIAL.
mv_appl_obj_cls_name = get_data_class_name( ).
ENDIF.
IF mv_persistence_cls_name IS INITIAL.
mv_persistence_cls_name = get_persistence_class_name( ).
ENDIF.
ENDMETHOD.
METHOD lock.
DATA: lv_objname TYPE trobj_name,
lv_object_key TYPE seu_objkey,
lv_objtype TYPE trobjtype.
lv_objname = ms_item-obj_name.
lv_object_key = ms_item-obj_name.
lv_objtype = ms_item-obj_type.
mo_persistence->lock(
EXPORTING
p_objname_tr = lv_objname
p_object_key = lv_object_key
p_objtype_tr = lv_objtype
EXCEPTIONS
foreign_lock = 1
error_occurred = 2
OTHERS = 3 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error occured while locking { ms_item-obj_type } | && lv_objname ).
ENDIF.
ENDMETHOD. "lock
METHOD unlock.
DATA: lv_objname TYPE trobj_name,
lv_object_key TYPE seu_objkey,
lv_objtype TYPE trobjtype.
lv_objname = ms_item-obj_name.
lv_object_key = ms_item-obj_name.
lv_objtype = ms_item-obj_type.
mo_persistence->unlock( p_objname_tr = lv_objname
p_object_key = lv_object_key
p_objtype_tr = lv_objtype ).
ENDMETHOD. "unlock
METHOD zif_abapgit_object~changed_by.
DATA: lr_data TYPE REF TO data.
@ -91,106 +197,45 @@ CLASS zcl_abapgit_objects_saxx_super IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA: object_key TYPE seu_objkey.
METHOD zif_abapgit_object~delete.
DATA: lv_object_key TYPE seu_objkey.
create_channel_objects( ).
object_key = ms_item-obj_name.
lv_object_key = ms_item-obj_name.
TRY.
mo_persistence->get( p_object_key = object_key
p_version = 'A'
p_existence_check_only = abap_true ).
lock( ).
CATCH cx_swb_object_does_not_exist cx_swb_exception.
rv_bool = abap_false.
RETURN.
mo_persistence->delete( lv_object_key ).
unlock( ).
CATCH cx_swb_exception.
zcx_abapgit_exception=>raise( |Error occured while deleting { ms_item-obj_type }| ).
ENDTRY.
rv_bool = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any,
<ls_header> TYPE any,
<field> TYPE any.
create_channel_objects( ).
TRY.
CREATE DATA lr_data TYPE (mv_data_structure_name).
ASSIGN lr_data->* TO <ls_data>.
CATCH cx_root.
zcx_abapgit_exception=>raise( |{ ms_item-obj_type } not supported| ).
ENDTRY.
get_data(
IMPORTING
p_data = <ls_data> ).
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'CHANGED_ON' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_AT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CHANGED_CLNT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_AT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
ASSIGN COMPONENT 'CREATED_CLNT' OF STRUCTURE <ls_header> TO <field>.
ASSERT sy-subrc = 0.
CLEAR <field>.
io_xml->add( iv_name = ms_item-obj_type
ig_data = <ls_data> ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lr_data TYPE REF TO data.
FIELD-SYMBOLS: <ls_data> TYPE any.
FIELD-SYMBOLS: <lg_data> TYPE any.
create_channel_objects( ).
TRY.
CREATE DATA lr_data TYPE (mv_data_structure_name).
ASSIGN lr_data->* TO <ls_data>.
ASSIGN lr_data->* TO <lg_data>.
CATCH cx_root.
zcx_abapgit_exception=>raise( |{ ms_item-obj_type } not supported| ).
@ -200,7 +245,7 @@ CLASS zcl_abapgit_objects_saxx_super IMPLEMENTATION.
EXPORTING
iv_name = ms_item-obj_type
CHANGING
cg_data = <ls_data> ).
cg_data = <lg_data> ).
IF zif_abapgit_object~exists( ) = abap_true.
zif_abapgit_object~delete( ).
@ -227,7 +272,7 @@ CLASS zcl_abapgit_objects_saxx_super IMPLEMENTATION.
zcx_abapgit_exception=>raise( |Error occured while creating { ms_item-obj_type }| ).
ENDIF.
mo_appl_obj_data->set_data( <ls_data> ).
mo_appl_obj_data->set_data( <lg_data> ).
mo_persistence->save( mo_appl_obj_data ).
@ -239,27 +284,41 @@ CLASS zcl_abapgit_objects_saxx_super IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: object_key TYPE seu_objkey.
METHOD zif_abapgit_object~exists.
DATA: lv_object_key TYPE seu_objkey.
create_channel_objects( ).
object_key = ms_item-obj_name.
lv_object_key = ms_item-obj_name.
TRY.
lock( ).
mo_persistence->get( p_object_key = lv_object_key
p_version = 'A'
p_existence_check_only = abap_true ).
mo_persistence->delete( object_key ).
unlock( ).
CATCH cx_swb_exception.
zcx_abapgit_exception=>raise( |Error occured while deleting { ms_item-obj_type }| ).
CATCH cx_swb_object_does_not_exist cx_swb_exception.
rv_bool = abap_false.
RETURN.
ENDTRY.
rv_bool = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
rs_metadata-delete_tadir = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
@ -270,109 +329,66 @@ CLASS zcl_abapgit_objects_saxx_super IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD create_channel_objects.
METHOD zif_abapgit_object~serialize.
get_names( ).
DATA: lr_data TYPE REF TO data.
FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_header> TYPE any,
<lg_field> TYPE any.
create_channel_objects( ).
TRY.
IF mo_appl_obj_data IS NOT BOUND.
CREATE OBJECT mo_appl_obj_data TYPE (mv_appl_obj_cls_name).
ENDIF.
IF mo_persistence IS NOT BOUND.
CREATE OBJECT mo_persistence TYPE (mv_persistence_cls_name).
ENDIF.
CREATE DATA lr_data TYPE (mv_data_structure_name).
ASSIGN lr_data->* TO <lg_data>.
CATCH cx_root.
zcx_abapgit_exception=>raise( |{ ms_item-obj_type } not supported| ).
ENDTRY.
ENDMETHOD.
METHOD get_data.
DATA: object_key TYPE seu_objkey.
object_key = ms_item-obj_name.
TRY.
mo_persistence->get(
EXPORTING
p_object_key = object_key
p_version = 'A'
CHANGING
p_object_data = mo_appl_obj_data ).
CATCH cx_root.
zcx_abapgit_exception=>raise( |{ ms_item-obj_type } not supported| ).
ENDTRY.
mo_appl_obj_data->get_data(
get_data(
IMPORTING
p_data = p_data ).
p_data = <lg_data> ).
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <lg_data> TO <lg_header>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'CHANGED_ON' OF STRUCTURE <lg_header> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <lg_header> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CHANGED_AT' OF STRUCTURE <lg_header> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CHANGED_CLNT' OF STRUCTURE <lg_header> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE <lg_header> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <lg_header> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CREATED_AT' OF STRUCTURE <lg_header> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lg_field>.
ASSIGN COMPONENT 'CREATED_CLNT' OF STRUCTURE <lg_header> TO <lg_field>.
ASSERT sy-subrc = 0.
CLEAR <lg_field>.
io_xml->add( iv_name = ms_item-obj_type
ig_data = <lg_data> ).
ENDMETHOD.
METHOD lock.
DATA: objname TYPE trobj_name,
object_key TYPE seu_objkey,
objtype TYPE trobjtype.
objname = ms_item-obj_name.
object_key = ms_item-obj_name.
objtype = ms_item-obj_type.
mo_persistence->lock(
EXPORTING
p_objname_tr = objname
p_object_key = object_key
p_objtype_tr = objtype
EXCEPTIONS
foreign_lock = 1
error_occurred = 2
OTHERS = 3 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error occured while locking { ms_item-obj_type } | && objname ).
ENDIF.
ENDMETHOD. "lock
METHOD unlock.
DATA: objname TYPE trobj_name,
object_key TYPE seu_objkey,
objtype TYPE trobjtype.
objname = ms_item-obj_name.
object_key = ms_item-obj_name.
objtype = ms_item-obj_type.
mo_persistence->unlock( p_objname_tr = objname
p_object_key = object_key
p_objtype_tr = objtype ).
ENDMETHOD. "unlock
METHOD get_names.
IF mv_data_structure_name IS INITIAL.
mv_data_structure_name = get_data_structure_name( ).
ENDIF.
IF mv_appl_obj_cls_name IS INITIAL.
mv_appl_obj_cls_name = get_data_class_name( ).
ENDIF.
IF mv_persistence_cls_name IS INITIAL.
mv_persistence_cls_name = get_persistence_class_name( ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -132,15 +132,15 @@ CLASS ZCL_ABAPGIT_OBJECTS_SUPER IMPLEMENTATION.
METHOD is_adt_jump_possible.
DATA: li_wb_request TYPE REF TO cl_wb_request,
li_adt_uri_mapper_vit TYPE REF TO object,
is_vit_wb_request TYPE abap_bool.
DATA: lo_wb_request TYPE REF TO cl_wb_request,
lo_adt_uri_mapper_vit TYPE REF TO object,
lv_vit_wb_request TYPE abap_bool.
cl_wb_request=>create_from_object_ref(
EXPORTING
p_wb_object = io_object
RECEIVING
p_wb_request = li_wb_request
p_wb_request = lo_wb_request
EXCEPTIONS
illegal_operation = 1
cancelled = 2
@ -153,15 +153,15 @@ CLASS ZCL_ABAPGIT_OBJECTS_SUPER IMPLEMENTATION.
TRY.
CALL METHOD io_adt->('IF_ADT_TOOLS_CORE_FACTORY~GET_URI_MAPPER_VIT')
RECEIVING
result = li_adt_uri_mapper_vit.
result = lo_adt_uri_mapper_vit.
CALL METHOD li_adt_uri_mapper_vit->('IF_ADT_URI_MAPPER_VIT~IS_VIT_WB_REQUEST')
CALL METHOD lo_adt_uri_mapper_vit->('IF_ADT_URI_MAPPER_VIT~IS_VIT_WB_REQUEST')
EXPORTING
wb_request = li_wb_request
wb_request = lo_wb_request
RECEIVING
result = is_vit_wb_request.
result = lv_vit_wb_request.
IF is_vit_wb_request = abap_true.
IF lv_vit_wb_request = abap_true.
r_is_adt_jump_possible = abap_false.
ELSE.
r_is_adt_jump_possible = abap_true.
@ -176,52 +176,58 @@ CLASS ZCL_ABAPGIT_OBJECTS_SUPER IMPLEMENTATION.
METHOD jump_adt.
DATA: adt_link TYPE string,
obj_type TYPE trobjtype,
obj_name TYPE trobj_name,
li_object TYPE REF TO cl_wb_object,
li_adt TYPE REF TO object,
li_adt_uri_mapper TYPE REF TO object,
li_adt_objref TYPE REF TO object ##needed.
DATA: lv_adt_link TYPE string,
lv_obj_type TYPE trobjtype,
lv_obj_name TYPE trobj_name,
lo_object TYPE REF TO cl_wb_object,
lo_adt TYPE REF TO object,
lo_adt_uri_mapper TYPE REF TO object,
lo_adt_objref TYPE REF TO object ##needed.
FIELD-SYMBOLS: <uri> TYPE string.
FIELD-SYMBOLS: <lv_uri> TYPE string.
obj_name = i_obj_name.
obj_type = i_obj_type.
lv_obj_name = i_obj_name.
lv_obj_type = i_obj_type.
TRY.
cl_wb_object=>create_from_transport_key( EXPORTING p_object = obj_type p_obj_name = obj_name
RECEIVING p_wb_object = li_object
EXCEPTIONS OTHERS = 1 ).
cl_wb_object=>create_from_transport_key(
EXPORTING
p_object = lv_obj_type
p_obj_name = lv_obj_name
RECEIVING
p_wb_object = lo_object
EXCEPTIONS
OTHERS = 1 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'ADT Jump Error' ).
ENDIF.
CALL METHOD ('CL_ADT_TOOLS_CORE_FACTORY')=>('GET_INSTANCE')
RECEIVING
result = li_adt.
result = lo_adt.
IF is_adt_jump_possible( io_object = li_object
io_adt = li_adt ) = abap_false.
IF is_adt_jump_possible( io_object = lo_object
io_adt = lo_adt ) = abap_false.
zcx_abapgit_exception=>raise( 'ADT Jump Error' ).
ENDIF.
CALL METHOD li_adt->('IF_ADT_TOOLS_CORE_FACTORY~GET_URI_MAPPER')
CALL METHOD lo_adt->('IF_ADT_TOOLS_CORE_FACTORY~GET_URI_MAPPER')
RECEIVING
result = li_adt_uri_mapper.
result = lo_adt_uri_mapper.
CALL METHOD li_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_WB_OBJECT_TO_OBJREF')
CALL METHOD lo_adt_uri_mapper->('IF_ADT_URI_MAPPER~MAP_WB_OBJECT_TO_OBJREF')
EXPORTING
wb_object = li_object
wb_object = lo_object
RECEIVING
result = li_adt_objref.
result = lo_adt_objref.
ASSIGN ('li_adt_objref->ref_data-uri') TO <uri>.
ASSIGN ('li_adt_objref->ref_data-uri') TO <lv_uri>.
ASSERT sy-subrc = 0.
CONCATENATE 'adt://' sy-sysid <uri> INTO adt_link.
CONCATENATE 'adt://' sy-sysid <lv_uri> INTO lv_adt_link.
cl_gui_frontend_services=>execute( EXPORTING document = adt_link
cl_gui_frontend_services=>execute( EXPORTING document = lv_adt_link
EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0.

View File

@ -63,7 +63,16 @@ CLASS zcl_abapgit_oo_class_new DEFINITION PUBLIC INHERITING FROM zcl_abapgit_oo_
ENDCLASS.
CLASS zcl_abapgit_oo_class_new IMPLEMENTATION.
CLASS ZCL_ABAPGIT_OO_CLASS_NEW IMPLEMENTATION.
METHOD create_report.
INSERT REPORT iv_program FROM it_source EXTENSION TYPE iv_extension STATE iv_version PROGRAM TYPE iv_program_type.
ASSERT sy-subrc = 0.
ENDMETHOD.
METHOD determine_method_include.
@ -109,30 +118,45 @@ CLASS zcl_abapgit_oo_class_new IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~create.
* same as in super class, but with "version = seoc_version_active"
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
METHOD generate_classpool.
DATA: ls_clskey TYPE seoclskey.
ls_clskey-clsname = iv_name.
CALL FUNCTION 'SEO_CLASS_GENERATE_CLASSPOOL'
EXPORTING
devclass = iv_package
overwrite = iv_overwrite
version = seoc_version_active
CHANGING
class = is_properties
clskey = ls_clskey
suppress_corr = seox_true
EXCEPTIONS
existing = 1
is_interface = 2
db_error = 3
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
not_existing = 1
model_only = 2
class_pool_not_generated = 3
class_stment_not_generated = 4
locals_not_generated = 5
macros_not_generated = 6
public_sec_not_generated = 7
protected_sec_not_generated = 8
private_sec_not_generated = 9
typeref_not_generated = 10
class_pool_not_initialised = 11
class_stment_not_initialised = 12
locals_not_initialised = 13
macros_not_initialised = 14
public_sec_not_initialised = 15
protected_sec_not_initialised = 16
private_sec_not_initialised = 17
typeref_not_initialised = 18
_internal_class_overflow = 19
OTHERS = 20.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ).
zcx_abapgit_exception=>raise( 'error from SEO_CLASS_GENERATE_CLASSPOOL' ).
ENDIF.
ENDMETHOD.
METHOD init_scanner.
TRY.
@ -146,50 +170,53 @@ CLASS zcl_abapgit_oo_class_new IMPLEMENTATION.
ENDMETHOD.
METHOD update_report.
DATA: lt_old TYPE string_table.
METHOD update_cs_number_of_methods.
READ REPORT iv_program INTO lt_old.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Fatal error. Include { iv_program } should have been created previously!| ).
ENDIF.
" Indirect access to keep downward compatibility
DATA lr_cache_entry TYPE REF TO data.
FIELD-SYMBOLS: <ls_cache_entry> TYPE any,
<field> TYPE any.
IF lt_old <> it_source.
INSERT REPORT iv_program FROM it_source.
ASSERT sy-subrc = 0.
rv_updated = abap_true.
ELSE.
rv_updated = abap_false.
ENDIF.
CREATE DATA lr_cache_entry TYPE ('SEO_CS_CACHE').
ASSIGN lr_cache_entry->* TO <ls_cache_entry>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'CLSNAME' OF STRUCTURE <ls_cache_entry>
TO <field>.
ASSERT sy-subrc = 0.
<field> = iv_classname.
ASSIGN COMPONENT 'NO_OF_METHOD_IMPLS' OF STRUCTURE <ls_cache_entry>
TO <field>.
ASSERT sy-subrc = 0.
<field> = iv_number_of_impl_methods.
MODIFY ('SEO_CS_CACHE') FROM <ls_cache_entry>.
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~generate_locals.
DATA: lv_program TYPE programm.
METHOD update_full_class_include.
CONSTANTS: lc_class_source_extension TYPE sychar02 VALUE 'CS',
lc_include_program_type TYPE sychar01 VALUE 'I',
lc_active_version TYPE r3state VALUE 'A'.
lv_program = cl_oo_classname_service=>get_ccdef_name( is_key-clsname ).
update_report( iv_program = lv_program
it_source = it_local_definitions ).
create_report( iv_program = cl_oo_classname_service=>get_cs_name( iv_classname )
it_source = it_source
iv_extension = lc_class_source_extension
iv_program_type = lc_include_program_type
iv_version = lc_active_version ).
lv_program = cl_oo_classname_service=>get_ccimp_name( is_key-clsname ).
update_report( iv_program = lv_program
it_source = it_local_implementations ).
lv_program = cl_oo_classname_service=>get_ccmac_name( is_key-clsname ).
update_report( iv_program = lv_program
it_source = it_local_macros ).
IF lines( it_local_test_classes ) > 0.
lv_program = cl_oo_classname_service=>get_ccau_name( is_key-clsname ).
update_report( iv_program = lv_program
it_source = it_local_test_classes ).
ENDIF.
" Assuming that all methods that were scanned are implemented
update_cs_number_of_methods( iv_classname = iv_classname
iv_number_of_impl_methods = lines( it_methods ) ).
ENDMETHOD.
METHOD update_meta.
DATA: lo_update TYPE REF TO cl_oo_class_section_source,
@ -242,43 +269,52 @@ CLASS zcl_abapgit_oo_class_new IMPLEMENTATION.
ENDMETHOD.
METHOD generate_classpool.
DATA: ls_clskey TYPE seoclskey.
METHOD update_report.
ls_clskey-clsname = iv_name.
DATA: lt_old TYPE string_table.
CALL FUNCTION 'SEO_CLASS_GENERATE_CLASSPOOL'
EXPORTING
clskey = ls_clskey
suppress_corr = seox_true
EXCEPTIONS
not_existing = 1
model_only = 2
class_pool_not_generated = 3
class_stment_not_generated = 4
locals_not_generated = 5
macros_not_generated = 6
public_sec_not_generated = 7
protected_sec_not_generated = 8
private_sec_not_generated = 9
typeref_not_generated = 10
class_pool_not_initialised = 11
class_stment_not_initialised = 12
locals_not_initialised = 13
macros_not_initialised = 14
public_sec_not_initialised = 15
protected_sec_not_initialised = 16
private_sec_not_initialised = 17
typeref_not_initialised = 18
_internal_class_overflow = 19
OTHERS = 20.
READ REPORT iv_program INTO lt_old.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from SEO_CLASS_GENERATE_CLASSPOOL' ).
zcx_abapgit_exception=>raise( |Fatal error. Include { iv_program } should have been created previously!| ).
ENDIF.
IF lt_old <> it_source.
INSERT REPORT iv_program FROM it_source.
ASSERT sy-subrc = 0.
rv_updated = abap_true.
ELSE.
rv_updated = abap_false.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~create.
* same as in super class, but with "version = seoc_version_active"
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
EXPORTING
devclass = iv_package
overwrite = iv_overwrite
version = seoc_version_active
CHANGING
class = is_properties
EXCEPTIONS
existing = 1
is_interface = 2
db_error = 3
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_oo_object_fnc~deserialize_source.
DATA: lv_updated TYPE abap_bool,
@ -356,51 +392,29 @@ CLASS zcl_abapgit_oo_class_new IMPLEMENTATION.
ENDMETHOD.
METHOD update_full_class_include.
CONSTANTS c_class_source_extension TYPE sychar02 VALUE 'CS'.
CONSTANTS c_include_program_type TYPE sychar01 VALUE 'I'.
CONSTANTS c_active_version TYPE r3state VALUE 'A'.
create_report( iv_program = cl_oo_classname_service=>get_cs_name( iv_classname )
it_source = it_source
iv_extension = c_class_source_extension
iv_program_type = c_include_program_type
iv_version = c_active_version ).
METHOD zif_abapgit_oo_object_fnc~generate_locals.
" Assuming that all methods that were scanned are implemented
update_cs_number_of_methods( iv_classname = iv_classname
iv_number_of_impl_methods = lines( it_methods ) ).
DATA: lv_program TYPE programm.
lv_program = cl_oo_classname_service=>get_ccdef_name( is_key-clsname ).
update_report( iv_program = lv_program
it_source = it_local_definitions ).
lv_program = cl_oo_classname_service=>get_ccimp_name( is_key-clsname ).
update_report( iv_program = lv_program
it_source = it_local_implementations ).
lv_program = cl_oo_classname_service=>get_ccmac_name( is_key-clsname ).
update_report( iv_program = lv_program
it_source = it_local_macros ).
IF lines( it_local_test_classes ) > 0.
lv_program = cl_oo_classname_service=>get_ccau_name( is_key-clsname ).
update_report( iv_program = lv_program
it_source = it_local_test_classes ).
ENDIF.
ENDMETHOD.
METHOD create_report.
INSERT REPORT iv_program FROM it_source EXTENSION TYPE iv_extension STATE iv_version PROGRAM TYPE iv_program_type.
ASSERT sy-subrc = 0.
ENDMETHOD.
METHOD update_cs_number_of_methods.
" Indirect access to keep downward compatibility
DATA lr_cache_entry TYPE REF TO data.
FIELD-SYMBOLS: <ls_cache_entry> TYPE any,
<field> TYPE any.
CREATE DATA lr_cache_entry TYPE ('SEO_CS_CACHE').
ASSIGN lr_cache_entry->* TO <ls_cache_entry>.
ASSERT sy-subrc = 0.
ASSIGN COMPONENT 'CLSNAME' OF STRUCTURE <ls_cache_entry>
TO <field>.
ASSERT sy-subrc = 0.
<field> = iv_classname.
ASSIGN COMPONENT 'NO_OF_METHOD_IMPLS' OF STRUCTURE <ls_cache_entry>
TO <field>.
ASSERT sy-subrc = 0.
<field> = iv_number_of_impl_methods.
MODIFY ('SEO_CS_CACHE') FROM <ls_cache_entry>.
ENDMETHOD.
ENDCLASS.

View File

@ -129,26 +129,26 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION.
METHOD migrate_settings.
DATA: lr_settings TYPE REF TO zcl_abapgit_settings.
DATA: lr_persist_settings TYPE REF TO zcl_abapgit_persist_settings.
DATA: lv_critical_tests_as_string TYPE string.
DATA: lv_critical_tests_as_boolean TYPE abap_bool.
DATA: lv_max_lines_as_string TYPE string.
DATA: lv_flag TYPE abap_bool.
DATA: lv_max_lines_as_integer TYPE i.
DATA: lv_s_param_value TYPE string.
DATA: lv_i_param_value TYPE i.
DATA: lv_adt_jump_enabled_as_string TYPE string.
DATA: lv_adt_jump_enabled_as_boolean TYPE abap_bool.
DATA: lo_settings TYPE REF TO zcl_abapgit_settings,
lo_persist_settings TYPE REF TO zcl_abapgit_persist_settings,
lv_critical_tests_as_string TYPE string,
lv_critical_tests_as_boolean TYPE abap_bool,
lv_max_lines_as_string TYPE string,
lv_flag TYPE abap_bool,
lv_max_lines_as_integer TYPE i,
lv_s_param_value TYPE string,
lv_i_param_value TYPE i,
lv_adt_jump_enabled_as_string TYPE string,
lv_adt_jump_enabled_as_boolean TYPE abap_bool.
lr_persist_settings = zcl_abapgit_persist_settings=>get_instance( ).
lo_persist_settings = zcl_abapgit_persist_settings=>get_instance( ).
CREATE OBJECT lr_settings.
lr_settings->set_defaults( ).
CREATE OBJECT lo_settings.
lo_settings->set_defaults( ).
TRY.
lr_settings->set_proxy_url(
lo_settings->set_proxy_url(
zcl_abapgit_persistence_db=>get_instance( )->read(
iv_type = 'SETTINGS'
iv_value = 'PROXY_URL' ) ).
@ -156,7 +156,7 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION.
ENDTRY.
TRY.
lr_settings->set_proxy_port(
lo_settings->set_proxy_port(
zcl_abapgit_persistence_db=>get_instance( )->read(
iv_type = 'SETTINGS'
iv_value = 'PROXY_PORT' ) ).
@ -167,7 +167,7 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION.
lv_flag = zcl_abapgit_persistence_db=>get_instance( )->read(
iv_type = 'SETTINGS'
iv_value = 'PROXY_AUTH' ).
lr_settings->set_proxy_authentication( lv_flag ).
lo_settings->set_proxy_authentication( lv_flag ).
CATCH zcx_abapgit_not_found.
ENDTRY.
@ -176,7 +176,7 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION.
iv_type = 'SETTINGS'
iv_value = 'CRIT_TESTS' ).
lv_critical_tests_as_boolean = lv_critical_tests_as_string.
lr_settings->set_run_critical_tests( lv_critical_tests_as_boolean ).
lo_settings->set_run_critical_tests( lv_critical_tests_as_boolean ).
CATCH zcx_abapgit_not_found.
ENDTRY.
@ -185,7 +185,7 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION.
iv_type = 'SETTINGS'
iv_value = 'MAX_LINES' ).
lv_max_lines_as_integer = lv_max_lines_as_string.
lr_settings->set_max_lines( lv_max_lines_as_integer ).
lo_settings->set_max_lines( lv_max_lines_as_integer ).
CATCH zcx_abapgit_not_found cx_sy_conversion_no_number.
ENDTRY.
@ -194,7 +194,7 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION.
iv_type = 'SETTINGS'
iv_value = 'ADT_JUMP' ).
lv_adt_jump_enabled_as_boolean = lv_adt_jump_enabled_as_string.
lr_settings->set_adt_jump_enanbled( lv_adt_jump_enabled_as_boolean ).
lo_settings->set_adt_jump_enanbled( lv_adt_jump_enabled_as_boolean ).
CATCH zcx_abapgit_not_found.
ENDTRY.
@ -203,7 +203,7 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION.
iv_type = 'SETTINGS'
iv_value = 'COMMENT_LEN' ).
lv_i_param_value = lv_s_param_value.
lr_settings->set_commitmsg_comment_length( lv_i_param_value ).
lo_settings->set_commitmsg_comment_length( lv_i_param_value ).
CATCH zcx_abapgit_not_found cx_sy_conversion_no_number.
ENDTRY.
@ -212,11 +212,11 @@ CLASS ZCL_ABAPGIT_PERSIST_MIGRATE IMPLEMENTATION.
iv_type = 'SETTINGS'
iv_value = 'BODY_SIZE' ).
lv_i_param_value = lv_s_param_value.
lr_settings->set_commitmsg_body_size( lv_i_param_value ).
lo_settings->set_commitmsg_body_size( lv_i_param_value ).
CATCH zcx_abapgit_not_found cx_sy_conversion_no_number.
ENDTRY.
lr_persist_settings->modify( lr_settings ).
lo_persist_settings->modify( lo_settings ).
TRY.
zcl_abapgit_persistence_db=>get_instance( )->delete(

View File

@ -38,17 +38,19 @@ CLASS ZCL_ABAPGIT_PERSIST_SETTINGS IMPLEMENTATION.
METHOD modify.
DATA: settings TYPE string.
settings = io_settings->get_settings_xml( ).
DATA: lv_settings TYPE string.
lv_settings = io_settings->get_settings_xml( ).
zcl_abapgit_persistence_db=>get_instance( )->modify(
iv_type = zcl_abapgit_persistence_db=>c_type_settings
iv_value = ''
iv_data = settings ).
iv_data = lv_settings ).
" Settings have been modified: Update Buffered Settings
IF mo_settings IS BOUND.
mo_settings->set_xml_settings( settings ).
mo_settings->set_xml_settings( lv_settings ).
ENDIF.
ENDMETHOD.

View File

@ -64,11 +64,11 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
METHOD do_test.
DATA: lt_matches_act TYPE zcl_abapgit_syntax_highlighter=>ty_match_tt,
lo TYPE REF TO zcl_abapgit_syntax_highlighter.
lo_syntax TYPE REF TO zcl_abapgit_syntax_highlighter.
lo = zcl_abapgit_syntax_highlighter=>create( iv_filename ).
lo->parse_line( EXPORTING iv_line = iv_line
lo_syntax = zcl_abapgit_syntax_highlighter=>create( iv_filename ).
lo_syntax->parse_line( EXPORTING iv_line = iv_line
IMPORTING et_matches = lt_matches_act ).
SORT lt_matches_act BY offset.
@ -77,15 +77,18 @@ CLASS ltcl_syntax_cases IMPLEMENTATION.
act = lt_matches_act
msg = | Error during parsing: { iv_line }| ).
lo->order_matches( EXPORTING iv_line = iv_line
lo_syntax->order_matches( EXPORTING iv_line = iv_line
CHANGING ct_matches = lt_matches_act ).
cl_abap_unit_assert=>assert_equals( exp = mt_after_order
act = lt_matches_act
msg = | Error during ordering: { iv_line }| ).
lo->extend_matches( EXPORTING iv_line = iv_line
CHANGING ct_matches = lt_matches_act ).
lo_syntax->extend_matches(
EXPORTING
iv_line = iv_line
CHANGING
ct_matches = lt_matches_act ).
cl_abap_unit_assert=>assert_equals( exp = mt_after_extend
act = lt_matches_act

View File

@ -66,17 +66,17 @@ CLASS ZCL_ABAPGIT_GUI_ASSET_MANAGER IMPLEMENTATION.
METHOD get_images.
FIELD-SYMBOLS <image> LIKE LINE OF rt_images.
FIELD-SYMBOLS <ls_image> LIKE LINE OF rt_images.
rt_images = get_inline_images( ).
" Convert to xstring
LOOP AT rt_images ASSIGNING <image>.
LOOP AT rt_images ASSIGNING <ls_image>.
CALL FUNCTION 'SSFC_BASE64_DECODE'
EXPORTING
b64data = <image>-base64
b64data = <ls_image>-base64
IMPORTING
bindata = <image>-content
bindata = <ls_image>-content
EXCEPTIONS
OTHERS = 1.
ASSERT sy-subrc = 0. " Image data error

View File

@ -99,7 +99,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
DATA: lv_system TYPE string.
FIELD-SYMBOLS <state> TYPE char1.
FIELD-SYMBOLS <lv_state> TYPE char1.
rv_html = '<span class="state-block">'.
@ -107,14 +107,14 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
DO 2 TIMES.
CASE sy-index.
WHEN 1.
ASSIGN iv1 TO <state>.
ASSIGN iv1 TO <lv_state>.
lv_system = 'Local:'.
WHEN 2.
ASSIGN iv2 TO <state>.
ASSIGN iv2 TO <lv_state>.
lv_system = 'Remote:'.
ENDCASE.
CASE <state>.
CASE <lv_state>.
WHEN zif_abapgit_definitions=>gc_state-unchanged. "None or unchanged
IF iv1 = zif_abapgit_definitions=>gc_state-added OR iv2 = zif_abapgit_definitions=>gc_state-added.
rv_html = rv_html && |<span class="none" title="{ lv_system } Not exists">X</span>|.
@ -153,7 +153,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
lv_display TYPE string,
lt_log TYPE zcl_abapgit_news=>tt_log.
FIELD-SYMBOLS: <line> LIKE LINE OF lt_log.
FIELD-SYMBOLS: <ls_line> LIKE LINE OF lt_log.
CREATE OBJECT ro_html.
@ -187,18 +187,18 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
" Generate news
ro_html->add( |<div class="newslist">| ).
LOOP AT lt_log ASSIGNING <line>.
IF <line>-is_header = abap_true.
IF <line>-pos_to_cur > 0.
lv_text = <line>-text && '<span class="version-marker update">update</span>'.
ELSEIF <line>-pos_to_cur = 0.
lv_text = <line>-text && '<span class="version-marker">current</span>'.
LOOP AT lt_log ASSIGNING <ls_line>.
IF <ls_line>-is_header = abap_true.
IF <ls_line>-pos_to_cur > 0.
lv_text = <ls_line>-text && '<span class="version-marker update">update</span>'.
ELSEIF <ls_line>-pos_to_cur = 0.
lv_text = <ls_line>-text && '<span class="version-marker">current</span>'.
ELSE. " < 0
lv_text = <line>-text.
lv_text = <ls_line>-text.
ENDIF.
ro_html->add( |<h1>{ lv_text }</h1>| ).
ELSE.
ro_html->add( |<li>{ <line>-text }</li>| ).
ro_html->add( |<li>{ <ls_line>-text }</li>| ).
ENDIF.
ENDLOOP.
ro_html->add( '</div>' ).

View File

@ -62,7 +62,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BOVERVIEW IMPLEMENTATION.
METHOD body.
DATA: tag TYPE string.
DATA: lv_tag TYPE string.
FIELD-SYMBOLS: <ls_commit> LIKE LINE OF mt_commits,
<ls_create> LIKE LINE OF <ls_commit>-create.
@ -126,13 +126,13 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BOVERVIEW IMPLEMENTATION.
" Therefore we concatenate them.
" https://github.com/nicoespeon/gitgraph.js/issues/143
tag = concat_lines_of( table = <ls_commit>-tags
sep = ` | ` ).
lv_tag = concat_lines_of( table = <ls_commit>-tags
sep = ` | ` ).
ro_html->add( |{ escape_branch( <ls_commit>-branch ) }.commit(\{message: "{
escape_message( <ls_commit>-message ) }", author: "{
<ls_commit>-author }", sha1: "{
<ls_commit>-sha1(7) }", tag: "{ tag }"\});| ).
<ls_commit>-sha1(7) }", tag: "{ lv_tag }"\});| ).
ELSE.
ro_html->add( |{ escape_branch( <ls_commit>-merge ) }.merge({
escape_branch( <ls_commit>-branch ) }, \{message: "{

View File

@ -29,17 +29,19 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB IMPLEMENTATION.
METHOD explain_content.
DATA: lv_result TYPE match_result,
lv_match TYPE submatch_result,
DATA: ls_result TYPE match_result,
ls_match TYPE submatch_result,
lv_cnt TYPE i.
CASE is_data-type.
WHEN 'REPO'.
FIND FIRST OCCURRENCE OF REGEX '<url>(.*)</url>'
IN is_data-data_str IGNORING CASE RESULTS lv_result.
READ TABLE lv_result-submatches INTO lv_match INDEX 1.
IN is_data-data_str IGNORING CASE RESULTS ls_result.
READ TABLE ls_result-submatches INTO ls_match INDEX 1.
IF sy-subrc IS INITIAL.
rv_text = is_data-data_str+lv_match-offset(lv_match-length).
rv_text = is_data-data_str+ls_match-offset(ls_match-length).
ENDIF.
FIND FIRST OCCURRENCE OF REGEX '<OFFLINE/>'
@ -53,12 +55,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB IMPLEMENTATION.
WHEN 'BACKGROUND'.
FIND FIRST OCCURRENCE OF REGEX '<method>(.*)</method>'
IN is_data-data_str IGNORING CASE RESULTS lv_result.
READ TABLE lv_result-submatches INTO lv_match INDEX 1.
IN is_data-data_str IGNORING CASE RESULTS ls_result.
READ TABLE ls_result-submatches INTO ls_match INDEX 1.
IF sy-subrc IS NOT INITIAL.
RETURN.
ENDIF.
rv_text = |Method: { is_data-data_str+lv_match-offset(lv_match-length) }, |
rv_text = |Method: { is_data-data_str+ls_match-offset(ls_match-length) }, |
&& |Repository: { zcl_abapgit_repo_srv=>get_instance( )->get( is_data-value )->get_name( ) }|.
WHEN 'USER'.

View File

@ -76,7 +76,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DEBUGINFO IMPLEMENTATION.
lv_list TYPE string,
ls_item TYPE zif_abapgit_definitions=>ty_item.
FIELD-SYMBOLS <object> LIKE LINE OF lt_objects.
FIELD-SYMBOLS <ls_object> LIKE LINE OF lt_objects.
CALL FUNCTION 'TR_OBJECT_TABLE'
TABLES
@ -84,8 +84,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DEBUGINFO IMPLEMENTATION.
EXCEPTIONS
OTHERS = 1 ##FM_SUBRC_OK.
LOOP AT lt_objects ASSIGNING <object> WHERE pgmid = 'R3TR'.
ls_item-obj_type = <object>-object.
LOOP AT lt_objects ASSIGNING <ls_object> WHERE pgmid = 'R3TR'.
ls_item-obj_type = <ls_object>-object.
IF zcl_abapgit_objects=>is_supported( is_item = ls_item iv_native_only = abap_true ) = abap_true.
IF lv_list IS INITIAL.
lv_list = ls_item-obj_type.

View File

@ -180,13 +180,13 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
lt_types TYPE string_table,
lt_users TYPE string_table.
FIELD-SYMBOLS: <diff> LIKE LINE OF mt_diff_files,
<i> TYPE string.
FIELD-SYMBOLS: <ls_diff> LIKE LINE OF mt_diff_files,
<lv_i> TYPE string.
" Get unique
LOOP AT mt_diff_files ASSIGNING <diff>.
APPEND <diff>-type TO lt_types.
APPEND <diff>-changed_by TO lt_users.
LOOP AT mt_diff_files ASSIGNING <ls_diff>.
APPEND <ls_diff>-type TO lt_types.
APPEND <ls_diff>-changed_by TO lt_users.
ENDLOOP.
SORT: lt_types, lt_users.
@ -207,8 +207,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
" File types
IF lines( lt_types ) > 1.
lo_sub->add( iv_txt = 'TYPE' iv_typ = zif_abapgit_definitions=>gc_action_type-separator ).
LOOP AT lt_types ASSIGNING <i>.
lo_sub->add( iv_txt = <i>
LOOP AT lt_types ASSIGNING <lv_i>.
lo_sub->add( iv_txt = <lv_i>
iv_typ = zif_abapgit_definitions=>gc_action_type-onclick
iv_aux = 'type'
iv_chk = abap_true ).
@ -218,8 +218,8 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
" Changed by
IF lines( lt_users ) > 1.
lo_sub->add( iv_txt = 'CHANGED BY' iv_typ = zif_abapgit_definitions=>gc_action_type-separator ).
LOOP AT lt_users ASSIGNING <i>.
lo_sub->add( iv_txt = <i>
LOOP AT lt_users ASSIGNING <lv_i>.
lo_sub->add( iv_txt = <lv_i>
iv_typ = zif_abapgit_definitions=>gc_action_type-onclick
iv_aux = 'changed-by'
iv_chk = abap_true ).
@ -306,15 +306,16 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
lv_idx TYPE i,
lv_x TYPE x.
FIELD-SYMBOLS <data> LIKE iv_d1.
FIELD-SYMBOLS <lv_data> LIKE iv_d1.
IF iv_d1 IS NOT INITIAL. " One of them might be new and so empty
ASSIGN iv_d1 TO <data>.
ASSIGN iv_d1 TO <lv_data>.
ELSE.
ASSIGN iv_d2 TO <data>.
ASSIGN iv_d2 TO <lv_data>.
ENDIF.
lv_len = xstrlen( <data> ).
lv_len = xstrlen( <lv_data> ).
IF lv_len = 0.
RETURN.
ENDIF.
@ -327,7 +328,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
" stackoverflow.com/questions/277521/how-to-identify-the-file-content-as-ascii-or-binary
DO lv_len TIMES. " I'm sure there is more efficient way ...
lv_idx = sy-index - 1.
lv_x = <data>+lv_idx(1).
lv_x = <lv_data>+lv_idx(1).
IF NOT ( lv_x BETWEEN 9 AND 13 OR lv_x BETWEEN 32 AND 126 ).
rv_yes = abap_true.
@ -563,24 +564,24 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
METHOD render_line_unified.
FIELD-SYMBOLS <diff_line> LIKE LINE OF mt_delayed_lines.
FIELD-SYMBOLS <ls_diff_line> LIKE LINE OF mt_delayed_lines.
CREATE OBJECT ro_html.
" Release delayed subsequent update lines
IF is_diff_line-result <> zif_abapgit_definitions=>c_diff-update.
LOOP AT mt_delayed_lines ASSIGNING <diff_line>.
LOOP AT mt_delayed_lines ASSIGNING <ls_diff_line>.
ro_html->add( '<tr>' ). "#EC NOTEXT
ro_html->add( |<td class="num" line-num="{ <diff_line>-old_num }"></td>|
ro_html->add( |<td class="num" line-num="{ <ls_diff_line>-old_num }"></td>|
&& |<td class="num" line-num=""></td>|
&& |<td class="code diff_del">-{ <diff_line>-old }</td>| ).
&& |<td class="code diff_del">-{ <ls_diff_line>-old }</td>| ).
ro_html->add( '</tr>' ). "#EC NOTEXT
ENDLOOP.
LOOP AT mt_delayed_lines ASSIGNING <diff_line>.
LOOP AT mt_delayed_lines ASSIGNING <ls_diff_line>.
ro_html->add( '<tr>' ). "#EC NOTEXT
ro_html->add( |<td class="num" line-num=""></td>|
&& |<td class="num" line-num="{ <diff_line>-new_num }"></td>|
&& |<td class="code diff_ins">+{ <diff_line>-new }</td>| ).
&& |<td class="num" line-num="{ <ls_diff_line>-new_num }"></td>|
&& |<td class="code diff_ins">+{ <ls_diff_line>-new }</td>| ).
ro_html->add( '</tr>' ). "#EC NOTEXT
ENDLOOP.
CLEAR mt_delayed_lines.

View File

@ -125,7 +125,7 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
DATA ls_field LIKE LINE OF ct.
FIELD-SYMBOLS <src> TYPE any.
FIELD-SYMBOLS <lg_src> TYPE any.
ls_field-name = name.
@ -133,9 +133,9 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
WHEN cl_abap_typedescr=>kind_elem.
ls_field-value = iv.
WHEN cl_abap_typedescr=>kind_struct.
ASSIGN COMPONENT name OF STRUCTURE iv TO <src>.
ASSERT <src> IS ASSIGNED.
ls_field-value = <src>.
ASSIGN COMPONENT name OF STRUCTURE iv TO <lg_src>.
ASSERT <lg_src> IS ASSIGNED.
ls_field-value = <lg_src>.
WHEN OTHERS.
ASSERT 0 = 1.
ENDCASE.
@ -232,13 +232,13 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
METHOD field_keys_to_upper.
FIELD-SYMBOLS <field> LIKE LINE OF ct_fields.
FIELD-SYMBOLS <ls_field> LIKE LINE OF ct_fields.
LOOP AT ct_fields ASSIGNING <field>.
<field>-name = to_upper( <field>-name ).
LOOP AT ct_fields ASSIGNING <ls_field>.
<ls_field>-name = to_upper( <ls_field>-name ).
ENDLOOP.
ENDMETHOD. "field_keys_to_upper
ENDMETHOD.
METHOD file_encode.
@ -282,7 +282,7 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
METHOD get_field.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF it,
<dest> TYPE any.
<lg_dest> TYPE any.
READ TABLE it ASSIGNING <ls_field> WITH KEY name = name.
@ -294,9 +294,9 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
WHEN cl_abap_typedescr=>kind_elem.
cv = <ls_field>-value.
WHEN cl_abap_typedescr=>kind_struct.
ASSIGN COMPONENT name OF STRUCTURE cv TO <dest>.
ASSERT <dest> IS ASSIGNED.
<dest> = <ls_field>-value.
ASSIGN COMPONENT name OF STRUCTURE cv TO <lg_dest>.
ASSERT <lg_dest> IS ASSIGNED.
<lg_dest> = <ls_field>-value.
WHEN OTHERS.
ASSERT 0 = 1.
ENDCASE.
@ -350,7 +350,7 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
DATA: lv_string TYPE string,
lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS <body> TYPE string.
FIELD-SYMBOLS <lv_body> TYPE string.
CLEAR es_fields.
@ -366,35 +366,36 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
get_field( EXPORTING name = 'COMMENT' it = lt_fields CHANGING cv = es_fields ).
get_field( EXPORTING name = 'BODY' it = lt_fields CHANGING cv = es_fields ).
ASSIGN COMPONENT 'BODY' OF STRUCTURE es_fields TO <body>.
ASSERT <body> IS ASSIGNED.
REPLACE ALL OCCURRENCES OF lc_replace IN <body> WITH zif_abapgit_definitions=>gc_newline.
ASSIGN COMPONENT 'BODY' OF STRUCTURE es_fields TO <lv_body>.
ASSERT <lv_body> IS ASSIGNED.
REPLACE ALL OCCURRENCES OF lc_replace IN <lv_body> WITH zif_abapgit_definitions=>gc_newline.
ENDMETHOD. "parse_commit_request
METHOD parse_fields.
DATA: substrings TYPE stringtab,
field LIKE LINE OF rt_fields.
DATA: lt_substrings TYPE stringtab,
ls_field LIKE LINE OF rt_fields.
FIELD-SYMBOLS: <substring> LIKE LINE OF substrings.
FIELD-SYMBOLS: <lv_substring> LIKE LINE OF lt_substrings.
SPLIT iv_string AT '&' INTO TABLE substrings.
LOOP AT substrings ASSIGNING <substring>.
SPLIT iv_string AT '&' INTO TABLE lt_substrings.
CLEAR: field.
LOOP AT lt_substrings ASSIGNING <lv_substring>.
field-name = substring_before( val = <substring>
CLEAR: ls_field.
ls_field-name = substring_before( val = <lv_substring>
sub = '=' ).
field-name = unescape( field-name ).
ls_field-name = unescape( ls_field-name ).
field-value = substring_after( val = <substring>
ls_field-value = substring_after( val = <lv_substring>
sub = '=' ).
field-value = unescape( field-value ).
ls_field-value = unescape( ls_field-value ).
INSERT field INTO TABLE rt_fields.
INSERT ls_field INTO TABLE rt_fields.
ENDLOOP.

View File

@ -163,29 +163,30 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
METHOD parse_fields_german_umlauts.
DATA: ae TYPE string,
oe TYPE string,
ue TYPE string,
ae_oe_ue TYPE string.
DATA: lv_ae TYPE string,
lv_oe TYPE string,
lv_ue TYPE string,
lv_ae_oe_ue TYPE string.
ae = ms_german_umlaut_as_char-lower_case_ae.
oe = ms_german_umlaut_as_char-lower_case_oe.
ue = ms_german_umlaut_as_char-lower_case_ue.
ae_oe_ue = ae && oe && ue.
lv_ae = ms_german_umlaut_as_char-lower_case_ae.
lv_oe = ms_german_umlaut_as_char-lower_case_oe.
lv_ue = ms_german_umlaut_as_char-lower_case_ue.
_given_string_is( |committer_name=Christian G{ ue }nter&|
lv_ae_oe_ue = lv_ae && lv_oe && lv_ue.
_given_string_is( |committer_name=Christian G{ lv_ue }nter&|
&& |committer_email=guenne@googlemail.com&|
&& |comment={ ae_oe_ue }&|
&& |body=Message body<<new>><<new>>with line break<<new>>and umlauts. { ae_oe_ue }&|
&& |author_name=Gerd Schr{ oe }der&|
&& |comment={ lv_ae_oe_ue }&|
&& |body=Message body<<new>><<new>>with line break<<new>>and umlauts. { lv_ae_oe_ue }&|
&& |author_name=Gerd Schr{ lv_oe }der&|
&& |author_email=gerd@schroeder.com| ).
_when_fields_are_parsed( ).
_then_fields_should_be( index = 1
name = `COMMITTER_NAME`
value = |Christian G{ ue }nter| ).
value = |Christian G{ lv_ue }nter| ).
_then_fields_should_be( index = 2
name = `COMMITTER_EMAIL`
@ -193,15 +194,15 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
_then_fields_should_be( index = 3
name = `COMMENT`
value = ae_oe_ue ).
value = lv_ae_oe_ue ).
_then_fields_should_be( index = 4
name = `BODY`
value = |Message body<<new>><<new>>with line break<<new>>and umlauts. { ae_oe_ue }| ).
value = |Message body<<new>><<new>>with line break<<new>>and umlauts. { lv_ae_oe_ue }| ).
_then_fields_should_be( index = 5
name = `AUTHOR_NAME`
value = |Gerd Schr{ oe }der| ).
value = |Gerd Schr{ lv_oe }der| ).
_then_fields_should_be( index = 6
name = `AUTHOR_EMAIL`
@ -223,19 +224,19 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
METHOD _then_fields_should_be.
FIELD-SYMBOLS: <parsed_field> LIKE LINE OF mt_parsed_fields.
FIELD-SYMBOLS: <ls_parsed_field> LIKE LINE OF mt_parsed_fields.
READ TABLE mt_parsed_fields ASSIGNING <parsed_field>
READ TABLE mt_parsed_fields ASSIGNING <ls_parsed_field>
INDEX index.
cl_abap_unit_assert=>assert_subrc( exp = 0
msg = |No parsed field found at index { index }| ).
cl_abap_unit_assert=>assert_equals( act = <parsed_field>-name
cl_abap_unit_assert=>assert_equals( act = <ls_parsed_field>-name
exp = name
msg = |Name at index { index } should be { name }| ).
cl_abap_unit_assert=>assert_equals( act = <parsed_field>-value
cl_abap_unit_assert=>assert_equals( act = <ls_parsed_field>-value
exp = value
msg = |Value at index { index } should be { value }| ).
@ -243,10 +244,10 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
METHOD _hex_to_char.
DATA lr_conv TYPE REF TO cl_abap_conv_in_ce.
DATA lo_conv TYPE REF TO cl_abap_conv_in_ce.
lr_conv = cl_abap_conv_in_ce=>create( ).
lr_conv->convert( EXPORTING input = i_x IMPORTING data = r_s ).
lo_conv = cl_abap_conv_in_ce=>create( ).
lo_conv->convert( EXPORTING input = i_x IMPORTING data = r_s ).
ENDMETHOD.

View File

@ -378,12 +378,12 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION.
DATA: lr_struct TYPE REF TO data,
lt_components TYPE cl_abap_structdescr=>component_table,
lo_struct_descr TYPE REF TO cl_abap_structdescr,
struct_descr TYPE REF TO cl_abap_structdescr.
struct_descr TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS: <table> TYPE STANDARD TABLE,
FIELD-SYMBOLS: <lt_table> TYPE STANDARD TABLE,
<component> TYPE abap_componentdescr,
<line> TYPE data,
<data> TYPE any.
<lg_data> TYPE any.
mo_table_descr ?= cl_abap_tabledescr=>describe_by_data( it_list ).
lo_struct_descr ?= mo_table_descr->get_table_line_type( ).
@ -399,18 +399,18 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION.
mo_table_descr = cl_abap_tabledescr=>create( struct_descr ).
CREATE DATA mr_table TYPE HANDLE mo_table_descr.
ASSIGN mr_table->* TO <table>.
ASSIGN mr_table->* TO <lt_table>.
ASSERT sy-subrc = 0.
CREATE DATA lr_struct TYPE HANDLE struct_descr.
ASSIGN lr_struct->* TO <line>.
ASSERT sy-subrc = 0.
LOOP AT it_list ASSIGNING <data>.
LOOP AT it_list ASSIGNING <lg_data>.
CLEAR: <line>.
MOVE-CORRESPONDING <data> TO <line>.
INSERT <line> INTO TABLE <table>.
MOVE-CORRESPONDING <lg_data> TO <line>.
INSERT <line> INTO TABLE <lt_table>.
ENDLOOP.
@ -971,17 +971,18 @@ CLASS ZCL_ABAPGIT_POPUPS IMPLEMENTATION.
METHOD popup_to_select_transports.
DATA: lrs_trfunction TYPE trsel_trs_function,
lv_types TYPE string,
ls_ranges TYPE trsel_ts_ranges.
DATA: ls_trfunction TYPE trsel_trs_function,
lv_types TYPE string,
ls_ranges TYPE trsel_ts_ranges.
" Fill all request types
lv_types = 'KWTCOEMPDRSXQFG'.
lrs_trfunction-sign = 'I'.
lrs_trfunction-option = 'EQ'.
ls_trfunction-sign = 'I'.
ls_trfunction-option = 'EQ'.
WHILE lv_types <> space.
lrs_trfunction-low = lv_types(1).
APPEND lrs_trfunction TO ls_ranges-request_funcs.
ls_trfunction-low = lv_types(1).
APPEND ls_trfunction TO ls_ranges-request_funcs.
SHIFT lv_types.
ENDWHILE.

View File

@ -206,7 +206,7 @@ CLASS ZCL_ABAPGIT_BACKGROUND IMPLEMENTATION.
METHOD run.
CONSTANTS: c_enq_type TYPE c LENGTH 12 VALUE 'BACKGROUND'.
CONSTANTS: lc_enq_type TYPE c LENGTH 12 VALUE 'BACKGROUND'.
DATA: lo_per TYPE REF TO zcl_abapgit_persist_background,
lo_repo TYPE REF TO zcl_abapgit_repo_online,
@ -219,7 +219,7 @@ CLASS ZCL_ABAPGIT_BACKGROUND IMPLEMENTATION.
CALL FUNCTION 'ENQUEUE_EZABAPGIT'
EXPORTING
mode_zabapgit = 'E'
type = c_enq_type
type = lc_enq_type
_scope = '3'
EXCEPTIONS
foreign_lock = 1
@ -262,7 +262,7 @@ CLASS ZCL_ABAPGIT_BACKGROUND IMPLEMENTATION.
CALL FUNCTION 'DEQUEUE_EZABAPGIT'
EXPORTING
type = c_enq_type.
type = lc_enq_type.
ENDMETHOD.
ENDCLASS.

View File

@ -2,39 +2,39 @@ CLASS ltcl_file_status DEFINITION DEFERRED.
CLASS zcl_abapgit_file_status DEFINITION LOCAL FRIENDS ltcl_file_status.
DEFINE _append_state.
APPEND INITIAL LINE TO lt_state ASSIGNING <state>.
<state>-path = '/'.
<state>-filename = &1.
<state>-sha1 = &2.
APPEND INITIAL LINE TO lt_state ASSIGNING <ls_state>.
<ls_state>-path = '/'.
<ls_state>-filename = &1.
<ls_state>-sha1 = &2.
END-OF-DEFINITION.
DEFINE _append_local.
APPEND INITIAL LINE TO lt_local ASSIGNING <local>.
<local>-item-obj_type = &1.
<local>-item-obj_name = &2.
<local>-item-devclass = '$Z$'.
<local>-file-path = '/'.
<local>-file-filename = &3.
<local>-file-sha1 = &4.
APPEND INITIAL LINE TO lt_local ASSIGNING <ls_local>.
<ls_local>-item-obj_type = &1.
<ls_local>-item-obj_name = &2.
<ls_local>-item-devclass = '$Z$'.
<ls_local>-file-path = '/'.
<ls_local>-file-filename = &3.
<ls_local>-file-sha1 = &4.
END-OF-DEFINITION.
DEFINE _append_remote.
APPEND INITIAL LINE TO lt_remote ASSIGNING <remote>.
<remote>-path = '/'.
<remote>-filename = &1.
<remote>-sha1 = &2.
APPEND INITIAL LINE TO lt_remote ASSIGNING <ls_remote>.
<ls_remote>-path = '/'.
<ls_remote>-filename = &1.
<ls_remote>-sha1 = &2.
END-OF-DEFINITION.
DEFINE _append_result.
APPEND INITIAL LINE TO lt_results ASSIGNING <result>.
<result>-obj_type = &1.
<result>-obj_name = &2.
<result>-match = &3.
<result>-lstate = &4.
<result>-rstate = &5.
<result>-package = &6.
<result>-path = &7.
<result>-filename = &8.
APPEND INITIAL LINE TO lt_results ASSIGNING <ls_result>.
<ls_result>-obj_type = &1.
<ls_result>-obj_name = &2.
<ls_result>-match = &3.
<ls_result>-lstate = &4.
<ls_result>-rstate = &5.
<ls_result>-package = &6.
<ls_result>-path = &7.
<ls_result>-filename = &8.
END-OF-DEFINITION.
CLASS ltcl_file_status DEFINITION FOR TESTING RISK LEVEL HARMLESS
@ -58,10 +58,10 @@ CLASS ltcl_file_status IMPLEMENTATION.
lt_results_exp TYPE zif_abapgit_definitions=>ty_results_tt,
lo_dot TYPE REF TO zcl_abapgit_dot_abapgit.
FIELD-SYMBOLS: <local> LIKE LINE OF lt_local,
<remote> LIKE LINE OF lt_remote,
<result> LIKE LINE OF lt_results,
<state> LIKE LINE OF lt_state.
FIELD-SYMBOLS: <ls_local> LIKE LINE OF lt_local,
<ls_remote> LIKE LINE OF lt_remote,
<ls_result> LIKE LINE OF lt_results,
<ls_state> LIKE LINE OF lt_state.
"STATE FILE SHA1
_append_state '$$zclass1.clas.xml' 'C1_F1'.
@ -164,7 +164,7 @@ CLASS ltcl_file_status2 IMPLEMENTATION.
DATA: lt_results TYPE zif_abapgit_definitions=>ty_results_tt,
lo_log TYPE REF TO zcl_abapgit_log.
FIELD-SYMBOLS: <result> LIKE LINE OF lt_results.
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results.
*** 0 Positive

View File

@ -87,26 +87,27 @@ CLASS ZCL_ABAPGIT_MIGRATIONS IMPLEMENTATION.
lv_index TYPE i,
lo_repo TYPE REF TO zcl_abapgit_repo_online.
FIELD-SYMBOLS: <repo> LIKE LINE OF lt_repos.
FIELD-SYMBOLS: <lo_repo> LIKE LINE OF lt_repos.
lt_repos = zcl_abapgit_repo_srv=>get_instance( )->list( ).
LOOP AT lt_repos ASSIGNING <repo>.
LOOP AT lt_repos ASSIGNING <lo_repo>.
lv_index = sy-tabix.
IF <repo>->is_offline( ) = abap_true. " Skip local repos
IF <lo_repo>->is_offline( ) = abap_true. " Skip local repos
DELETE lt_repos INDEX lv_index.
CONTINUE.
ENDIF.
" Ignore empty repos or repos with file checksums
IF lines( <repo>->get_local_checksums( ) ) = 0
OR lines( <repo>->get_local_checksums_per_file( ) ) > 0.
IF lines( <lo_repo>->get_local_checksums( ) ) = 0
OR lines( <lo_repo>->get_local_checksums_per_file( ) ) > 0.
DELETE lt_repos INDEX lv_index.
CONTINUE.
ENDIF.
lv_repo_list = lv_repo_list && `, ` && <repo>->get_name( ).
lv_repo_list = lv_repo_list && `, ` && <lo_repo>->get_name( ).
ENDLOOP.
@ -138,8 +139,8 @@ CLASS ZCL_ABAPGIT_MIGRATIONS IMPLEMENTATION.
RETURN.
ENDIF.
LOOP AT lt_repos ASSIGNING <repo>.
lo_repo ?= <repo>.
LOOP AT lt_repos ASSIGNING <lo_repo>.
lo_repo ?= <lo_repo>.
lo_repo->rebuild_local_checksums( ).
ENDLOOP.

View File

@ -138,7 +138,7 @@ CLASS ZCL_ABAPGIT_NEWS IMPLEMENTATION.
lv_url TYPE string,
lo_repo_online TYPE REF TO zcl_abapgit_repo_online.
FIELD-SYMBOLS <file> LIKE LINE OF lt_remote.
FIELD-SYMBOLS <ls_file> LIKE LINE OF lt_remote.
IF io_repo->is_offline( ) = abap_true.
@ -162,13 +162,13 @@ CLASS ZCL_ABAPGIT_NEWS IMPLEMENTATION.
RETURN.
ENDTRY.
READ TABLE lt_remote ASSIGNING <file>
READ TABLE lt_remote ASSIGNING <ls_file>
WITH KEY path = lc_log_path filename = lc_log_filename.
IF sy-subrc = 0.
CREATE OBJECT ro_instance
EXPORTING
iv_rawdata = <file>-data
iv_rawdata = <ls_file>-data
iv_current_version = zif_abapgit_definitions=>gc_abap_version " TODO refactor
iv_lastseen_version = normalize_version( lv_last_seen ).
ENDIF.
@ -235,10 +235,11 @@ CLASS ZCL_ABAPGIT_NEWS IMPLEMENTATION.
lv_version TYPE string,
ls_log LIKE LINE OF rt_log.
FIELD-SYMBOLS: <line> LIKE LINE OF it_lines.
FIELD-SYMBOLS: <lv_line> LIKE LINE OF it_lines.
LOOP AT it_lines ASSIGNING <line>.
ls_log = parse_line( iv_line = <line> iv_current_version = iv_current_version ).
LOOP AT it_lines ASSIGNING <lv_line>.
ls_log = parse_line( iv_line = <lv_line> iv_current_version = iv_current_version ).
" Skip until first version head and Skip empty lines
CHECK ls_log IS NOT INITIAL AND

View File

@ -184,7 +184,7 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
DATA: ls_remote_file TYPE zif_abapgit_definitions=>ty_file,
lo_remote_version TYPE REF TO zcl_abapgit_xml_input,
lv_count TYPE i,
lo_comparison_result TYPE REF TO zif_abapgit_comparison_result.
li_comparison_result TYPE REF TO zif_abapgit_comparison_result.
FIND ALL OCCURRENCES OF '.' IN is_result-filename MATCH COUNT lv_count.
@ -201,10 +201,10 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
CREATE OBJECT lo_remote_version
EXPORTING
iv_xml = zcl_abapgit_convert=>xstring_to_string_utf8( ls_remote_file-data ).
lo_comparison_result = io_object->compare_to_remote_version( lo_remote_version ).
lo_comparison_result->show_confirmation_dialog( ).
li_comparison_result = io_object->compare_to_remote_version( lo_remote_version ).
li_comparison_result->show_confirmation_dialog( ).
IF lo_comparison_result->is_result_complete_halt( ) = abap_true.
IF li_comparison_result->is_result_complete_halt( ) = abap_true.
zcx_abapgit_exception=>raise( 'Deserialization aborted by user' ).
ENDIF.
ENDIF.

View File

@ -133,7 +133,7 @@ CLASS ZCL_ABAPGIT_SAP_PACKAGE IMPLEMENTATION.
object_not_changeable = 2
object_invalid = 3
intern_err = 4
others = 5 ).
OTHERS = 5 ).
zcx_abapgit_exception=>raise( lv_err ).

View File

@ -137,14 +137,15 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION.
METHOD get_settings_xml.
DATA: lr_output TYPE REF TO zcl_abapgit_xml_output.
DATA: lo_output TYPE REF TO zcl_abapgit_xml_output.
CREATE OBJECT lr_output.
lr_output->add( iv_name = zcl_abapgit_persistence_db=>c_type_settings
CREATE OBJECT lo_output.
lo_output->add( iv_name = zcl_abapgit_persistence_db=>c_type_settings
ig_data = ms_settings ).
ev_settings_xml = lr_output->render( ).
ev_settings_xml = lo_output->render( ).
ENDMETHOD.
@ -211,14 +212,18 @@ CLASS ZCL_ABAPGIT_SETTINGS IMPLEMENTATION.
METHOD set_xml_settings.
DATA: lr_input TYPE REF TO zcl_abapgit_xml_input.
DATA: lo_input TYPE REF TO zcl_abapgit_xml_input.
CREATE OBJECT lr_input EXPORTING iv_xml = iv_settings_xml.
CREATE OBJECT lo_input EXPORTING iv_xml = iv_settings_xml.
CLEAR ms_settings.
lr_input->read( EXPORTING iv_name = zcl_abapgit_persistence_db=>c_type_settings
CHANGING cg_data = ms_settings ).
lo_input->read(
EXPORTING
iv_name = zcl_abapgit_persistence_db=>c_type_settings
CHANGING
cg_data = ms_settings ).
ENDMETHOD.
ENDCLASS.

View File

@ -24,16 +24,19 @@ CLASS ZCL_ABAPGIT_SKIP_OBJECTS IMPLEMENTATION.
METHOD has_sadl_superclass.
DATA: lo_oo_functions TYPE REF TO zif_abapgit_oo_object_fnc,
DATA: li_oo_functions TYPE REF TO zif_abapgit_oo_object_fnc,
lv_class_name TYPE seoclsname,
lv_superclass TYPE seoclsname.
lo_oo_functions = zcl_abapgit_oo_factory=>make( is_class-object ).
li_oo_functions = zcl_abapgit_oo_factory=>make( is_class-object ).
lv_class_name = is_class-obj_name.
lv_superclass = lo_oo_functions->read_superclass( lv_class_name ).
lv_superclass = li_oo_functions->read_superclass( lv_class_name ).
IF lv_superclass = 'CL_SADL_GTK_EXPOSURE_MPC'.
rv_return = abap_true.
ENDIF.
ENDMETHOD.

View File

@ -335,13 +335,14 @@ CLASS ltcl_transport_objects IMPLEMENTATION.
ENDMETHOD.
METHOD then_it_should_raise_exception.
DATA: lo_exception TYPE REF TO zcx_abapgit_exception.
DATA: lx_exception TYPE REF TO zcx_abapgit_exception.
TRY.
when_staging( ).
cl_abap_unit_assert=>fail( 'Should have raised exception').
CATCH zcx_abapgit_exception INTO lo_exception.
CATCH zcx_abapgit_exception INTO lx_exception.
cl_abap_unit_assert=>assert_equals(
act = lo_exception->text
act = lx_exception->text
exp = with_text ).
ENDTRY.
ENDMETHOD.

View File

@ -180,21 +180,21 @@ CLASS ZCL_ABAPGIT_ZLIB IMPLEMENTATION.
APPEND 16 TO lt_order.
APPEND 17 TO lt_order.
APPEND 18 TO lt_order.
APPEND 0 TO lt_order.
APPEND 8 TO lt_order.
APPEND 7 TO lt_order.
APPEND 9 TO lt_order.
APPEND 6 TO lt_order.
APPEND 0 TO lt_order.
APPEND 8 TO lt_order.
APPEND 7 TO lt_order.
APPEND 9 TO lt_order.
APPEND 6 TO lt_order.
APPEND 10 TO lt_order.
APPEND 5 TO lt_order.
APPEND 5 TO lt_order.
APPEND 11 TO lt_order.
APPEND 4 TO lt_order.
APPEND 4 TO lt_order.
APPEND 12 TO lt_order.
APPEND 3 TO lt_order.
APPEND 3 TO lt_order.
APPEND 13 TO lt_order.
APPEND 2 TO lt_order.
APPEND 2 TO lt_order.
APPEND 14 TO lt_order.
APPEND 1 TO lt_order.
APPEND 1 TO lt_order.
APPEND 15 TO lt_order.
lv_nlen = go_stream->take_int( 5 ) + 257.