Merge branch 'main' into newObjectTypeCOTA

This commit is contained in:
Ben9ka 2025-02-05 11:59:10 +01:00 committed by GitHub
commit bc9bb8f983
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
112 changed files with 1728 additions and 714 deletions

View File

@ -8,6 +8,27 @@ Legend
+ : added
- : removed
2025-01-01 v1.131.0
-------------------
! Remove need to `parallel_generators` server group (#7119)
+ VIEW: save `tddat` entries to transport (#7042)
+ Support for HTTP Destination (#7100)
+ Enhance logging with message id and number (#7111)
* Fix language conversion for language A (#7076)
* longtexts: workaround strange object names dump (#7077)
* SRVB: Clear fields and fix deserialize order (#7085)
* MSAG: Fix error handling during deletion (#7093)
* Fix error handling in exception viewer (#7095)
* Fix dark theme CSS whitespace (#7104)
* MSAG: Fix deletion of message longtexts (#7109)
* Fix RFC error handling (#7102)
* IDOC/IEXT: Fix deserialize in background (#7113)
* USCA: Fix missing transport entry (#7110)
* FUGS: Fix activation error (#7115)
* Limit number of GUI sessions (#7080)
* Fix dump when converting `xstring` to `bintab` (#7120)
2024-11-04 v1.130.0
-------------------

4
deps/tcdrs.tabl.xml vendored
View File

@ -14,9 +14,9 @@
<FIELDNAME>TABNAME</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<INTLEN>000060</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<LENG>000030</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>

View File

@ -23,14 +23,14 @@
]
},
"devDependencies": {
"@abaplint/cli": "^2.113.31",
"@abaplint/cli": "^2.113.82",
"@abaplint/database-sqlite": "^2.10.20",
"@abaplint/runtime": "^2.10.20",
"express": "^4.21.1",
"@abaplint/transpiler-cli": "^2.10.20",
"globals": "^15.11.0",
"@abaplint/runtime": "^2.10.23",
"express": "^4.21.2",
"@abaplint/transpiler-cli": "^2.10.23",
"globals": "^15.13.0",
"abapmerge": "^0.16.6",
"c8": "^10.1.2",
"eslint": "^9.13.0"
"c8": "^10.1.3",
"eslint": "^9.17.0"
}
}

View File

@ -178,7 +178,7 @@ CLASS zcl_abapgit_apack_migration IMPLEMENTATION.
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
OTHERS = 7 ##FM_SUBRC_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
EXPORTING

View File

@ -623,7 +623,7 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
ev_object = ls_list-object
ev_obj_name = ls_list-obj_name ).
INSERT ls_list INTO TABLE rt_list.
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDCASE.
ENDLOOP.

View File

@ -5,7 +5,7 @@
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_DEFAULT_TRANSPORT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>ZIF_ABAPGIT_DEFAULT_TRANSPORT</DESCRIPT>
<DESCRIPT>abapGit - Default Transport</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>

View File

@ -49,7 +49,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
CLASS zcl_abapgit_data_utils IMPLEMENTATION.
METHOD build_config_filename.
@ -196,7 +196,7 @@ CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
db_not_exists = 3
no_permission = 4
no_change_allowed = 5
table_is_gtt = 6
* table_is_gtt = 6 " not in lower releases
OTHERS = 7.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Table { is_item-obj_name } cannot be displayed| ).

View File

@ -26,6 +26,8 @@ CLASS lcl_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~get_basis_release.
ENDMETHOD.
METHOD zif_abapgit_environment~get_available_user_sessions.
ENDMETHOD.
METHOD zif_abapgit_environment~get_system_language_filter.
ENDMETHOD.
METHOD zif_abapgit_environment~is_merged.
@ -40,6 +42,8 @@ CLASS lcl_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~init_parallel_processing.
ENDMETHOD.
METHOD zif_abapgit_environment~check_parallel_processing.
ENDMETHOD.
ENDCLASS.
@ -77,10 +81,12 @@ CLASS ltcl_abap_language_version DEFINITION FOR TESTING RISK LEVEL HARMLESS
PRIVATE SECTION.
" Cloud package hardcoded in cl_abap_language_version
CONSTANTS c_cloud_package TYPE devclass VALUE 'TEST_LANGUAGE_VERSION_SCP'.
CONSTANTS c_language_cfg TYPE seoclsname VALUE 'CL_ABAP_LANGUAGE_VERSION_CFG'.
DATA:
mt_versions TYPE string_table,
mv_has_cloud_package TYPE abap_bool,
mv_has_language_cfg TYPE abap_bool,
mo_environment TYPE REF TO lcl_environment,
mi_persistency TYPE REF TO zif_abapgit_persist_settings,
mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit,
@ -364,9 +370,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
" Assume on-prem (no cloud)
set_environment( abap_false ).
IF mv_has_language_cfg = abap_true.
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
exp = iv_standard ).
ENDIF.
IF mv_has_cloud_package = abap_true.
cl_abap_unit_assert=>assert_equals(
@ -381,9 +389,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
" Assume cloud platform
set_environment( abap_true ).
IF mv_has_language_cfg = abap_true.
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
exp = iv_standard ).
ENDIF.
IF mv_has_cloud_package = abap_true.
cl_abap_unit_assert=>assert_equals(
@ -401,6 +411,19 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
METHOD is_import_allowed.
DATA lv_version TYPE string.
DATA ls_clskey TYPE seoclskey.
ls_clskey-clsname = c_language_cfg.
" Tests using ABAP language version "standard" only work if the required
" SAP class is available. In older releases, all packages will have
" ABAP language version "undefined" and are handled like a new package
CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK'
EXPORTING
clskey = ls_clskey
EXCEPTIONS
OTHERS = 1.
mv_has_language_cfg = boolc( sy-subrc = 0 ).
LOOP AT mt_versions INTO lv_version.

View File

@ -2,11 +2,11 @@ CLASS zcl_abapgit_environment DEFINITION
PUBLIC
FINAL
CREATE PRIVATE
GLOBAL FRIENDS zcl_abapgit_factory .
GLOBAL FRIENDS zcl_abapgit_factory.
PUBLIC SECTION.
INTERFACES zif_abapgit_environment .
INTERFACES zif_abapgit_environment.
PROTECTED SECTION.
PRIVATE SECTION.
@ -16,7 +16,7 @@ CLASS zcl_abapgit_environment DEFINITION
METHODS is_system_changes_allowed
RETURNING
VALUE(rv_result) TYPE abap_bool .
VALUE(rv_result) TYPE abap_bool.
ENDCLASS.
@ -76,11 +76,74 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~check_parallel_processing.
" If check fails, see transactions RZ12
DATA:
lt_setup TYPE STANDARD TABLE OF rzllitab,
ls_setup LIKE LINE OF lt_setup,
lt_erfc_setup TYPE STANDARD TABLE OF rzlliclass,
lt_instances TYPE STANDARD TABLE OF msxxlist WITH DEFAULT KEY.
" Check if server group for parallel processing exists
CALL FUNCTION 'SMLG_GET_SETUP'
EXPORTING
grouptype = 'S'
TABLES
setup = lt_setup
erfc_setup = lt_erfc_setup
EXCEPTIONS
foreign_lock = 1
system_failure = 2
invalid_group_type = 3
OTHERS = 4.
IF sy-subrc <> 0.
RETURN.
ENDIF.
READ TABLE lt_setup INTO ls_setup WITH KEY classname = iv_group.
IF sy-subrc = 0 AND ls_setup-applserver IS NOT INITIAL.
" Check if assigned server instance exists
CALL FUNCTION 'TH_SERVER_LIST'
TABLES
list = lt_instances.
READ TABLE lt_instances TRANSPORTING NO FIELDS WITH KEY name = ls_setup-applserver.
IF sy-subrc = 0.
rv_checked = abap_true.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~compare_with_inactive.
rv_result = zif_abapgit_environment~is_sap_cloud_platform( ).
ENDMETHOD.
METHOD zif_abapgit_environment~get_available_user_sessions.
DATA:
lv_act_sessions TYPE i,
lv_max_sessions TYPE i,
lv_subrc TYPE sy-subrc.
CALL FUNCTION 'TH_USER_INFO'
IMPORTING
act_sessions = lv_act_sessions
max_sessions = lv_max_sessions
rc = lv_subrc.
IF lv_subrc = 0.
rv_sessions = lv_max_sessions - lv_act_sessions.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~get_basis_release.
SELECT SINGLE release extrelease FROM cvers INTO (rs_result-release, rs_result-sp)
@ -89,6 +152,78 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~get_system_language_filter.
DATA lv_translation_detective_lang TYPE spras.
DATA lv_pseudo_translation_language TYPE spras.
FIELD-SYMBOLS <ls_system_language_filter> LIKE LINE OF rt_system_language_filter.
" Translation Object Detective
" https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = '1Q'
IMPORTING
output = lv_translation_detective_lang
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc = 1.
" The language for Translation Object Detective was not setup
ENDIF.
IF NOT lv_translation_detective_lang IS INITIAL.
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-low = lv_translation_detective_lang.
ENDIF.
" 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments
" https://launchpad.support.sap.com/#/notes/1943470
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = '2Q'
IMPORTING
output = lv_pseudo_translation_language
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc = 1.
" The language for Pseudo Translation was not setup
ENDIF.
IF NOT lv_pseudo_translation_language IS INITIAL.
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-low = lv_pseudo_translation_language.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~init_parallel_processing.
DATA: lv_group TYPE rzlli_apcl.
lv_group = iv_group.
" SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called
" multiple times in same session
CALL FUNCTION 'SPBT_INITIALIZE'
EXPORTING
group_name = lv_group
IMPORTING
free_pbt_wps = rv_free_work_processes
EXCEPTIONS
invalid_group_name = 1
internal_error = 2
pbt_env_already_initialized = 3
currently_no_resources_avail = 4
no_pbt_resources_found = 5
cant_init_different_pbt_groups = 6
OTHERS = 7 ##FM_SUBRC_OK.
" If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC
ENDMETHOD.
METHOD zif_abapgit_environment~is_merged.
DATA lr_marker TYPE REF TO data ##NEEDED.
@ -155,50 +290,6 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~get_system_language_filter.
DATA lv_translation_detective_lang TYPE spras.
DATA lv_pseudo_translation_language TYPE spras.
FIELD-SYMBOLS <ls_system_language_filter> LIKE LINE OF rt_system_language_filter.
" Translation Object Detective
" https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = '1Q'
IMPORTING
output = lv_translation_detective_lang
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc = 1.
" The language for Translation Object Detective was not setup
ENDIF.
IF NOT lv_translation_detective_lang IS INITIAL.
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-low = lv_translation_detective_lang.
ENDIF.
" 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments
" https://launchpad.support.sap.com/#/notes/1943470
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = '2Q'
IMPORTING
output = lv_pseudo_translation_language
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc = 1.
" The language for Pseudo Translation was not setup
ENDIF.
IF NOT lv_pseudo_translation_language IS INITIAL.
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-low = lv_pseudo_translation_language.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~is_variant_maintenance.
@ -212,30 +303,4 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
rv_is_variant_maintenance = boolc( lines( lt_variscreens ) > 0 ).
ENDMETHOD.
METHOD zif_abapgit_environment~init_parallel_processing.
DATA: lv_group TYPE rzlli_apcl.
lv_group = iv_group.
" SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called
" multiple times in same session
CALL FUNCTION 'SPBT_INITIALIZE'
EXPORTING
group_name = lv_group
IMPORTING
free_pbt_wps = rv_free_work_processes
EXCEPTIONS
invalid_group_name = 1
internal_error = 2
pbt_env_already_initialized = 3
currently_no_resources_avail = 4
no_pbt_resources_found = 5
cant_init_different_pbt_groups = 6
OTHERS = 7.
" If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC
ENDMETHOD.
ENDCLASS.

View File

@ -39,5 +39,13 @@ INTERFACE zif_abapgit_environment
iv_group TYPE clike
RETURNING
VALUE(rv_free_work_processes) TYPE i.
METHODS check_parallel_processing
IMPORTING
iv_group TYPE clike
RETURNING
VALUE(rv_checked) TYPE abap_bool.
METHODS get_available_user_sessions
RETURNING
VALUE(rv_sessions) TYPE i.
ENDINTERFACE.

View File

@ -7,7 +7,7 @@ INTERFACE zif_abapgit_exit PUBLIC.
clone_url TYPE string,
END OF ty_ci_repo.
TYPES:
ty_ci_repos TYPE TABLE OF ty_ci_repo.
ty_ci_repos TYPE STANDARD TABLE OF ty_ci_repo WITH DEFAULT KEY.
TYPES:
ty_object_types TYPE STANDARD TABLE OF tadir-object WITH DEFAULT KEY.
TYPES:

View File

@ -50,7 +50,7 @@ CLASS zcl_abapgit_pr_enumerator IMPLEMENTATION.
mv_repo_url = to_lower( iv_url ).
TRY.
mi_enum_provider = create_provider( mv_repo_url ).
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDMETHOD.

View File

@ -124,7 +124,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_WHERE_USED_TOOLS IMPLEMENTATION.
CLASS zcl_abapgit_where_used_tools IMPLEMENTATION.
METHOD build_package_scope.
@ -311,7 +311,7 @@ CLASS ZCL_ABAPGIT_WHERE_USED_TOOLS IMPLEMENTATION.
not_enough_input = 1
no_function_pool = 2
delimiter_wrong_position = 3
OTHERS = 4.
OTHERS = 4 ##FM_SUBRC_OK.
IF lv_area IS INITIAL.
SELECT SINGLE master FROM d010inc INTO lv_program
@ -325,7 +325,7 @@ CLASS ZCL_ABAPGIT_WHERE_USED_TOOLS IMPLEMENTATION.
not_enough_input = 1
no_function_pool = 2
delimiter_wrong_position = 3
OTHERS = 4.
OTHERS = 4 ##FM_SUBRC_OK.
ENDIF.
IF lv_area IS NOT INITIAL.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_WHERE_USED_TOOLS</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit where used utilities</DESCRIPT>
<DESCRIPT>abapGit - Where-used Utilities</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -18,7 +18,7 @@ CLASS zcl_abapgit_json_handler DEFINITION
mappings TYPE ty_json_abap_mappings,
END OF ty_enum_mapping .
TYPES:
ty_enum_mappings TYPE TABLE OF ty_enum_mapping WITH DEFAULT KEY .
ty_enum_mappings TYPE STANDARD TABLE OF ty_enum_mapping WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_path_value_pair,
path TYPE string,

View File

@ -61,7 +61,7 @@ CLASS zcl_abapgit_dependencies IMPLEMENTATION.
INSERT ls_ddls_name INTO TABLE lt_ddls_name.
PERFORM ('DDLS_GET_DEP') IN PROGRAM ('RADMASDL')
TABLES lt_ddls_name rt_dependency.
TABLES lt_ddls_name rt_dependency ##PERF_NO_FORM.
ENDMETHOD.
@ -119,7 +119,7 @@ CLASS zcl_abapgit_dependencies IMPLEMENTATION.
" AUTH after DCLS
<ls_tadir>-korrnum = '715000'.
WHEN 'SUSH'.
" SUSH after SUSC
" SUSH after SUSC and SRVB
<ls_tadir>-korrnum = '712000'.
WHEN 'SUSC'.
" SUSC after SUSO
@ -130,6 +130,14 @@ CLASS zcl_abapgit_dependencies IMPLEMENTATION.
WHEN 'DCLS'.
" AUTH and SUSO after DCLS
<ls_tadir>-korrnum = '705000'.
WHEN 'G4BA' OR 'G4BS' OR 'IWMO' OR 'IWSV' OR 'IWVB'.
" after SRVB
<ls_tadir>-korrnum = '610000'.
WHEN 'SRVB'.
" after SRVD
<ls_tadir>-korrnum = '600500'.
WHEN 'SRVD'.
<ls_tadir>-korrnum = '600000'.
WHEN 'IASP'.
<ls_tadir>-korrnum = '552000'.
WHEN 'IARP'.

View File

@ -214,6 +214,9 @@ CLASS zcl_abapgit_file_deserialize IMPLEMENTATION.
DELETE lt_requires WHERE obj_type <> 'IASP'
AND obj_type <> 'PROG'
AND obj_type <> 'IARP'.
WHEN 'IDOC' OR 'IEXT'.
lt_requires = lt_items.
DELETE lt_requires WHERE obj_type <> 'TABL'.
WHEN 'DCLS'.
lt_requires = lt_items.
DELETE lt_requires WHERE obj_type <> 'DDLS'.
@ -245,6 +248,15 @@ CLASS zcl_abapgit_file_deserialize IMPLEMENTATION.
WHEN 'ENSC'.
lt_requires = lt_items.
DELETE lt_requires WHERE obj_type <> 'ENHS'.
WHEN 'IWMO' OR 'IWSV' OR 'IWVB'.
lt_requires = lt_items.
DELETE lt_requires WHERE obj_type <> 'SRVB'.
WHEN 'SUSH'.
lt_requires = lt_items.
DELETE lt_requires WHERE obj_type <> 'SRVB' AND obj_type <> 'HTTP'.
WHEN 'SRVB'.
lt_requires = lt_items.
DELETE lt_requires WHERE obj_type <> 'SRVD'.
ENDCASE.
* TODO: END extract to object handler method

View File

@ -310,7 +310,7 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION.
excecution_error = 1
cancelled = 2
insert_into_corr_error = 3
OTHERS = 4 ##SUBRC_OK.
OTHERS = 4 ##FM_SUBRC_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE'
EXPORTING
@ -324,7 +324,7 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION.
excecution_error = 1
cancelled = 2
insert_into_corr_error = 3
OTHERS = 4 ##SUBRC_OK.
OTHERS = 4 ##FM_SUBRC_OK.
ENDTRY.
CASE sy-subrc.
WHEN 1 OR 3 OR 4.
@ -398,9 +398,18 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION.
WHERE type = <ls_message>-show_req->object_type.
ENDIF.
LOOP AT <ls_message>-mtext ASSIGNING <lv_msg>.
IF sy-tabix = 1.
ii_log->add(
iv_type = 'E'
iv_msg = <lv_msg>
iv_class = <ls_message>-message-msgid
iv_number = <ls_message>-message-msgno
is_item = ls_item ).
ELSE.
ii_log->add_error(
iv_msg = <lv_msg>
is_item = ls_item ).
ENDIF.
ENDLOOP.
ENDLOOP.
@ -440,7 +449,9 @@ CLASS zcl_abapgit_objects_activation IMPLEMENTATION.
LOOP AT lt_lines ASSIGNING <ls_line>.
ii_log->add( iv_msg = <ls_line>-line
iv_type = <ls_line>-severity ).
iv_type = <ls_line>-severity
iv_class = <ls_line>-class
iv_number = |{ <ls_line>-number }| ).
ENDLOOP.
ii_log->add_info( |View complete activation log in program RSPUTPRT (type D, log name { iv_logname })| ).

View File

@ -99,6 +99,11 @@ CLASS zcl_abapgit_serialize DEFINITION
VALUE(ct_files) TYPE zif_abapgit_definitions=>ty_files_item_tt
RAISING
zcx_abapgit_exception .
METHODS determine_rfc_server_group
RETURNING
VALUE(rv_group) TYPE rzlli_apcl
RAISING
zcx_abapgit_exception.
METHODS determine_max_processes
IMPORTING
!iv_force_sequential TYPE abap_bool DEFAULT abap_false
@ -255,11 +260,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
METHOD constructor.
DATA li_exit TYPE REF TO zif_abapgit_exit.
mv_group = 'parallel_generators'.
li_exit = zcl_abapgit_exit=>get_instance( ).
li_exit->change_rfc_server_group( CHANGING cv_group = mv_group ).
mv_group = determine_rfc_server_group( ).
mo_dot_abapgit = io_dot_abapgit.
ms_local_settings = is_local_settings.
@ -280,6 +281,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
METHOD determine_max_processes.
DATA: li_exit TYPE REF TO zif_abapgit_exit.
DATA lv_available_sessions TYPE i.
IF iv_force_sequential = abap_true.
rv_processes = 1.
@ -319,6 +321,40 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
ASSERT rv_processes >= 1. " check exit above
" Avoid going over the maximum available user sessions
IF sy-batch IS INITIAL.
lv_available_sessions = zcl_abapgit_factory=>get_environment( )->get_available_user_sessions( ).
IF rv_processes > lv_available_sessions AND lv_available_sessions <> 0.
rv_processes = lv_available_sessions.
ENDIF.
ENDIF.
ASSERT rv_processes >= 1.
ENDMETHOD.
METHOD determine_rfc_server_group.
DATA:
li_exit TYPE REF TO zif_abapgit_exit,
lv_exists TYPE abap_bool.
" According to SAP Note 3215918 it's recommended NOT to use this group anymore.
" However, we keep it for compatibility. If it does not exist, we switch to the
" recommended DEFAULT behaviour.
rv_group = 'parallel_generators'.
li_exit = zcl_abapgit_exit=>get_instance( ).
li_exit->change_rfc_server_group( CHANGING cv_group = rv_group ).
" Check if RFC server group exists and fallback to the default
lv_exists = zcl_abapgit_factory=>get_environment( )->check_parallel_processing( rv_group ).
IF lv_exists = abap_false.
rv_group = ''.
ENDIF.
ENDMETHOD.
@ -432,7 +468,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
METHOD filter_unsupported_objects.
DATA: ls_unsupported_count TYPE ty_unsupported_count,
lt_supported_types TYPE zcl_abapgit_objects=>ty_types_tt,
lt_supported_types TYPE zif_abapgit_objects=>ty_types_tt,
lt_unsupported_count TYPE ty_unsupported_count_tt.
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF ct_tadir,
@ -483,7 +519,6 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
rv_result = boolc( zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false
AND zcl_abapgit_persist_factory=>get_settings( )->read( )->get_parallel_proc_disabled( ) = abap_false
AND mv_group IS NOT INITIAL
" The function module below should always exist here as is_merged evaluated to false above.
" It does however not exist in the transpiled version which then causes unit tests to fail.
" Therefore the check needs to stay.
@ -545,6 +580,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
DO.
lv_task = |{ iv_task }-{ sy-index }|.
" An initial server group is handled like DEFAULT meaning all instances are used
CALL FUNCTION 'Z_ABAPGIT_SERIALIZE_PARALLEL'
STARTING NEW TASK lv_task
DESTINATION IN GROUP mv_group

View File

@ -1,5 +1,6 @@
CLASS ltcl_determine_max_processes DEFINITION DEFERRED.
CLASS zcl_abapgit_serialize DEFINITION LOCAL FRIENDS ltcl_determine_max_processes.
CLASS ltcl_determine_server_group DEFINITION DEFERRED.
CLASS zcl_abapgit_serialize DEFINITION LOCAL FRIENDS ltcl_determine_max_processes ltcl_determine_server_group.
CLASS ltd_settings DEFINITION FINAL FOR TESTING
DURATION SHORT
@ -67,15 +68,23 @@ CLASS ltd_environment DEFINITION FINAL FOR TESTING
zif_abapgit_environment.
METHODS:
set_server_group
IMPORTING iv_group TYPE rzlli_apcl,
set_is_merged
IMPORTING iv_is_merged TYPE abap_bool,
set_available_sessions
IMPORTING iv_available_sessions TYPE i,
set_free_work_processes
IMPORTING iv_free_work_processes TYPE i.
PRIVATE SECTION.
DATA:
mv_group TYPE rzlli_apcl,
mv_is_merged TYPE abap_bool,
mv_available_sessions TYPE i,
mv_free_work_processes TYPE i.
ENDCLASS.
@ -89,6 +98,10 @@ CLASS ltd_environment IMPLEMENTATION.
METHOD zif_abapgit_environment~get_basis_release.
ENDMETHOD.
METHOD zif_abapgit_environment~get_available_user_sessions.
rv_sessions = mv_available_sessions.
ENDMETHOD.
METHOD zif_abapgit_environment~get_system_language_filter.
ENDMETHOD.
@ -115,12 +128,25 @@ CLASS ltd_environment IMPLEMENTATION.
rv_free_work_processes = mv_free_work_processes.
ENDMETHOD.
METHOD set_is_merged.
me->mv_is_merged = iv_is_merged.
METHOD zif_abapgit_environment~check_parallel_processing.
rv_checked = boolc( iv_group = mv_group ).
ENDMETHOD.
METHOD set_server_group.
mv_group = iv_group.
ENDMETHOD.
METHOD set_is_merged.
mv_is_merged = iv_is_merged.
ENDMETHOD.
METHOD set_available_sessions.
mv_available_sessions = iv_available_sessions.
ENDMETHOD.
METHOD set_free_work_processes.
me->mv_free_work_processes = iv_free_work_processes.
mv_free_work_processes = iv_free_work_processes.
ENDMETHOD.
ENDCLASS.
@ -134,12 +160,16 @@ CLASS ltd_exit DEFINITION FINAL FOR TESTING
zif_abapgit_exit.
METHODS:
set_server_group
IMPORTING iv_group TYPE rzlli_apcl,
set_max_parallel_processes
IMPORTING
iv_max_parallel_processes TYPE i.
PRIVATE SECTION.
DATA:
mv_group TYPE rzlli_apcl,
mv_max_parallel_processes TYPE i.
ENDCLASS.
@ -175,6 +205,9 @@ CLASS ltd_exit IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_exit~change_rfc_server_group.
IF mv_group IS NOT INITIAL.
cv_group = mv_group.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_exit~change_supported_data_objects.
@ -228,6 +261,10 @@ CLASS ltd_exit IMPLEMENTATION.
METHOD zif_abapgit_exit~wall_message_repo.
ENDMETHOD.
METHOD set_server_group.
mv_group = iv_group.
ENDMETHOD.
METHOD set_max_parallel_processes.
mv_max_parallel_processes = iv_max_parallel_processes.
ENDMETHOD.
@ -235,6 +272,110 @@ CLASS ltd_exit IMPLEMENTATION.
ENDCLASS.
CLASS ltcl_determine_server_group DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
PRIVATE SECTION.
DATA:
mo_cut TYPE REF TO zcl_abapgit_serialize,
mo_environment_double TYPE REF TO ltd_environment,
mo_exit TYPE REF TO ltd_exit,
mv_act_group TYPE rzlli_apcl.
METHODS:
setup,
default_server_group FOR TESTING RAISING zcx_abapgit_exception,
legacy_server_group FOR TESTING RAISING zcx_abapgit_exception,
exit_server_group FOR TESTING RAISING zcx_abapgit_exception,
exit_not_exist_server_group FOR TESTING RAISING zcx_abapgit_exception,
teardown,
given_db_server_group
IMPORTING
iv_group TYPE rzlli_apcl,
given_exit_chg_server_group
IMPORTING
iv_group TYPE rzlli_apcl,
when_determine_server_group
RAISING
zcx_abapgit_exception,
then_we_shd_have_server_group
IMPORTING
iv_exp_group TYPE rzlli_apcl.
ENDCLASS.
CLASS ltcl_determine_server_group IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_environment_double.
zcl_abapgit_injector=>set_environment( mo_environment_double ).
CREATE OBJECT mo_exit.
zcl_abapgit_injector=>set_exit( mo_exit ).
TRY.
CREATE OBJECT mo_cut.
CATCH zcx_abapgit_exception.
cl_abap_unit_assert=>fail( 'Error creating serializer' ).
ENDTRY.
ENDMETHOD.
METHOD teardown.
CLEAR: mo_cut->mv_group.
ENDMETHOD.
METHOD default_server_group.
when_determine_server_group( ).
then_we_shd_have_server_group( '' ).
ENDMETHOD.
METHOD legacy_server_group.
given_db_server_group( 'parallel_generators' ).
when_determine_server_group( ).
then_we_shd_have_server_group( 'parallel_generators' ).
ENDMETHOD.
METHOD exit_server_group.
given_db_server_group( 'my_group' ).
given_exit_chg_server_group( 'my_group' ).
when_determine_server_group( ).
then_we_shd_have_server_group( 'my_group' ).
ENDMETHOD.
METHOD exit_not_exist_server_group.
given_exit_chg_server_group( 'my_servers' ).
when_determine_server_group( ).
then_we_shd_have_server_group( '' ).
ENDMETHOD.
METHOD given_db_server_group.
mo_environment_double->set_server_group( iv_group ).
ENDMETHOD.
METHOD given_exit_chg_server_group.
mo_exit->set_server_group( iv_group ).
ENDMETHOD.
METHOD when_determine_server_group.
mv_act_group = mo_cut->determine_rfc_server_group( ).
ENDMETHOD.
METHOD then_we_shd_have_server_group.
cl_abap_unit_assert=>assert_equals(
act = mv_act_group
exp = iv_exp_group ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
PRIVATE SECTION.
@ -255,6 +396,7 @@ CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LE
determine_max_processes_no_pp FOR TESTING RAISING zcx_abapgit_exception,
determine_max_processes_merged FOR TESTING RAISING zcx_abapgit_exception,
determine_max_processes_exit FOR TESTING RAISING zcx_abapgit_exception,
determine_max_processes_capped FOR TESTING RAISING zcx_abapgit_exception,
force FOR TESTING RAISING zcx_abapgit_exception,
teardown,
@ -267,6 +409,10 @@ CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LE
IMPORTING
iv_is_merged TYPE abap_bool,
given_available_sessions
IMPORTING
iv_available_sessions TYPE i,
given_free_work_processes
IMPORTING
iv_free_work_processes TYPE i,
@ -390,6 +536,19 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD.
METHOD determine_max_processes_capped.
given_parallel_proc_disabled( abap_false ).
given_is_merged( abap_false ).
given_free_work_processes( 50 ). " big system
given_available_sessions( 10 ). " but user session is capped
when_determine_max_processes( ).
then_we_shd_have_n_processes( 10 ).
ENDMETHOD.
METHOD force.
@ -413,6 +572,12 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
ENDMETHOD.
METHOD given_available_sessions.
mo_environment_double->set_available_sessions( iv_available_sessions ).
ENDMETHOD.
METHOD given_free_work_processes.

View File

@ -66,7 +66,7 @@ CLASS zcl_abapgit_ecatt_helper IMPLEMENTATION.
lv_text = lx_ecatt->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).
" note, exception cx_ecatt_ui_attachment doesn't exist in 702
CATCH cx_ecatt.
CATCH cx_ecatt ##NO_HANDLER.
"will never be raised from download, when called with mv_generate_xml_no_download = 'X'.
ENDTRY.

View File

@ -25,7 +25,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_ECATT_SP_DOWNLOAD IMPLEMENTATION.
CLASS zcl_abapgit_ecatt_sp_download IMPLEMENTATION.
METHOD download.
@ -93,7 +93,7 @@ CLASS ZCL_ABAPGIT_ECATT_SP_DOWNLOAD IMPLEMENTATION.
CALL METHOD lo_ecatt_sp->('GET_SP_ATTRIBUTES')
IMPORTING
e_sp_xml = lv_sp_xml.
CATCH cx_ecatt_apl.
CATCH cx_ecatt_apl ##NO_HANDLER.
ENDTRY.
CALL FUNCTION 'SDIXML_XML_TO_DOM'

View File

@ -27,7 +27,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_ECATT_SP_UPLOAD IMPLEMENTATION.
CLASS zcl_abapgit_ecatt_sp_upload IMPLEMENTATION.
METHOD get_ecatt_sp.
@ -129,7 +129,6 @@ CLASS ZCL_ABAPGIT_ECATT_SP_UPLOAD IMPLEMENTATION.
ENDTRY.
ASSIGN ecatt_object TO <lg_ecatt_sp>.
ASSERT sy-subrc = 0.
lo_ecatt_sp = <lg_ecatt_sp>.
@ -162,13 +161,12 @@ CLASS ZCL_ABAPGIT_ECATT_SP_UPLOAD IMPLEMENTATION.
CATCH cx_ecatt_apl INTO lx_ecatt.
lv_exc_occ = 'X'.
ENDTRY.
* Devesh,C5129871 18.07.2011 Releasing enqueue after uploading
*begin
" Releasing enqueue after uploading
TRY.
ecatt_object->close_object( im_suppress_events = 'X' ).
CATCH cx_ecatt_apl INTO lx_ecatt.
CATCH cx_ecatt_apl INTO lx_ecatt ##NO_HANDLER.
ENDTRY.
*end
* get devclass from existing object
TRY.
cl_apl_ecatt_object=>get_tadir_entry(

View File

@ -62,7 +62,7 @@ CLASS zcl_abapgit_object_enho_clif IMPLEMENTATION.
TRY.
io_clif->add_change_enha_type( type_line = ls_type_line ).
CATCH cx_enh_mod_not_allowed
cx_enh_is_not_enhanceable.
cx_enh_is_not_enhanceable ##NO_HANDLER.
" TODO
ENDTRY.
ENDLOOP.

View File

@ -253,7 +253,8 @@ CLASS zcl_abapgit_gui_jumper IMPLEMENTATION.
EXCEPTIONS
communication_failure = 1 MESSAGE lv_msg
system_failure = 2 MESSAGE lv_msg
OTHERS = 3.
resource_failure = 3
OTHERS = 4.
lv_subrc = sy-subrc.

View File

@ -611,7 +611,7 @@ CLASS zcl_abapgit_oo_class IMPLEMENTATION.
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
OTHERS = 7 ##FM_SUBRC_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
EXPORTING
@ -628,7 +628,7 @@ CLASS zcl_abapgit_oo_class IMPLEMENTATION.
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
OTHERS = 7 ##FM_SUBRC_OK.
ENDTRY.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
@ -998,5 +998,4 @@ CLASS zcl_abapgit_oo_class IMPLEMENTATION.
zcx_abapgit_exception=>raise( |Class { ls_clskey-clsname } has syntax errors | ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -212,7 +212,7 @@ CLASS zcl_abapgit_oo_interface IMPLEMENTATION.
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
OTHERS = 7 ##FM_SUBRC_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
EXPORTING
@ -229,7 +229,7 @@ CLASS zcl_abapgit_oo_interface IMPLEMENTATION.
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
OTHERS = 7 ##FM_SUBRC_OK.
ENDTRY.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
@ -368,5 +368,4 @@ CLASS zcl_abapgit_oo_interface IMPLEMENTATION.
zcx_abapgit_exception=>raise( |Interface { ls_intkey-clsname } has syntax errors | ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -151,7 +151,7 @@ CLASS zcl_abapgit_oo_serializer IMPLEMENTATION.
lv_program = ls_include.
TRY.
lt_source = zcl_abapgit_factory=>get_sap_report( )->read_report( lv_program ).
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
* ignore if the report is not found, sometimes the CCDEF include does not exist
ENDTRY.
rt_source = lt_source.

View File

@ -37,10 +37,7 @@ CLASS ltcl_field_rules DEFINITION FOR TESTING RISK LEVEL HARMLESS
RETURNING
VALUE(ri_rules) TYPE REF TO zif_abapgit_field_rules,
apply_clear_logic FOR TESTING,
apply_fill_logic FOR TESTING,
get_utc_timestamp
RETURNING
VALUE(rv_timestamp) TYPE timestamp.
apply_fill_logic FOR TESTING.
ENDCLASS.
@ -88,7 +85,7 @@ CLASS ltcl_field_rules IMPLEMENTATION.
METHOD fill3.
DATA lv_timestamp TYPE timestamp.
lv_timestamp = get_utc_timestamp( ).
GET TIME STAMP FIELD lv_timestamp.
fill_value(
iv_rule = zif_abapgit_field_rules=>c_fill_rule-timestamp
iv_len = 10
@ -205,6 +202,8 @@ CLASS ltcl_field_rules IMPLEMENTATION.
lv_ts TYPE string,
lv_timestamp TYPE timestamp.
GET TIME STAMP FIELD lv_timestamp.
ls_act-key = 1.
INSERT ls_act INTO TABLE lt_act.
ls_act-key = 2.
@ -241,17 +240,16 @@ CLASS ltcl_field_rules IMPLEMENTATION.
act = ls_act-time(4)
exp = sy-uzeit(4) ). " avoid comparing seconds
lv_timestamp = get_utc_timestamp( ).
lv_ts = ls_act-ts.
lv_ts = lv_ts(12).
lv_ts = lv_ts(10).
cl_abap_unit_assert=>assert_equals(
act = lv_ts
exp = |{ lv_timestamp DIV 100 }| ). " avoid comparing second
exp = |{ lv_timestamp DIV 10000 }| ). " avoid comparing second
lv_ts = ls_act-tl.
lv_ts = lv_ts(12).
lv_ts = lv_ts(10).
cl_abap_unit_assert=>assert_equals(
act = lv_ts
exp = |{ lv_timestamp DIV 100 }| ). " avoid comparing seconds
exp = |{ lv_timestamp DIV 10000 }| ). " avoid comparing seconds
READ TABLE lt_act INTO ls_act INDEX 2.
@ -269,21 +267,4 @@ CLASS ltcl_field_rules IMPLEMENTATION.
exp = sy-uzeit(4) ). " avoid comparing seconds
ENDMETHOD.
METHOD get_utc_timestamp.
DATA lv_syst_timezone TYPE timezone.
CALL FUNCTION 'GET_SYSTEM_TIMEZONE'
IMPORTING
timezone = lv_syst_timezone
EXCEPTIONS
customizing_missing = 1
OTHERS = 2.
IF sy-subrc <> 0.
cl_abap_unit_assert=>fail( 'Could not get system timezone' ).
ENDIF.
CONVERT DATE sy-datum TIME sy-uzeit
INTO TIME STAMP rv_timestamp
TIME ZONE lv_syst_timezone.
ENDMETHOD.
ENDCLASS.

View File

@ -47,7 +47,7 @@ CLASS zcl_abapgit_sap_report IMPLEMENTATION.
no_show_permission = 7
permission_failure = 8
request_language_denied = 9
OTHERS = 10.
OTHERS = 10 ##FM_SUBRC_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'RS_ACCESS_PERMISSION'
EXPORTING
@ -67,7 +67,7 @@ CLASS zcl_abapgit_sap_report IMPLEMENTATION.
no_show_permission = 7
permission_failure = 8
request_language_denied = 9
OTHERS = 10.
OTHERS = 10 ##FM_SUBRC_OK.
ENDTRY.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).

View File

@ -84,7 +84,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION.
CLASS zcl_abapgit_object_tabl IMPLEMENTATION.
METHOD clear_dd03p_fields.
@ -838,6 +838,14 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION.
ENDIF.
rv_bool = boolc( sy-subrc = 0 ).
" Skip TABL generated by CHDO
IF rv_bool = abap_true.
SELECT SINGLE tabname FROM tcdrs INTO lv_tabname WHERE tabname = lv_tabname.
IF sy-subrc = 0.
rv_bool = abap_false.
ENDIF.
ENDIF.
ENDMETHOD.

View File

@ -103,7 +103,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_TABL_DDL IMPLEMENTATION.
CLASS zcl_abapgit_object_tabl_ddl IMPLEMENTATION.
METHOD deserialize.
@ -158,9 +158,9 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL_DDL IMPLEMENTATION.
start TYPE i VALUE 0,
colon TYPE i VALUE 1,
type TYPE i VALUE 2,
aftertype TYPE i VALUE 2,
null TYPE i VALUE 2,
afternull TYPE i VALUE 2,
aftertype TYPE i VALUE 3,
null TYPE i VALUE 4,
afternull TYPE i VALUE 5,
END OF lc_mode.
DATA lv_field TYPE string.

View File

@ -64,6 +64,10 @@ CLASS zcl_abapgit_longtexts IMPLEMENTATION.
FIELD-SYMBOLS: <ls_dokil> LIKE LINE OF lt_dokil.
IF iv_object_name CA '#'.
zcx_abapgit_exception=>raise( |Invalid name for longtext: { iv_longtext_id } { iv_object_name }| ).
ENDIF.
lv_object = escape_name(
iv_longtext_id = iv_longtext_id
iv_object_name = iv_object_name ).
@ -77,7 +81,6 @@ CLASS zcl_abapgit_longtexts IMPLEMENTATION.
ENDIF.
ELSEIF iv_longtext_id IS NOT INITIAL.
IF lv_object NA '#'.
IF iv_main_lang_only = abap_true.
SELECT * FROM dokil
INTO TABLE lt_dokil
@ -92,7 +95,6 @@ CLASS zcl_abapgit_longtexts IMPLEMENTATION.
AND object LIKE lv_object ESCAPE '#'
ORDER BY PRIMARY KEY.
ENDIF.
ENDIF.
ELSE.
zcx_abapgit_exception=>raise( |serialize_longtexts parameter error| ).

View File

@ -383,7 +383,7 @@ CLASS zcl_abapgit_object_aifc IMPLEMENTATION.
packages = '' ).
CATCH cx_abap_not_a_table INTO lx_abap_not_a_table.
zcx_abapgit_exception=>raise_with_text( lx_abap_not_a_table ).
CATCH cx_abap_not_in_package.
CATCH cx_abap_not_in_package ##NO_HANDLER.
"that's fine
ENDTRY.

View File

@ -159,7 +159,7 @@ CLASS zcl_abapgit_object_auth IMPLEMENTATION.
CALL FUNCTION 'SU20_MAINTAIN_SNGL'
EXPORTING
id_field = mv_fieldname
id_wbo_mode = abap_false.
id_wbo_mode = abap_false ##EXISTS.
rv_exit = abap_true.
ENDIF.
ENDMETHOD.

View File

@ -38,6 +38,7 @@ CLASS zcl_abapgit_object_cmpt IMPLEMENTATION.
r_ref_db_access = mo_cmp_db.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'CMPT not supported' ).
ENDTRY.
mv_name = ms_item-obj_name.

View File

@ -72,7 +72,8 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
DATA: lr_data TYPE REF TO data,
lo_dcl TYPE REF TO object,
lx_error TYPE REF TO cx_root.
lx_error TYPE REF TO cx_root,
lv_abap_language_version TYPE uccheck.
FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_field> TYPE any.
@ -91,6 +92,12 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
ASSERT sy-subrc = 0.
<lg_field> = mo_files->read_string( 'asdcls' ).
ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE <lg_data> TO <lg_field>.
IF sy-subrc = 0.
lv_abap_language_version = <lg_field>.
set_abap_language_version( CHANGING cv_abap_language_version = lv_abap_language_version ).
ENDIF.
TRY.
tadir_insert( iv_package ).
@ -98,6 +105,16 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
RECEIVING
ro_handler = lo_dcl.
TRY.
CALL METHOD lo_dcl->('SAVE')
EXPORTING
iv_dclname = ms_item-obj_name
iv_put_state = 'I'
is_dclsrc = <lg_data>
iv_devclass = iv_package
iv_access_mode = 'INSERT'
iv_abap_language_version = lv_abap_language_version.
CATCH cx_sy_dyn_call_param_not_found.
CALL METHOD lo_dcl->('SAVE')
EXPORTING
iv_dclname = ms_item-obj_name
@ -105,6 +122,7 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
is_dclsrc = <lg_data>
iv_devclass = iv_package
iv_access_mode = 'INSERT'.
ENDTRY.
CATCH cx_root INTO lx_error.
zcx_abapgit_exception=>raise_with_text( lx_error ).
@ -236,7 +254,7 @@ CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE <lg_data> TO <lg_field>.
IF sy-subrc = 0.
CLEAR <lg_field>.
clear_abap_language_version( CHANGING cv_abap_language_version = <lg_field> ).
ENDIF.
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_field>.

View File

@ -280,7 +280,8 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
<lg_data_baseinfo> TYPE any,
<lg_source> TYPE any,
<lg_baseinfo_string> TYPE any,
<lg_baseinfo_ddlname> TYPE any.
<lg_baseinfo_ddlname> TYPE any,
<lg_abap_language_version> TYPE any.
TRY.
CREATE DATA lr_data TYPE ('DDDDLSRCV').
@ -293,6 +294,11 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
ASSERT sy-subrc = 0.
<lg_source> = mo_files->read_string( 'asddls' ).
ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE <lg_data> TO <lg_abap_language_version>.
IF sy-subrc = 0.
set_abap_language_version( CHANGING cv_abap_language_version = <lg_abap_language_version> ).
ENDIF.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = lo_ddl.
@ -310,12 +316,22 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
ASSERT sy-subrc = 0.
<lg_baseinfo_ddlname> = ms_item-obj_name.
TRY.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE')
EXPORTING
name = ms_item-obj_name
put_state = 'N'
ddddlsrcv_wa = <lg_data>
baseinfo_string = <lg_data_baseinfo>
save_language_version = abap_true.
CATCH cx_sy_dyn_call_param_not_found.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE')
EXPORTING
name = ms_item-obj_name
put_state = 'N'
ddddlsrcv_wa = <lg_data>
baseinfo_string = <lg_data_baseinfo>.
ENDTRY.
ELSE.
CALL METHOD lo_ddl->('IF_DD_DDL_HANDLER~SAVE')
EXPORTING
@ -453,7 +469,8 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
<lt_data_baseinfo> TYPE ANY TABLE,
<lg_data_baseinfo> TYPE any,
<lg_ddlname> TYPE any,
<lg_as4local> TYPE any.
<lg_as4local> TYPE any,
<lg_abap_language_version> TYPE any.
TRY.
@ -506,12 +523,16 @@ CLASS zcl_abapgit_object_ddls IMPLEMENTATION.
zcx_abapgit_exception=>raise_with_text( lx_error ).
ENDTRY.
ASSIGN COMPONENT 'ABAP_LANGUAGE_VERSION' OF STRUCTURE <lg_data> TO <lg_abap_language_version>.
IF sy-subrc = 0.
clear_abap_language_version( CHANGING cv_abap_language_version = <lg_abap_language_version> ).
ENDIF.
APPEND 'AS4USER' TO lt_clr_comps.
APPEND 'AS4DATE' TO lt_clr_comps.
APPEND 'AS4TIME' TO lt_clr_comps.
APPEND 'ACTFLAG' TO lt_clr_comps.
APPEND 'CHGFLAG' TO lt_clr_comps.
APPEND 'ABAP_LANGUAGE_VERSION' TO lt_clr_comps.
APPEND 'ABAP_LANGU_VERSION' TO lt_clr_comps.
LOOP AT lt_clr_comps ASSIGNING <lv_comp>.

View File

@ -80,8 +80,6 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION.
clear_field( EXPORTING iv_fieldname = 'ABAP_LANGUAGE_VERSION'
CHANGING cg_metadata = <lg_metadata> ).
clear_field( EXPORTING iv_fieldname = 'ABAP_LANGU_VERSION'
CHANGING cg_metadata = <lg_metadata> ).
ENDMETHOD.
@ -184,7 +182,8 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION.
<lg_version> TYPE data,
<lg_package> TYPE data,
<lg_changed_by> TYPE syuname,
<lg_changed_at> TYPE xsddatetime_z.
<lg_changed_at> TYPE xsddatetime_z,
<lg_abap_language_version> TYPE data.
TRY.
CREATE DATA lr_data
@ -197,6 +196,11 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION.
CHANGING
cg_data = <lg_data> ).
ASSIGN COMPONENT 'METADATA-ABAP_LANGU_VERSION' OF STRUCTURE <lg_data> TO <lg_abap_language_version>.
IF sy-subrc = 0.
set_abap_language_version( CHANGING cv_abap_language_version = <lg_abap_language_version> ).
ENDIF.
ASSIGN COMPONENT 'CONTENT-SOURCE' OF STRUCTURE <lg_data> TO <lg_source>.
ASSERT sy-subrc = 0.
@ -367,6 +371,11 @@ CLASS zcl_abapgit_object_ddlx IMPLEMENTATION.
li_data_model->get_data( IMPORTING p_data = <lg_data> ).
ASSIGN COMPONENT 'METADATA-ABAP_LANGU_VERSION' OF STRUCTURE <lg_data> TO <lg_field>.
IF sy-subrc = 0.
clear_abap_language_version( CHANGING cv_abap_language_version = <lg_field> ).
ENDIF.
clear_fields( CHANGING cg_data = <lg_data> ).
ASSIGN COMPONENT 'CONTENT-SOURCE' OF STRUCTURE <lg_data> TO <lg_field>.

View File

@ -43,7 +43,7 @@ CLASS zcl_abapgit_object_doma DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
METHODS handle_dependencies
IMPORTING
!iv_step TYPE zif_abapgit_definitions=>ty_deserialization_step
!iv_step TYPE zif_abapgit_objects=>ty_deserialization_step
CHANGING
!cv_exit TYPE dd01v-convexit
!cv_done TYPE abap_bool.

View File

@ -786,7 +786,8 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
CHANGING
include = lv_include
EXCEPTIONS
OTHERS = 1.
OTHERS = 1 ##FM_SUBRC_OK.
IF lv_function_group(1) = 'X'. " "EXIT"-function-module
ls_tadir-object = 'FUGS'.
ENDIF.
@ -1276,6 +1277,14 @@ CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
pool_not_exists = 1.
rv_bool = boolc( sy-subrc <> 1 ).
" Skip FUGR generated by CHDO
IF rv_bool = abap_true.
SELECT SINGLE fgrp FROM tcdrp INTO lv_pool WHERE fgrp = lv_pool.
IF sy-subrc = 0.
rv_bool = abap_false.
ENDIF.
ENDIF.
ENDMETHOD.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_FUGS</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - FUGS</DESCRIPT>
<DESCRIPT>abapGit - FUGS - Function Group (SAP)</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -0,0 +1,283 @@
CLASS zcl_abapgit_object_http DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_objects_super
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF ty_uconservhttphandler,
id TYPE c LENGTH 30,
version TYPE c LENGTH 1,
serviceorder TYPE n LENGTH 2,
servicehandler TYPE c LENGTH 30,
END OF ty_uconservhttphandler.
TYPES: BEGIN OF ty_uconhttpservtext,
id TYPE c LENGTH 30,
version TYPE c LENGTH 1,
lang TYPE c LENGTH 1,
shorttext TYPE c LENGTH 255,
END OF ty_uconhttpservtext.
TYPES: BEGIN OF ty_handler,
id TYPE c LENGTH 30,
version TYPE c LENGTH 1,
serviceorder TYPE n LENGTH 2,
servicehandler TYPE c LENGTH 30,
END OF ty_handler.
TYPES: BEGIN OF ty_gs_object_version,
id TYPE c LENGTH 1,
object_state TYPE c LENGTH 1,
END OF ty_gs_object_version.
ENDCLASS.
CLASS zcl_abapgit_object_http IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
TRY.
SELECT SINGLE changedby FROM ('UCONHTTPSERVHEAD') INTO rv_user WHERE id = ms_item-obj_name.
IF sy-subrc <> 0.
rv_user = c_user_unknown.
ENDIF.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'HTTP not supported' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA lv_name TYPE c LENGTH 30.
lv_name = ms_item-obj_name.
TRY.
CALL METHOD ('CL_UCON_API_FACTORY')=>('DELETE_HTTP_SERVICE')
EXPORTING
name = lv_name
devclass = iv_package.
CATCH cx_root.
zcx_abapgit_exception=>raise( 'HTTP not supported' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: lv_http_servid TYPE c LENGTH 30,
lt_handler TYPE TABLE OF ty_handler,
ls_handler LIKE LINE OF lt_handler,
ls_description TYPE ty_uconhttpservtext,
lv_check_object_name TYPE c LENGTH 40,
lx_root TYPE REF TO cx_root,
lv_id TYPE c LENGTH 30,
lo_http TYPE REF TO object,
ls_abap_lang TYPE ty_gs_object_version,
lo_instance TYPE REF TO object,
lv_tadir_name TYPE tadir-obj_name,
lt_ret TYPE STANDARD TABLE OF bapiret2.
TRY.
io_xml->read(
EXPORTING iv_name = 'HTTPID'
CHANGING cg_data = lv_http_servid ).
io_xml->read(
EXPORTING iv_name = 'HTTPTEXT'
CHANGING cg_data = ls_description ).
io_xml->read(
EXPORTING iv_name = 'HTTPHDL'
CHANGING cg_data = lt_handler ).
SELECT SINGLE id FROM ('UCONHTTPSERVHEAD') INTO lv_id WHERE id = lv_http_servid AND version = 'A'.
IF sy-subrc = 0.
"update
CALL METHOD ('CL_UCON_API_FACTORY')=>('GET_HTTP_SERVICE')
EXPORTING
name = lv_http_servid
no_auth_check = abap_true
RECEIVING
http_service = lo_http.
ELSE.
"create
CALL METHOD ('CL_UCON_API_FACTORY')=>('NEW_HTTP_SERVICE')
EXPORTING
name = lv_http_servid
RECEIVING
http_service = lo_http.
ENDIF.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_HANDLER')
EXPORTING
handler = lt_handler.
IF lt_handler IS NOT INITIAL.
READ TABLE lt_handler INTO ls_handler INDEX 1.
"get language version from abap class
lv_check_object_name = ls_handler-servicehandler.
IF lv_check_object_name IS NOT INITIAL.
TRY.
CALL METHOD ('CL_ABAP_LANGUAGE_VERSION')=>('GET_INSTANCE')
RECEIVING
ro_version_handler = lo_instance.
CALL METHOD lo_instance->('IF_ABAP_LANGUAGE_VERSION~GET_VERSION_OF_OBJECT')
EXPORTING
iv_object_type = 'CLAS'
iv_object_name = lv_check_object_name
RECEIVING
rs_object_version = ls_abap_lang.
IF ls_abap_lang-id = 'X'. "language version X not supported, use space instead
ls_abap_lang-id = space.
ENDIF.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_LANGUAGE_VERSION')
EXPORTING
iv_langu_version = ls_abap_lang-id.
CATCH cx_root ##NO_HANDLER.
" ABAP language version not supported in this system
ENDTRY.
ENDIF.
ENDIF.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SET_DESCRIPTION')
EXPORTING
texts = ls_description.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~SAVE')
EXPORTING
run_dark = abap_true
dev_class = iv_package
korrnum = iv_transport.
CALL METHOD lo_http->('IF_UCON_API_HTTP_SERVICE~FREE').
lv_tadir_name = lv_http_servid.
CALL METHOD ('CL_AUTH_START_TOOLS')=>('SUSH_CREATE')
EXPORTING
iv_type = 'HTTP'
iv_name = lv_tadir_name
iv_silent = abap_true
iv_task = iv_transport
IMPORTING
et_log = lt_ret.
CATCH cx_root INTO lx_root.
zcx_abapgit_exception=>raise_with_text( lx_root ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
DATA lv_id TYPE c LENGTH 30.
TRY.
SELECT SINGLE id FROM ('UCONHTTPSERVHEAD') INTO lv_id WHERE id = ms_item-obj_name AND version = 'A'.
rv_bool = boolc( sy-subrc = 0 ).
CATCH cx_root.
zcx_abapgit_exception=>raise( 'HTTP not supported' ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_order.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_steps.
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~is_active.
rv_active = is_active( ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
ENDMETHOD.
METHOD zif_abapgit_object~map_filename_to_object.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~map_object_to_filename.
RETURN.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: lv_http_srv_id TYPE c LENGTH 30,
lo_serv TYPE REF TO object, "if_ucon_api_http_service
lt_handler TYPE TABLE OF ty_uconservhttphandler,
ls_description TYPE ty_uconhttpservtext,
lx_root TYPE REF TO cx_root,
lv_name TYPE c LENGTH 30.
TRY.
lv_http_srv_id = ms_item-obj_name.
"read http service object
CALL METHOD ('CL_UCON_API_FACTORY')=>('GET_HTTP_SERVICE')
EXPORTING
name = lv_http_srv_id
no_auth_check = abap_true
RECEIVING
http_service = lo_serv.
CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_HANDLER') RECEIVING handler = lt_handler.
CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_DESCRIPTION')
EXPORTING
lang = sy-langu
RECEIVING
text = ls_description.
"add data to output
CALL METHOD lo_serv->('IF_UCON_API_HTTP_SERVICE~GET_NAME') RECEIVING name = lv_name.
io_xml->add(
iv_name = 'HTTPID'
ig_data = lv_name ).
io_xml->add(
iv_name = 'HTTPTEXT'
ig_data = ls_description ).
io_xml->add(
iv_name = 'HTTPHDL'
ig_data = lt_handler ).
CATCH cx_root INTO lx_root.
zcx_abapgit_exception=>raise_with_text( lx_root ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_HTTP</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - HTTP - HTTP Destination</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -163,6 +163,9 @@ CLASS zcl_abapgit_object_idoc IMPLEMENTATION.
MOVE-CORRESPONDING ls_idoc-attributes TO ls_attributes.
IF zif_abapgit_object~exists( ) = abap_false.
" Avoid popup asking for package
tadir_insert( iv_package ).
CALL FUNCTION 'IDOCTYPE_CREATE'
EXPORTING
pi_idoctyp = mv_idoctyp

View File

@ -53,8 +53,9 @@ CLASS zcl_abapgit_object_iext IMPLEMENTATION.
pe_attributes = ls_attributes
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 0.
rv_user = ls_attributes-plast.
ENDIF.
ENDMETHOD.
@ -96,6 +97,9 @@ CLASS zcl_abapgit_object_iext IMPLEMENTATION.
EXCEPTIONS
OTHERS = 1.
ELSE.
" Avoid popup asking for package
tadir_insert( iv_package ).
CALL FUNCTION 'EXTTYPE_CREATE'
EXPORTING
pi_cimtyp = mv_extension

View File

@ -61,7 +61,7 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
iobj_not_found = 1
illegal_input = 2
bct_comp_invalid = 3
not_authorized = 4
* not_authorized = 4 " not in lower releases
OTHERS = 5.
IF sy-subrc = 0.
ASSIGN COMPONENT 'TSTPNM' OF STRUCTURE <lg_viobj> TO <lg_tstpnm>.
@ -200,6 +200,7 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
ASSERT sy-subrc = 0.
IF zif_abapgit_object~exists( ) = abap_false.
TRY.
CALL FUNCTION 'BAPI_IOBJ_CREATE'
EXPORTING
details = <lg_details>
@ -213,8 +214,23 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
hierarchycharacteristics = <lt_hierarchycharacteristics>
elimination = <lt_elimination>
hanafieldsmapping = <lt_hanafieldsmapping>
xxlattributes = <lt_xxlattributes>.
xxlattributes = <lt_xxlattributes> ##ARG_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'BAPI_IOBJ_CREATE'
EXPORTING
details = <lg_details>
IMPORTING
return = ls_return
TABLES
compounds = <lt_compounds>
attributes = <lt_attributes>
navigationattributes = <lt_navigationattributes>
atrnavinfoprovider = <lt_atrnavinfoprovider>
hierarchycharacteristics = <lt_hierarchycharacteristics>
elimination = <lt_elimination>.
ENDTRY.
ELSE.
TRY.
CALL FUNCTION 'BAPI_IOBJ_CHANGE'
EXPORTING
infoobject = <lg_infoobject>
@ -229,7 +245,22 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
hierarchycharacteristics = <lt_hierarchycharacteristics>
elimination = <lt_elimination>
hanafieldsmapping = <lt_hanafieldsmapping>
xxlattributes = <lt_xxlattributes>.
xxlattributes = <lt_xxlattributes> ##ARG_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'BAPI_IOBJ_CHANGE'
EXPORTING
infoobject = <lg_infoobject>
details = <lg_details>
IMPORTING
return = ls_return
TABLES
compounds = <lt_compounds>
attributes = <lt_attributes>
navigationattributes = <lt_navigationattributes>
atrnavinfoprovider = <lt_atrnavinfoprovider>
hierarchycharacteristics = <lt_hierarchycharacteristics>
elimination = <lt_elimination>.
ENDTRY.
ENDIF.
IF ls_return-type = 'E'.
@ -409,6 +440,7 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
lv_iobjnam = ms_item-obj_name.
TRY.
CALL FUNCTION 'BAPI_IOBJ_GETDETAIL'
EXPORTING
infoobject = lv_iobjnam
@ -423,7 +455,22 @@ CLASS zcl_abapgit_object_iobj IMPLEMENTATION.
hierarchycharacteristics = <lt_hierarchycharacteristics>
elimination = <lt_elimination>
hanafieldsmapping = <lt_hanafieldsmapping>
xxlattributes = <lt_xxlattributes>.
xxlattributes = <lt_xxlattributes> ##ARG_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'BAPI_IOBJ_GETDETAIL'
EXPORTING
infoobject = lv_iobjnam
IMPORTING
details = <lg_details>
return = ls_return
TABLES
compounds = <lt_compounds>
attributes = <lt_attributes>
navigationattributes = <lt_navigationattributes>
atrnavinfoprovider = <lt_atrnavinfoprovider>
hierarchycharacteristics = <lt_hierarchycharacteristics>
elimination = <lt_elimination>.
ENDTRY.
IF ls_return-type = 'E'.
zcx_abapgit_exception=>raise( |Error getting details of InfoObject: { ls_return-message }| ).

View File

@ -124,7 +124,11 @@ CLASS zcl_abapgit_object_iwpr IMPLEMENTATION.
METHOD zif_abapgit_object~jump.
SUBMIT /iwbep/r_sbui_service_builder
DATA lv_prog TYPE progname.
lv_prog = '/IWBEP/R_SBUI_SERVICE_BUILDER'.
SUBMIT (lv_prog)
WITH i_prname = ms_item-obj_name
AND RETURN.

View File

@ -131,7 +131,11 @@ CLASS zcl_abapgit_object_iwvb IMPLEMENTATION.
METHOD zif_abapgit_object~jump.
SUBMIT /iwbep/r_dst_vocan_register
DATA lv_prog TYPE progname.
lv_prog = '/IWBEP/R_DST_VOCAN_REGISTER'.
SUBMIT (lv_prog)
WITH ip_aname = ms_item-obj_name
WITH ip_avers = ms_item-obj_name+32(4)
AND RETURN.

View File

@ -37,13 +37,17 @@ CLASS zcl_abapgit_object_msag DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
zcx_abapgit_exception .
METHODS delete_msgid
IMPORTING
!iv_message_id TYPE arbgb .
!iv_message_id TYPE arbgb
RAISING
zcx_abapgit_exception.
METHODS free_access_permission
IMPORTING
!iv_message_id TYPE arbgb .
METHODS delete_documentation
IMPORTING
!iv_message_id TYPE arbgb .
!iv_message_id TYPE arbgb
RAISING
zcx_abapgit_exception.
ENDCLASS.
@ -61,9 +65,7 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION.
element = iv_message_id
addition = ' '
IMPORTING
object = lv_key_s
EXCEPTIONS
OTHERS = 0.
object = lv_key_s.
CALL FUNCTION 'DOKU_DELETE_ALL'
EXPORTING
@ -80,7 +82,11 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION.
no_docu_found = 4
object_is_already_enqueued = 5
object_is_enqueued_by_corr = 6
user_break = 7.
user_break = 7
OTHERS = 8.
IF sy-subrc <> 0 AND sy-subrc <> 4.
zcx_abapgit_exception=>raise( 'Error deleting longtext for message' ).
ENDIF.
ENDMETHOD.

View File

@ -90,7 +90,7 @@ CLASS zcl_abapgit_object_oa2p IMPLEMENTATION.
"authority check
AUTHORITY-CHECK OBJECT 'S_OA2C_ADM'
ID 'ACTVT' FIELD lc_actvt.
ID 'ACTVT' FIELD lc_actvt ##AUTH_OBJ_OK.
IF sy-subrc <> 0.
MESSAGE e463(01) WITH mv_profile INTO zcx_abapgit_exception=>null.
zcx_abapgit_exception=>raise_t100( ).
@ -104,7 +104,7 @@ CLASS zcl_abapgit_object_oa2p IMPLEMENTATION.
CALL METHOD lo_persist->('IF_WB_OBJECT_PERSIST~DELETE')
EXPORTING
p_object_key = lv_profile_key. " Object Key
CATCH cx_swb_object_does_not_exist.
CATCH cx_swb_object_does_not_exist ##NO_HANDLER.
CATCH cx_swb_exception.
zcx_abapgit_exception=>raise( |Error when deleting OAuth2 Profile { lv_profile_key }.| ).
ENDTRY.

View File

@ -137,7 +137,7 @@ CLASS zcl_abapgit_object_otgr IMPLEMENTATION.
TRY.
CREATE DATA lo_parents TYPE TABLE OF ('CLS_TYGR_PARENT').
ASSIGN lo_parents->* TO <lt_parents>.
CATCH cx_sy_create_data_error.
CATCH cx_sy_create_data_error ##NO_HANDLER.
ENDTRY.
IF <lt_parents> IS ASSIGNED.
@ -288,7 +288,7 @@ CLASS zcl_abapgit_object_otgr IMPLEMENTATION.
TRY.
CREATE DATA lo_parents TYPE TABLE OF ('CLS_TYGR_PARENT').
ASSIGN lo_parents->* TO <lt_parents>.
CATCH cx_sy_create_data_error.
CATCH cx_sy_create_data_error ##NO_HANDLER.
ENDTRY.
TRY.

View File

@ -172,7 +172,7 @@ CLASS lcl_task_definition IMPLEMENTATION.
IF sy-subrc <> 0.
TRY.
li_container->element_remove( name = lv_element ).
CATCH cx_swf_cnt_container.
CATCH cx_swf_cnt_container ##NO_HANDLER.
"Shouldn't happen, doesn't matter if it does
ENDTRY.
ENDIF.

View File

@ -77,7 +77,7 @@ CLASS zcl_abapgit_object_pdxx_super IMPLEMENTATION.
enqueue_failed = 1
object_not_deleted = 2
object_not_found = 3
OTHERS = 4. "#EC SUBRC_OK
OTHERS = 4 ##FM_SUBRC_OK.
check_subrc_for( `RH_HRSOBJECT_DELETE` ).

View File

@ -279,6 +279,15 @@ CLASS zcl_abapgit_object_prog IMPLEMENTATION.
WHERE progname = ms_item-obj_name.
rv_bool = boolc( sy-subrc = 0 ).
" Skip PROG generated by CHDO
IF rv_bool = abap_true.
FIND REGEX '^F.*CD[C|F|T|V]' IN ms_item-obj_name.
IF sy-subrc <> 0.
FIND REGEX '^/.*/F.*CD[C|F|T|V]' IN ms_item-obj_name.
ENDIF.
rv_bool = boolc( sy-subrc <> 0 ).
ENDIF.
ENDMETHOD.

View File

@ -486,7 +486,8 @@ CLASS zcl_abapgit_object_scp1 IMPLEMENTATION.
TABLES
texts = ls_scp1-scprtext
EXCEPTIONS
no_text_found = 1.
no_text_found = 1
OTHERS = 2 ##FM_SUBRC_OK.
IF ls_scp1-scprattr-type = 'TMP'.
load_hier( CHANGING cs_scp1 = ls_scp1 ).

View File

@ -134,7 +134,7 @@ CLASS zcl_abapgit_object_sfpf IMPLEMENTATION.
TRY.
rv_xstr = cl_fp_helper=>convert_form_to_xstring( li_fp_form ).
CATCH cx_fp_api INTO lx_fp_conv_err.
CATCH cx_fp_api INTO lx_fp_conv_err ##NO_HANDLER.
" Pass - the exception is handled below!
ENDTRY.

View File

@ -7,7 +7,7 @@ CLASS zcl_abapgit_object_shlp DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
METHODS handle_dependencies
IMPORTING
!iv_step TYPE zif_abapgit_definitions=>ty_deserialization_step
!iv_step TYPE zif_abapgit_objects=>ty_deserialization_step
CHANGING
!cv_exit TYPE dd30v-selmexit
!cv_done TYPE abap_bool.

View File

@ -129,6 +129,18 @@ CLASS zcl_abapgit_object_srvb IMPLEMENTATION.
CHANGING
cs_service_binding = cs_service_binding ).
clear_field(
EXPORTING
iv_fieldname = 'METADATA-RESPONSIBLE'
CHANGING
cs_service_binding = cs_service_binding ).
clear_field(
EXPORTING
iv_fieldname = 'METADATA-MASTER_LANGUAGE'
CHANGING
cs_service_binding = cs_service_binding ).
ENDMETHOD.

View File

@ -23,10 +23,10 @@ CLASS zcl_abapgit_object_sush DEFINITION
METHODS clear_metadata
CHANGING
cs_data_head TYPE any
ct_usobx TYPE table
ct_usobt TYPE table
ct_usobx_ext TYPE table
ct_usobt_ext TYPE table.
ct_usobx TYPE STANDARD TABLE
ct_usobt TYPE STANDARD TABLE
ct_usobx_ext TYPE STANDARD TABLE
ct_usobt_ext TYPE STANDARD TABLE.
ENDCLASS.

View File

@ -158,6 +158,8 @@ CLASS zcl_abapgit_object_ucsa IMPLEMENTATION.
tadir_delete( ).
corr_insert( iv_package ).
ENDMETHOD.
@ -195,6 +197,8 @@ CLASS zcl_abapgit_object_ucsa IMPLEMENTATION.
tadir_insert( iv_package ).
corr_insert( iv_package ).
CATCH cx_root INTO lx_root.
lv_text = lx_root->get_text( ).
zcx_abapgit_exception=>raise( lv_text ).

View File

@ -569,7 +569,7 @@ CLASS zcl_abapgit_object_ueno IMPLEMENTATION.
header = ls_docu-header
content = ls_docu-content
itf = ls_docu-itf
pstatus = lv_error_status.
pstatus = lv_error_status ##ARG_OK.
CHECK lv_error_status = 'S'. "Success

View File

@ -303,7 +303,7 @@ CLASS zcl_abapgit_object_wdca IMPLEMENTATION.
WHERE config_id = ls_outline-config_id
AND config_type = ls_outline-config_type
AND config_var = ls_outline-config_var.
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
" File not found
ENDTRY.

View File

@ -100,7 +100,7 @@ CLASS zcl_abapgit_object_xinx IMPLEMENTATION.
suppress_transport = 'X'
EXCEPTIONS
no_docu_found = 1
OTHERS = 2.
OTHERS = 2 ##FM_SUBRC_OK.
ENDMETHOD.
@ -317,6 +317,9 @@ CLASS zcl_abapgit_object_xinx IMPLEMENTATION.
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Error reading index' ).
ENDIF.
rv_bool = boolc( ls_dd12v IS NOT INITIAL ).

View File

@ -4,9 +4,6 @@ CLASS zcl_abapgit_objects DEFINITION
PUBLIC SECTION.
TYPES:
ty_types_tt TYPE SORTED TABLE OF tadir-object WITH UNIQUE KEY table_line .
CLASS-METHODS serialize
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
@ -71,7 +68,7 @@ CLASS zcl_abapgit_objects DEFINITION
VALUE(rv_bool) TYPE abap_bool .
CLASS-METHODS supported_list
RETURNING
VALUE(rt_types) TYPE ty_types_tt .
VALUE(rt_types) TYPE zif_abapgit_objects=>ty_types_tt.
CLASS-METHODS is_active
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
@ -663,7 +660,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
li_progress TYPE REF TO zif_abapgit_progress,
lv_path TYPE string,
lt_items TYPE zif_abapgit_definitions=>ty_items_tt,
lt_steps_id TYPE zif_abapgit_definitions=>ty_deserialization_step_tt,
lt_steps_id TYPE zif_abapgit_objects=>ty_deserialization_step_tt,
lt_steps TYPE zif_abapgit_objects=>ty_step_data_tt,
lx_exc TYPE REF TO zcx_abapgit_exception.
DATA lo_folder_logic TYPE REF TO zcl_abapgit_folder_logic.
@ -672,7 +669,7 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
DATA lo_abap_language_vers TYPE REF TO zcl_abapgit_abap_language_vers.
FIELD-SYMBOLS: <ls_result> TYPE zif_abapgit_definitions=>ty_result,
<lv_step_id> TYPE LINE OF zif_abapgit_definitions=>ty_deserialization_step_tt,
<lv_step_id> TYPE LINE OF zif_abapgit_objects=>ty_deserialization_step_tt,
<ls_step> TYPE LINE OF zif_abapgit_objects=>ty_step_data_tt,
<ls_deser> TYPE LINE OF zif_abapgit_objects=>ty_deserialization_tt.

View File

@ -29,7 +29,7 @@ CLASS ltcl_object_types IMPLEMENTATION.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item,
lv_exists TYPE abap_bool,
lt_types TYPE zcl_abapgit_objects=>ty_types_tt.
lt_types TYPE zif_abapgit_objects=>ty_types_tt.
FIELD-SYMBOLS: <lv_type> LIKE LINE OF lt_types.

View File

@ -601,7 +601,8 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
ENDIF.
ENDIF.
IF lv_state = c_state-inactive. "Textpool in main language needs to be activated
"Textpool in main language needs to be activated (not for FUGS/FUGX)
IF lv_state = c_state-inactive AND iv_program NP 'SAPLX*'.
zcl_abapgit_objects_activation=>add(
iv_type = 'REPT'
iv_name = iv_program
@ -650,7 +651,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
cancelled = 2
name_not_allowed = 3
permission_error = 4
OTHERS = 5.
OTHERS = 5 ##FM_SUBRC_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'RPY_PROGRAM_INSERT'
EXPORTING
@ -667,7 +668,7 @@ CLASS zcl_abapgit_objects_program IMPLEMENTATION.
cancelled = 2
name_not_allowed = 3
permission_error = 4
OTHERS = 5.
OTHERS = 5 ##FM_SUBRC_OK.
ENDTRY.
IF sy-subrc = 3.

View File

@ -191,7 +191,7 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
object_not_specified = 3
permission_failure = 4
dialog_needed = 5
OTHERS = 6.
OTHERS = 6 ##FM_SUBRC_OK.
CATCH cx_sy_dyn_call_param_not_found.
TRY.
" try to force deletion for APPENDs
@ -207,7 +207,7 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
object_not_specified = 3
permission_failure = 4
dialog_needed = 5
OTHERS = 6.
OTHERS = 6 ##FM_SUBRC_OK.
CATCH cx_sy_dyn_call_param_not_found.
" no_ask_delete_append and aie_force_deletion not available in lower releases
CALL FUNCTION 'RS_DD_DELETE_OBJ'
@ -221,7 +221,7 @@ CLASS zcl_abapgit_objects_super IMPLEMENTATION.
object_not_specified = 3
permission_failure = 4
dialog_needed = 5
OTHERS = 6.
OTHERS = 6 ##FM_SUBRC_OK.
ENDTRY.
ENDTRY.

View File

@ -1,12 +1,11 @@
INTERFACE zif_abapgit_object
PUBLIC .
INTERFACE zif_abapgit_object PUBLIC.
CONSTANTS:
BEGIN OF gc_step_id,
early TYPE zif_abapgit_definitions=>ty_deserialization_step VALUE `EARLY`,
abap TYPE zif_abapgit_definitions=>ty_deserialization_step VALUE `ABAP`,
ddic TYPE zif_abapgit_definitions=>ty_deserialization_step VALUE `DDIC`,
late TYPE zif_abapgit_definitions=>ty_deserialization_step VALUE `LATE`,
early TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'EARLY',
abap TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'ABAP',
ddic TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'DDIC',
late TYPE zif_abapgit_objects=>ty_deserialization_step VALUE 'LATE',
END OF gc_step_id.
METHODS serialize
@ -19,7 +18,7 @@ INTERFACE zif_abapgit_object
IMPORTING
!iv_package TYPE devclass
!io_xml TYPE REF TO zif_abapgit_xml_input
!iv_step TYPE zif_abapgit_definitions=>ty_deserialization_step
!iv_step TYPE zif_abapgit_objects=>ty_deserialization_step
!ii_log TYPE REF TO zif_abapgit_log
!iv_transport TYPE trkorr
RAISING
@ -78,7 +77,7 @@ INTERFACE zif_abapgit_object
METHODS get_deserialize_steps
RETURNING
VALUE(rt_steps) TYPE zif_abapgit_definitions=>ty_deserialization_step_tt .
VALUE(rt_steps) TYPE zif_abapgit_objects=>ty_deserialization_step_tt.
METHODS get_deserialize_order
IMPORTING

View File

@ -1,5 +1,4 @@
INTERFACE zif_abapgit_objects
PUBLIC.
INTERFACE zif_abapgit_objects PUBLIC.
TYPES:
BEGIN OF ty_serialization,
@ -15,9 +14,15 @@ INTERFACE zif_abapgit_objects
END OF ty_deserialization .
TYPES:
ty_deserialization_tt TYPE STANDARD TABLE OF ty_deserialization WITH DEFAULT KEY .
TYPES:
ty_types_tt TYPE SORTED TABLE OF tadir-object WITH UNIQUE KEY table_line.
TYPES:
ty_deserialization_step TYPE string.
TYPES:
ty_deserialization_step_tt TYPE STANDARD TABLE OF ty_deserialization_step WITH DEFAULT KEY.
TYPES:
BEGIN OF ty_step_data,
step_id TYPE zif_abapgit_definitions=>ty_deserialization_step,
step_id TYPE ty_deserialization_step,
order TYPE i,
descr TYPE string,
syntax_check TYPE abap_bool,

View File

@ -53,7 +53,7 @@ CLASS zcl_abapgit_persist_migrate IMPLEMENTATION.
TRY.
lcl_cua_interface=>new( )->put_own_cua( ls_cua ).
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDMETHOD.
@ -70,7 +70,7 @@ CLASS zcl_abapgit_persist_migrate IMPLEMENTATION.
TRY.
ls_own_cua = lcl_cua_interface=>new( )->get_own_cua( ).
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
IF ls_own_cua IS INITIAL.

View File

@ -19,12 +19,8 @@ CLASS zcl_abapgit_repo_filter DEFINITION
ct_files TYPE zif_abapgit_git_definitions=>ty_files_tt
RAISING
zcx_abapgit_exception.
PROTECTED SECTION.
METHODS filter_generated_tadir
CHANGING
!ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt .
PRIVATE SECTION.
ENDCLASS.
@ -41,8 +37,6 @@ CLASS zcl_abapgit_repo_filter IMPLEMENTATION.
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF ct_tadir.
filter_generated_tadir( CHANGING ct_tadir = ct_tadir ).
IF lines( it_filter ) = 0.
RETURN.
ENDIF.
@ -96,13 +90,6 @@ CLASS zcl_abapgit_repo_filter IMPLEMENTATION.
INSERT ls_tadir INTO TABLE lt_tadir.
filter_generated_tadir( CHANGING ct_tadir = lt_tadir ).
IF lt_tadir IS INITIAL.
DELETE ct_files.
CONTINUE.
ENDIF.
READ TABLE lt_filter TRANSPORTING NO FIELDS
WITH KEY object = ls_tadir-object
obj_name = ls_tadir-obj_name
@ -115,52 +102,4 @@ CLASS zcl_abapgit_repo_filter IMPLEMENTATION.
ENDLOOP.
ENDMETHOD.
METHOD filter_generated_tadir.
DATA: ls_tadir TYPE zif_abapgit_definitions=>ty_tadir,
ls_tadir_gen TYPE zif_abapgit_definitions=>ty_tadir,
lv_cd_object TYPE cdobjectcl,
lt_cd_names TYPE STANDARD TABLE OF cdnames,
ls_cd_names TYPE cdnames,
lt_tcdrs TYPE STANDARD TABLE OF tcdrs,
ls_tcdrs TYPE tcdrs.
LOOP AT ct_tadir INTO ls_tadir WHERE pgmid = 'R3TR' AND object = 'CHDO'.
CLEAR: lv_cd_object, lt_cd_names, ls_tadir_gen, lt_tcdrs, ls_tcdrs.
lv_cd_object = ls_tadir-obj_name.
CALL FUNCTION 'CDNAMES_GET'
EXPORTING
iv_object = lv_cd_object
TABLES
it_names = lt_cd_names
it_tcdrs = lt_tcdrs
EXCEPTIONS
object_space = 1
object_not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
LOOP AT lt_cd_names INTO ls_cd_names.
DELETE ct_tadir WHERE pgmid = 'R3TR'
AND ( ( object = 'PROG'
AND ( obj_name = ls_cd_names-repnamec
OR obj_name = ls_cd_names-repnamet
OR obj_name = ls_cd_names-repnamefix
OR obj_name = ls_cd_names-repnamevar ) )
OR object = 'FUGR' AND obj_name = ls_cd_names-fgrp ).
ENDLOOP.
LOOP AT lt_tcdrs INTO ls_tcdrs.
DELETE ct_tadir WHERE pgmid = 'R3TR' AND object = 'TABL' AND obj_name = ls_tcdrs-tabname.
ENDLOOP.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

View File

@ -136,7 +136,7 @@ CLASS zcl_abapgit_repo_labels IMPLEMENTATION.
TRY.
validate_one_label_color( <ls_c> ).
APPEND <ls_c> TO lt_normalized.
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDLOOP.
@ -225,7 +225,7 @@ CLASS zcl_abapgit_repo_labels IMPLEMENTATION.
ro_map->set(
iv_key = <ls_c>-label
iv_val = <ls_c>-color ).
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDLOOP.

View File

@ -192,7 +192,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
CLASS zcl_abapgit_repo IMPLEMENTATION.
METHOD bind_listener.
@ -402,7 +402,7 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
METHOD get_unsupported_objects_local.
DATA: lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt,
lt_supported_types TYPE zcl_abapgit_objects=>ty_types_tt.
lt_supported_types TYPE zif_abapgit_objects=>ty_types_tt.
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF lt_tadir,
<ls_object> LIKE LINE OF rt_objects.

View File

@ -115,7 +115,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION.
CLASS zcl_abapgit_gui IMPLEMENTATION.
METHOD back.
@ -373,7 +373,7 @@ CLASS ZCL_ABAPGIT_GUI IMPLEMENTATION.
li_modal ?= ii_page.
rv_yes = li_modal->is_modal( ).
ENDIF.
CATCH cx_sy_move_cast_error.
CATCH cx_sy_move_cast_error ##NO_HANDLER.
ENDTRY.
ENDMETHOD.

View File

@ -48,6 +48,7 @@ CLASS zcl_abapgit_html DEFINITION
within_style TYPE abap_bool,
within_js TYPE abap_bool,
within_textarea TYPE abap_bool,
within_pre TYPE abap_bool,
indent TYPE i,
indent_str TYPE string,
END OF ty_indent_context .
@ -59,6 +60,8 @@ CLASS zcl_abapgit_html DEFINITION
script_close TYPE abap_bool,
textarea_open TYPE abap_bool,
textarea_close TYPE abap_bool,
pre_open TYPE abap_bool,
pre_close TYPE abap_bool,
tag_close TYPE abap_bool,
curly_close TYPE abap_bool,
openings TYPE i,
@ -85,7 +88,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
CLASS zcl_abapgit_html IMPLEMENTATION.
METHOD checkbox.
@ -120,10 +123,6 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
ENDMETHOD.
METHOD set_debug_mode.
gv_debug_mode = iv_mode.
ENDMETHOD.
METHOD create.
CREATE OBJECT ri_instance TYPE zcl_abapgit_html.
IF iv_initial_chunk IS NOT INITIAL.
@ -181,6 +180,17 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
RETURN.
ENDIF.
" No indent for pre tags
IF ls_study-pre_open = abap_true.
cs_context-within_pre = abap_true.
RETURN.
ELSEIF ls_study-pre_close = abap_true.
cs_context-within_pre = abap_false.
RETURN.
ELSEIF cs_context-within_pre = abap_true.
RETURN.
ENDIF.
" First closing tag - shift back exceptionally
IF ( ls_study-script_close = abap_true
OR ls_study-style_close = abap_true
@ -239,6 +249,11 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
ENDMETHOD.
METHOD set_debug_mode.
gv_debug_mode = iv_mode.
ENDMETHOD.
METHOD study_line.
DATA: lv_line TYPE string,
@ -309,6 +324,16 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
ENDIF.
ENDIF.
" Pre (same assumptions as above)
IF is_context-within_pre = abap_true AND lv_len >= 5 AND lv_line(5) = '</PRE'.
rs_result-pre_close = abap_true.
ELSEIF is_context-within_pre = abap_false AND lv_len >= 4 AND lv_line(4) = '<PRE'.
FIND FIRST OCCURRENCE OF '</PRE' IN lv_line.
IF sy-subrc > 0. " Not found
rs_result-pre_open = abap_true.
ENDIF.
ENDIF.
ENDMETHOD.

View File

@ -34,6 +34,8 @@ CLASS ltcl_html DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
indent3 FOR TESTING RAISING zcx_abapgit_exception,
indent4 FOR TESTING RAISING zcx_abapgit_exception,
indent5 FOR TESTING RAISING zcx_abapgit_exception,
indent6 FOR TESTING RAISING zcx_abapgit_exception,
indent7 FOR TESTING RAISING zcx_abapgit_exception,
style1 FOR TESTING RAISING zcx_abapgit_exception.
METHODS:
@ -130,6 +132,59 @@ CLASS ltcl_html IMPLEMENTATION.
ENDMETHOD.
METHOD indent6.
" Content of textarea must not be indented
DATA lv_exp TYPE string.
mo_html->add( '<td>' ).
mo_html->add( '<textarea name="body" rows="10" cols="72">' ).
mo_html->add( 'Some default' ).
mo_html->add( 'content' ).
mo_html->add( '</textarea>' ).
mo_html->add( '</td>' ).
lv_exp = '<td>' && cl_abap_char_utilities=>newline &&
'<textarea name="body" rows="10" cols="72">' && cl_abap_char_utilities=>newline &&
'Some default' && cl_abap_char_utilities=>newline &&
'content' && cl_abap_char_utilities=>newline &&
'</textarea>' && cl_abap_char_utilities=>newline &&
'</td>'.
cl_abap_unit_assert=>assert_equals(
act = mo_html->render( )
exp = lv_exp ).
ENDMETHOD.
METHOD indent7.
" Content of pre tag must not be indented
DATA lv_exp TYPE string.
mo_html->add( '<td>' ).
mo_html->add( '<pre>' ).
mo_html->add( 'Do not change' ).
mo_html->add( ' the indent' ).
mo_html->add( ' here' ).
mo_html->add( '</pre>' ).
mo_html->add( '</td>' ).
lv_exp = '<td>' && cl_abap_char_utilities=>newline &&
'<pre>' && cl_abap_char_utilities=>newline &&
'Do not change' && cl_abap_char_utilities=>newline &&
' the indent' && cl_abap_char_utilities=>newline &&
' here' && cl_abap_char_utilities=>newline &&
'</pre>' && cl_abap_char_utilities=>newline &&
'</td>'.
cl_abap_unit_assert=>assert_equals(
act = mo_html->render( )
exp = lv_exp ).
ENDMETHOD.
METHOD style1.
DATA lv_exp TYPE string.

View File

@ -146,6 +146,7 @@ CLASS zcl_abapgit_exception_viewer IMPLEMENTATION.
METHOD goto_message.
DATA: lv_msg TYPE c LENGTH 100.
DATA: lt_bdcdata TYPE STANDARD TABLE OF bdcdata,
ls_bdcdata LIKE LINE OF lt_bdcdata.
@ -182,12 +183,13 @@ CLASS zcl_abapgit_exception_viewer IMPLEMENTATION.
TABLES
using_tab = lt_bdcdata
EXCEPTIONS
call_transaction_denied = 1
tcode_invalid = 2
OTHERS = 3.
system_failure = 1 MESSAGE lv_msg
communication_failure = 2 MESSAGE lv_msg
resource_failure = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
zcx_abapgit_exception=>raise( lv_msg ).
ENDIF.
ENDMETHOD.

View File

@ -243,7 +243,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION.
METHOD class_constructor.
@ -261,7 +261,7 @@ CLASS ZCL_ABAPGIT_GUI_CHUNK_LIB IMPLEMENTATION.
timezone = gv_time_zone
EXCEPTIONS
customizing_missing = 1
OTHERS = 2.
OTHERS = 2 ##FM_SUBRC_OK.
ENDTRY.
ENDMETHOD.

View File

@ -54,7 +54,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_HOC IMPLEMENTATION.
CLASS zcl_abapgit_gui_page_hoc IMPLEMENTATION.
METHOD constructor.
@ -96,14 +96,14 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_HOC IMPLEMENTATION.
IF ls_control-page_menu_provider IS NOT BOUND. " try component itself
TRY.
ls_control-page_menu_provider ?= ii_child_component.
CATCH cx_sy_move_cast_error.
CATCH cx_sy_move_cast_error ##NO_HANDLER.
ENDTRY.
ENDIF.
IF ls_control-page_title_provider IS NOT BOUND. " try component itself
TRY.
ls_control-page_title_provider ?= ii_child_component.
CATCH cx_sy_move_cast_error.
CATCH cx_sy_move_cast_error ##NO_HANDLER.
ENDTRY.
ENDIF.
@ -132,7 +132,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_HOC IMPLEMENTATION.
TRY.
li_modal ?= mi_child.
rv_is_modal = li_modal->is_modal( ).
CATCH cx_sy_move_cast_error.
CATCH cx_sy_move_cast_error ##NO_HANDLER.
ENDTRY.
ENDMETHOD.
@ -141,7 +141,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_HOC IMPLEMENTATION.
METHOD detect_title_provider.
TRY.
ri_ref ?= mi_child.
CATCH cx_sy_move_cast_error.
CATCH cx_sy_move_cast_error ##NO_HANDLER.
ENDTRY.
ENDMETHOD.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_GUI_PICKLIST</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Pick from list</DESCRIPT>
<DESCRIPT>abapGit - GUI Pick List</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -30,6 +30,8 @@ CLASS zcl_abapgit_log_viewer DEFINITION
source TYPE icon_d,
callstack TYPE icon_d,
cell_type TYPE salv_t_int4_column,
id TYPE sy-msgid,
number TYPE sy-msgno,
END OF ty_log_out.
TYPES:
ty_log_outs TYPE STANDARD TABLE OF ty_log_out
@ -91,7 +93,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION.
CLASS zcl_abapgit_log_viewer IMPLEMENTATION.
METHOD calculate_cell_type.
@ -268,6 +270,10 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION.
CATCH cx_sy_move_cast_error ##NO_HANDLER.
ENDTRY.
ELSEIF lr_message->id IS NOT INITIAL AND lr_message->number IS NOT INITIAL.
ls_log-id = lr_message->id.
ls_log-number = lr_message->number.
ls_log-longtext = icon_system_help.
ENDIF.
ls_log-obj_type = lr_message->obj_type.
@ -387,6 +393,16 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION.
lo_column->set_technical( abap_true ).
ENDIF.
LOOP AT gt_log TRANSPORTING NO FIELDS WHERE id IS NOT INITIAL.
EXIT.
ENDLOOP.
IF sy-subrc <> 0.
lo_column = lo_columns->get_column( |ID| ).
lo_column->set_technical( abap_true ).
lo_column = lo_columns->get_column( |NUMBER| ).
lo_column->set_technical( abap_true ).
ENDIF.
ls_position = zcl_abapgit_popups=>center(
iv_width = 125
iv_height = 20 ).
@ -424,31 +440,34 @@ CLASS ZCL_ABAPGIT_LOG_VIEWER IMPLEMENTATION.
lt_dummy2 TYPE TABLE OF dval,
ls_help_info TYPE help_info.
IF is_log-exception IS NOT BOUND.
RETURN.
ENDIF.
IF is_log-exception IS BOUND.
TRY.
lx_abapgit ?= is_log-exception.
CATCH cx_sy_move_cast_error.
RETURN.
ENDTRY.
lv_docu_object = lx_abapgit->if_t100_message~t100key-msgid.
lv_docu_object+2 = lx_abapgit->if_t100_message~t100key-msgno.
ls_help_info-call = 'D'.
ls_help_info-spras = sy-langu.
lv_docu_object = lx_abapgit->if_t100_message~t100key-msgid && lx_abapgit->if_t100_message~t100key-msgno.
ls_help_info-messageid = lx_abapgit->if_t100_message~t100key-msgid.
ls_help_info-messagenr = lx_abapgit->if_t100_message~t100key-msgno.
ls_help_info-message = is_log-msg.
ls_help_info-title = 'Longtext'.
ls_help_info-docuid = 'NA'.
ls_help_info-docuobject = lv_docu_object.
ls_help_info-msgv1 = lx_abapgit->msgv1.
ls_help_info-msgv2 = lx_abapgit->msgv2.
ls_help_info-msgv3 = lx_abapgit->msgv3.
ls_help_info-msgv4 = lx_abapgit->msgv4.
ELSEIF is_log-id IS NOT INITIAL AND is_log-number IS NOT INITIAL.
lv_docu_object = is_log-id && is_log-number.
ls_help_info-messageid = is_log-id.
ls_help_info-messagenr = is_log-number.
ELSE.
RETURN.
ENDIF.
ls_help_info-call = 'D'.
ls_help_info-spras = sy-langu.
ls_help_info-message = is_log-msg.
ls_help_info-title = 'Longtext'.
ls_help_info-docuid = 'NA'.
ls_help_info-docuobject = condense( lv_docu_object ).
CALL FUNCTION 'HELP_START'
EXPORTING

View File

@ -127,7 +127,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_CODI_BASE IMPLEMENTATION.
CLASS zcl_abapgit_gui_page_codi_base IMPLEMENTATION.
METHOD apply_filter_kind.
@ -256,7 +256,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_CODI_BASE IMPLEMENTATION.
ENDIF.
ENDCASE.
CATCH cx_root.
CATCH cx_root ##NO_HANDLER.
" leave empty, fallback to default, defined elsewhere
ENDTRY.
@ -340,7 +340,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_CODI_BASE IMPLEMENTATION.
RETURN.
ENDIF.
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
TRY.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_GUI_PAGE_WHEREUSED</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit where-used page</DESCRIPT>
<DESCRIPT>abapGit - GUI Where-used</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -422,7 +422,7 @@ CLASS zcl_abapgit_gui_page_sett_info IMPLEMENTATION.
DATA:
ls_stats TYPE ty_stats,
ls_item TYPE zif_abapgit_definitions=>ty_item,
lt_supported_types TYPE zcl_abapgit_objects=>ty_types_tt.
lt_supported_types TYPE zif_abapgit_objects=>ty_types_tt.
ls_stats-measure = 'Number of Objects'.

View File

@ -317,7 +317,7 @@ CLASS zcl_abapgit_gui_page_sett_pers IMPLEMENTATION.
lo_colors->set(
iv_key = lv_l
iv_val = lv_l ).
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDLOOP.

View File

@ -298,15 +298,15 @@ CLASS zcl_abapgit_gui_page_debuginfo IMPLEMENTATION.
DATA: lv_list TYPE string,
li_html TYPE REF TO zif_abapgit_html,
lt_types TYPE zcl_abapgit_objects=>ty_types_tt,
lt_types TYPE zif_abapgit_objects=>ty_types_tt,
lv_type LIKE LINE OF lt_types,
lt_obj TYPE STANDARD TABLE OF ko100 WITH DEFAULT KEY,
lv_class TYPE seoclsname,
li_object TYPE REF TO zif_abapgit_object,
ls_item TYPE zif_abapgit_definitions=>ty_item,
ls_metadata TYPE zif_abapgit_definitions=>ty_metadata,
lv_step TYPE zif_abapgit_definitions=>ty_deserialization_step,
lt_steps TYPE zif_abapgit_definitions=>ty_deserialization_step_tt.
lv_step TYPE zif_abapgit_objects=>ty_deserialization_step,
lt_steps TYPE zif_abapgit_objects=>ty_deserialization_step_tt.
FIELD-SYMBOLS: <ls_obj> TYPE ko100.

View File

@ -528,7 +528,10 @@ CLASS zcl_abapgit_gui_page_patch IMPLEMENTATION.
lv_patched TYPE abap_bool,
lv_is_patch_possible TYPE abap_bool.
" In case an object is falsely detected as changed, filename is empty and there's no diff object
IF iv_filename IS NOT INITIAL.
lv_patched = get_diff_object( iv_filename )->is_line_patched( iv_index ).
ENDIF.
lv_is_patch_possible = is_patch_line_possible( is_diff_line ).

View File

@ -137,7 +137,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION.
METHOD check_selected.
@ -281,7 +281,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
es_item = ls_item ).
ls_changed_by-item = ls_item.
INSERT ls_changed_by INTO TABLE lt_changed_by_remote.
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDLOOP.
@ -348,7 +348,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
rt_transports = li_cts_api->get_transports_for_list( lt_items ).
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDMETHOD.

View File

@ -22,6 +22,7 @@ CLASS zcl_abapgit_popup_branch_list DEFINITION
!iv_default_branch TYPE string OPTIONAL
!iv_show_new_option TYPE abap_bool DEFAULT abap_false.
PROTECTED SECTION.
PRIVATE SECTION.
DATA mv_repo_url TYPE string.
@ -41,15 +42,6 @@ ENDCLASS.
CLASS zcl_abapgit_popup_branch_list IMPLEMENTATION.
METHOD create.
CREATE OBJECT ri_popup TYPE zcl_abapgit_popup_branch_list
EXPORTING
iv_url = iv_url
iv_default_branch = iv_default_branch
iv_show_new_option = iv_show_new_option.
ENDMETHOD.
METHOD constructor.
mv_repo_url = iv_url.
mv_default_branch = zif_abapgit_git_definitions=>c_git_branch-heads_prefix && iv_default_branch.
@ -57,14 +49,12 @@ CLASS zcl_abapgit_popup_branch_list IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_html_popup~create_picklist.
CREATE OBJECT ro_picklist
METHOD create.
CREATE OBJECT ri_popup TYPE zcl_abapgit_popup_branch_list
EXPORTING
iv_title = 'Choose Branch'
it_list = fetch_branch_list( )
ii_item_renderer = me.
iv_url = iv_url
iv_default_branch = iv_default_branch
iv_show_new_option = iv_show_new_option.
ENDMETHOD.
@ -109,7 +99,6 @@ CLASS zcl_abapgit_popup_branch_list IMPLEMENTATION.
FIELD-SYMBOLS <ls_b> TYPE zif_abapgit_git_definitions=>ty_git_branch.
ASSIGN iv_item TO <ls_b>.
ASSERT sy-subrc = 0.
" TODO render mv_default_branch properly, needs respecting support from the picklist components
@ -120,4 +109,15 @@ CLASS zcl_abapgit_popup_branch_list IMPLEMENTATION.
ri_html = zcl_abapgit_html=>create( |{ <ls_b>-display_name }{ lv_head_marker }| ).
ENDMETHOD.
METHOD zif_abapgit_html_popup~create_picklist.
CREATE OBJECT ro_picklist
EXPORTING
iv_title = 'Choose Branch'
it_list = fetch_branch_list( )
ii_item_renderer = me.
ENDMETHOD.
ENDCLASS.

View File

@ -24,7 +24,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_POPUP_CODE_INSP IMPLEMENTATION.
CLASS zcl_abapgit_popup_code_insp IMPLEMENTATION.
METHOD create.
@ -44,7 +44,6 @@ CLASS ZCL_ABAPGIT_POPUP_CODE_INSP IMPLEMENTATION.
FIELD-SYMBOLS <ls_item> TYPE LINE OF zif_abapgit_code_inspector=>ty_variants.
ASSIGN iv_item TO <ls_item>.
ASSERT sy-subrc = 0.
ri_html = zcl_abapgit_html=>create( |<b>{ <ls_item>-name }</b> - { <ls_item>-description }| ).

View File

@ -67,7 +67,6 @@ CLASS zcl_abapgit_popup_pull_request IMPLEMENTATION.
FIELD-SYMBOLS <ls_pr> TYPE zif_abapgit_pr_enum_provider=>ty_pull_request.
ASSIGN iv_item TO <ls_pr>.
ASSERT sy-subrc = 0.
ri_html = zcl_abapgit_html=>create( |<b>{ <ls_pr>-number }</b> - { <ls_pr>-title } @{ <ls_pr>-user }| ).

View File

@ -18,6 +18,7 @@ CLASS zcl_abapgit_popup_tag_list DEFINITION
IMPORTING
iv_url TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
DATA mv_repo_url TYPE string.
@ -34,26 +35,15 @@ ENDCLASS.
CLASS zcl_abapgit_popup_tag_list IMPLEMENTATION.
METHOD create.
CREATE OBJECT ri_popup TYPE zcl_abapgit_popup_tag_list
EXPORTING
iv_url = iv_url.
ENDMETHOD.
METHOD constructor.
mv_repo_url = iv_url.
ENDMETHOD.
METHOD zif_abapgit_html_popup~create_picklist.
CREATE OBJECT ro_picklist
METHOD create.
CREATE OBJECT ri_popup TYPE zcl_abapgit_popup_tag_list
EXPORTING
iv_title = 'Choose Tag'
it_list = fetch_tag_list( )
ii_item_renderer = me.
iv_url = iv_url.
ENDMETHOD.
@ -80,9 +70,19 @@ CLASS zcl_abapgit_popup_tag_list IMPLEMENTATION.
FIELD-SYMBOLS <ls_tag> TYPE zif_abapgit_git_definitions=>ty_git_branch.
ASSIGN iv_item TO <ls_tag>.
ASSERT sy-subrc = 0.
ri_html = zcl_abapgit_html=>create( |{ <ls_tag>-display_name }| ).
ENDMETHOD.
METHOD zif_abapgit_html_popup~create_picklist.
CREATE OBJECT ro_picklist
EXPORTING
iv_title = 'Choose Tag'
it_list = fetch_tag_list( )
ii_item_renderer = me.
ENDMETHOD.
ENDCLASS.

View File

@ -186,7 +186,8 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
EXCEPTIONS
communication_failure = 1 MESSAGE lv_msg
system_failure = 2 MESSAGE lv_msg
OTHERS = 3.
resource_failure = 3
OTHERS = 4.
IF sy-subrc <> 0.
lv_msg = |Error starting transaction { iv_tcode }: { lv_msg }|.
MESSAGE lv_msg TYPE 'I'.
@ -478,6 +479,22 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
ENDMETHOD.
METHOD go_stage_transport.
DATA lt_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt.
DATA lo_repo TYPE REF TO zcl_abapgit_repo.
lt_r_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_select_wb_tc_tr_and_tsk( ).
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
CREATE OBJECT ro_filter.
ro_filter->set_filter_values( iv_package = lo_repo->get_package( )
it_r_trkorr = lt_r_trkorr ).
ENDMETHOD.
METHOD jump_display_transport.
DATA:
@ -762,6 +779,28 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
ENDMETHOD.
METHOD zip_export_transport.
DATA lo_obj_filter_trans TYPE REF TO zcl_abapgit_object_filter_tran.
DATA lt_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt.
DATA lo_repo TYPE REF TO zcl_abapgit_repo.
DATA lv_xstr TYPE xstring.
lt_r_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_select_wb_tc_tr_and_tsk( ).
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
lo_repo->refresh( ).
CREATE OBJECT lo_obj_filter_trans.
lo_obj_filter_trans->set_filter_values( iv_package = lo_repo->get_package( )
it_r_trkorr = lt_r_trkorr ).
lv_xstr = zcl_abapgit_zip=>encode_files( lo_repo->get_files_local_filtered( lo_obj_filter_trans ) ).
lo_repo->refresh( ).
file_download( iv_package = lo_repo->get_package( )
iv_xstr = lv_xstr ).
ENDMETHOD.
METHOD zip_services.
DATA: lv_key TYPE zif_abapgit_persistence=>ty_repo-key,
@ -860,40 +899,4 @@ CLASS zcl_abapgit_gui_router IMPLEMENTATION.
ENDCASE.
ENDMETHOD.
METHOD zip_export_transport.
DATA lo_obj_filter_trans TYPE REF TO zcl_abapgit_object_filter_tran.
DATA lt_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt.
DATA lo_repo TYPE REF TO zcl_abapgit_repo.
DATA lv_xstr TYPE xstring.
lt_r_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_select_wb_tc_tr_and_tsk( ).
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
lo_repo->refresh( ).
CREATE OBJECT lo_obj_filter_trans.
lo_obj_filter_trans->set_filter_values( iv_package = lo_repo->get_package( )
it_r_trkorr = lt_r_trkorr ).
lv_xstr = zcl_abapgit_zip=>encode_files( lo_repo->get_files_local_filtered( lo_obj_filter_trans ) ).
lo_repo->refresh( ).
file_download( iv_package = lo_repo->get_package( )
iv_xstr = lv_xstr ).
ENDMETHOD.
METHOD go_stage_transport.
DATA lt_r_trkorr TYPE zif_abapgit_definitions=>ty_trrngtrkor_tt.
DATA lo_repo TYPE REF TO zcl_abapgit_repo.
lt_r_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_select_wb_tc_tr_and_tsk( ).
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
CREATE OBJECT ro_filter.
ro_filter->set_filter_values( iv_package = lo_repo->get_package( )
it_r_trkorr = lt_r_trkorr ).
ENDMETHOD.
ENDCLASS.

View File

@ -263,4 +263,4 @@ div.log { color: var(--theme-greyscale-dark); }
.dialog input[readonly] {
background-color: var(--theme-greyscale-dark);
color: var(--theme-greyscale-medium);
}
}

View File

@ -248,7 +248,7 @@ CLASS lcl_object_decision_list IMPLEMENTATION.
TRY.
lo_columns->get_column( |{ c_fieldname_obj_type }| ).
lv_object_list = abap_true.
CATCH cx_salv_not_found.
CATCH cx_salv_not_found ##NO_HANDLER.
ENDTRY.
setup_columns(

View File

@ -12,7 +12,7 @@ INTERFACE zif_abapgit_popups
show_icon TYPE abap_bool,
center TYPE abap_bool,
END OF ty_alv_column,
ty_alv_column_tt TYPE TABLE OF ty_alv_column WITH DEFAULT KEY.
ty_alv_column_tt TYPE STANDARD TABLE OF ty_alv_column WITH DEFAULT KEY.
TYPES:
BEGIN OF ty_popup_position,

View File

@ -85,7 +85,7 @@ CLASS zcl_abapgit_convert DEFINITION
VALUE(rv_xstr) TYPE xstring .
CLASS-METHODS xstring_to_bintab
IMPORTING
!iv_xstr TYPE xstring
!iv_xstr TYPE xsequence
EXPORTING
!ev_size TYPE i
!et_bintab TYPE STANDARD TABLE .
@ -144,6 +144,7 @@ ENDCLASS.
CLASS zcl_abapgit_convert IMPLEMENTATION.
METHOD base64_to_xstring.
rv_xstr = cl_http_utility=>decode_x_base64( iv_base64 ).
@ -207,32 +208,6 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
ENDMETHOD.
METHOD language_sap1_to_bcp47.
DATA lv_converter_instance TYPE REF TO object.
DATA lv_converter_class_name TYPE string VALUE `CL_AFF_LANGUAGE_CONVERTER`.
TRY.
CALL METHOD (lv_converter_class_name)=>create_instance
RECEIVING
result = lv_converter_instance.
TRY.
CALL METHOD lv_converter_instance->(`IF_AFF_LANGUAGE_CONVERTER~SAP1_TO_BCP47`)
EXPORTING
language = im_lang_sap1
RECEIVING
result = re_lang_bcp47.
CATCH cx_static_check.
RAISE no_assignment.
ENDTRY.
CATCH cx_sy_dyn_call_error.
TRY.
re_lang_bcp47 = lcl_bcp47_language_table=>sap1_to_bcp47( im_lang_sap1 ).
CATCH zcx_abapgit_exception.
RAISE no_assignment.
ENDTRY.
ENDTRY.
ENDMETHOD.
METHOD language_bcp47_to_sap1.
DATA lv_converter_instance TYPE REF TO object.
@ -289,6 +264,35 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
ENDTRY.
ENDMETHOD.
METHOD language_sap1_to_bcp47.
DATA lv_converter_instance TYPE REF TO object.
DATA lv_converter_class_name TYPE string VALUE `CL_AFF_LANGUAGE_CONVERTER`.
TRY.
CALL METHOD (lv_converter_class_name)=>create_instance
RECEIVING
result = lv_converter_instance.
TRY.
CALL METHOD lv_converter_instance->(`IF_AFF_LANGUAGE_CONVERTER~SAP1_TO_BCP47`)
EXPORTING
language = im_lang_sap1
RECEIVING
result = re_lang_bcp47.
CATCH cx_static_check.
RAISE no_assignment.
ENDTRY.
CATCH cx_sy_dyn_call_error.
TRY.
re_lang_bcp47 = lcl_bcp47_language_table=>sap1_to_bcp47( im_lang_sap1 ).
CATCH zcx_abapgit_exception.
RAISE no_assignment.
ENDTRY.
ENDTRY.
ENDMETHOD.
METHOD language_sap1_to_sap2.
TRY.
@ -381,6 +385,42 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
ENDMETHOD.
METHOD uccp.
DATA lv_class TYPE string.
DATA lv_xstr TYPE xstring.
DATA lo_instance TYPE REF TO object.
lv_class = 'CL_ABAP_CONV_IN_CE'.
TRY.
CALL METHOD (lv_class)=>uccp
EXPORTING
uccp = iv_uccp
RECEIVING
char = rv_char.
CATCH cx_sy_dyn_call_illegal_class.
lv_xstr = iv_uccp.
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
EXPORTING
codepage = 'UTF-16'
RECEIVING
instance = lo_instance.
* convert endianness
CONCATENATE lv_xstr+1(1) lv_xstr(1) INTO lv_xstr IN BYTE MODE.
CALL METHOD lo_instance->('IF_ABAP_CONV_IN~CONVERT')
EXPORTING
source = lv_xstr
RECEIVING
result = rv_char.
ENDTRY.
ENDMETHOD.
METHOD xstring_remove_bom.
rv_xstr = iv_xstr.
@ -405,10 +445,13 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
FIELD-SYMBOLS <lg_line> TYPE any.
CLEAR et_bintab.
ev_size = xstrlen( iv_xstr ).
IF iv_xstr IS INITIAL.
RETURN.
ENDIF.
APPEND INITIAL LINE TO et_bintab ASSIGNING <lg_line>.
lv_struct = boolc(
cl_abap_typedescr=>describe_by_data( <lg_line> )->type_kind = cl_abap_typedescr=>typekind_struct1 ).
@ -418,7 +461,9 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
<lg_line> = iv_xstr.
lv_length = cl_abap_typedescr=>describe_by_data( <lg_line> )->length.
lv_iterations = ev_size DIV lv_length.
ASSERT lv_length > 0.
lv_iterations = ( ev_size - 1 ) DIV lv_length.
DO lv_iterations TIMES.
lv_offset = sy-index * lv_length.
@ -493,39 +538,4 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
GET BIT 8 OF iv_x INTO rv_bitbyte+7(1).
ENDMETHOD.
METHOD uccp.
DATA lv_class TYPE string.
DATA lv_xstr TYPE xstring.
DATA lo_instance TYPE REF TO object.
lv_class = 'CL_ABAP_CONV_IN_CE'.
TRY.
CALL METHOD (lv_class)=>uccp
EXPORTING
uccp = iv_uccp
RECEIVING
char = rv_char.
CATCH cx_sy_dyn_call_illegal_class.
lv_xstr = iv_uccp.
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
EXPORTING
codepage = 'UTF-16'
RECEIVING
instance = lo_instance.
* convert endianness
CONCATENATE lv_xstr+1(1) lv_xstr(1) INTO lv_xstr IN BYTE MODE.
CALL METHOD lo_instance->('IF_ABAP_CONV_IN~CONVERT')
EXPORTING
source = lv_xstr
RECEIVING
result = rv_char.
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -125,16 +125,22 @@ CLASS lcl_bcp47_language_table DEFINITION CREATE PRIVATE.
bcp47_code TYPE string,
END OF ty_language_mapping,
ty_language_mappings TYPE STANDARD TABLE OF ty_language_mapping WITH DEFAULT KEY.
CLASS-DATA gv_language_mappings TYPE ty_language_mappings.
CLASS-DATA gt_language_mappings TYPE ty_language_mappings.
CLASS-METHODS:
sap1_to_sap2
IMPORTING im_sap1 TYPE sy-langu
RETURNING VALUE(re_sap2) TYPE laiso
RAISING zcx_abapgit_exception,
IMPORTING
im_sap1 TYPE sy-langu
RETURNING
VALUE(re_sap2) TYPE laiso
RAISING
zcx_abapgit_exception,
sap2_to_sap1
IMPORTING im_sap2 TYPE laiso
RETURNING VALUE(re_sap1) TYPE sy-langu
RAISING zcx_abapgit_exception,
IMPORTING
im_sap2 TYPE laiso
RETURNING
VALUE(re_sap1) TYPE sy-langu
RAISING
zcx_abapgit_exception,
sap1_to_bcp47
IMPORTING
im_sap1 TYPE sy-langu
@ -168,11 +174,11 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION.
METHOD sap1_to_bcp47.
DATA lv_language_mapping TYPE ty_language_mapping.
IF gv_language_mappings IS INITIAL OR lines( gv_language_mappings ) = 0.
IF gt_language_mappings IS INITIAL OR lines( gt_language_mappings ) = 0.
fill_language_mappings( ).
ENDIF.
LOOP AT gv_language_mappings INTO lv_language_mapping WHERE sap1_code = im_sap1.
LOOP AT gt_language_mappings INTO lv_language_mapping WHERE sap1_code = im_sap1.
IF re_bcp47 IS INITIAL OR strlen( re_bcp47 ) > strlen( lv_language_mapping-bcp47_code ).
re_bcp47 = lv_language_mapping-bcp47_code.
ENDIF.
@ -186,11 +192,11 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION.
METHOD bcp47_to_sap1.
DATA lv_language_mapping TYPE ty_language_mapping.
IF gv_language_mappings IS INITIAL OR lines( gv_language_mappings ) = 0.
IF gt_language_mappings IS INITIAL OR lines( gt_language_mappings ) = 0.
fill_language_mappings( ).
ENDIF.
LOOP AT gv_language_mappings INTO lv_language_mapping.
LOOP AT gt_language_mappings INTO lv_language_mapping.
IF to_lower( lv_language_mapping-bcp47_code ) = to_lower( im_bcp47 ) AND re_sap1 IS INITIAL.
re_sap1 = lv_language_mapping-sap1_code.
ENDIF.
@ -205,26 +211,26 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION.
METHOD sap1_to_sap2.
DATA lv_language_mapping TYPE ty_language_mapping.
IF gv_language_mappings IS INITIAL.
IF gt_language_mappings IS INITIAL.
fill_language_mappings( ).
ENDIF.
READ TABLE gv_language_mappings WITH KEY sap1_code = im_sap1 INTO lv_language_mapping.
READ TABLE gt_language_mappings WITH KEY sap1_code = im_sap1 INTO lv_language_mapping.
re_sap2 = lv_language_mapping-sap2_code.
IF re_sap2 IS INITIAL.
zcx_abapgit_exception=>raise( |Could not convert SAP1 language code { im_sap1 } to SAP2 language code.| ).
zcx_abapgit_exception=>raise( |Could not map SAP1 language code { im_sap1 } to SAP2 language code.| ).
ENDIF.
ENDMETHOD.
METHOD sap2_to_sap1.
DATA lv_language_mapping TYPE ty_language_mapping.
IF gv_language_mappings IS INITIAL.
IF gt_language_mappings IS INITIAL.
fill_language_mappings( ).
ENDIF.
READ TABLE gv_language_mappings WITH KEY sap2_code = im_sap2 INTO lv_language_mapping.
READ TABLE gt_language_mappings WITH KEY sap2_code = im_sap2 INTO lv_language_mapping.
re_sap1 = lv_language_mapping-sap1_code.
IF re_sap1 IS INITIAL.
@ -237,7 +243,13 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION.
DATA lv_sap1 TYPE sy-langu.
IF strlen( im_sap1 ) = 4.
TRY.
lv_sap1 = zcl_abapgit_convert=>uccp( im_sap1 ).
CATCH cx_root.
" Language is not supported in this system -> ignore it
" Should someone try to use the language in a repo, it will result in an error (see above)
RETURN.
ENDTRY.
ELSEIF strlen( im_sap1 ) = 1.
lv_sap1 = im_sap1.
ENDIF.
@ -246,7 +258,7 @@ CLASS lcl_bcp47_language_table IMPLEMENTATION.
lv_line-sap2_code = im_sap2.
lv_line-sap1_code = lv_sap1.
APPEND lv_line TO gv_language_mappings.
APPEND lv_line TO gt_language_mappings.
CLEAR lv_line.
ENDMETHOD.

View File

@ -19,6 +19,9 @@ CLASS ltcl_convert DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FIN
METHODS string_to_xstring FOR TESTING RAISING zcx_abapgit_exception.
METHODS xstring_to_bintab FOR TESTING.
METHODS xstring_to_bintab_with_field FOR TESTING.
METHODS xstring_to_bintab_initial FOR TESTING.
METHODS xstring_to_bintab_long FOR TESTING.
METHODS xstring_to_bintab_exact FOR TESTING.
ENDCLASS.
@ -74,6 +77,89 @@ CLASS ltcl_convert IMPLEMENTATION.
ENDMETHOD.
METHOD xstring_to_bintab_initial.
DATA lt_bintab TYPE TABLE OF w3mime.
DATA lv_size TYPE i.
DATA lv_xstr TYPE xstring.
zcl_abapgit_convert=>xstring_to_bintab(
EXPORTING
iv_xstr = lv_xstr
IMPORTING
ev_size = lv_size
et_bintab = lt_bintab ).
cl_abap_unit_assert=>assert_equals(
act = lv_size
exp = 0 ).
cl_abap_unit_assert=>assert_equals(
act = lines( lt_bintab )
exp = 0 ).
ENDMETHOD.
METHOD xstring_to_bintab_long.
DATA lt_bintab TYPE TABLE OF w3mime. " x(255)
DATA lv_bin LIKE LINE OF lt_bintab.
DATA lv_size TYPE i.
DATA lv_xstr TYPE xstring.
lv_xstr = repeat(
val = '1122334455'
occ = 200 ).
zcl_abapgit_convert=>xstring_to_bintab(
EXPORTING
iv_xstr = lv_xstr
IMPORTING
ev_size = lv_size
et_bintab = lt_bintab ).
cl_abap_unit_assert=>assert_equals(
act = lv_size
exp = 1000 ).
cl_abap_unit_assert=>assert_equals(
act = lines( lt_bintab )
exp = 4 ).
READ TABLE lt_bintab INTO lv_bin INDEX 4.
cl_abap_unit_assert=>assert_equals(
act = lv_bin-line+230(10)
exp = '11223344550000000000' ).
ENDMETHOD.
METHOD xstring_to_bintab_exact.
TYPES ty_line TYPE x LENGTH 5.
DATA lv_xdata TYPE x LENGTH 10.
DATA lt_bintab TYPE TABLE OF ty_line.
DATA lv_size TYPE i.
lv_xdata = '1122334455FFEEDDCCBB'.
" must not dump if content fits exactly into bintab
zcl_abapgit_convert=>xstring_to_bintab(
EXPORTING
iv_xstr = lv_xdata
IMPORTING
ev_size = lv_size
et_bintab = lt_bintab ).
cl_abap_unit_assert=>assert_equals(
act = lv_size
exp = 10 ).
cl_abap_unit_assert=>assert_equals(
act = lines( lt_bintab )
exp = 2 ).
ENDMETHOD.
METHOD string_to_xstring.
@ -331,12 +417,15 @@ CLASS ltcl_bcp47_to_sap1 IMPLEMENTATION.
DATA lv_result TYPE sy-langu.
lv_result = zcl_abapgit_convert=>language_bcp47_to_sap1( im_from ).
cl_abap_unit_assert=>assert_equals( exp = im_to
act = lv_result ).
cl_abap_unit_assert=>assert_equals(
exp = im_to
act = lv_result
msg = |Converting "{ im_from }" should result in "{ im_to }"| ).
ENDMETHOD.
METHOD assert_bcp47_to_sap1_fail.
DATA lv_result TYPE string.
DATA lv_act TYPE sy-subrc.
zcl_abapgit_convert=>language_bcp47_to_sap1(
EXPORTING
@ -347,8 +436,13 @@ CLASS ltcl_bcp47_to_sap1 IMPLEMENTATION.
no_assignment = 1
OTHERS = 2 ).
cl_abap_unit_assert=>assert_equals( exp = 1
act = sy-subrc ).
" Assert itself might change sy-subrc (it does in 702!)
lv_act = sy-subrc.
cl_abap_unit_assert=>assert_equals(
exp = 1
act = lv_act
msg = |Converting "{ im_from }" should fail| ).
ENDMETHOD.
METHOD english.
@ -466,14 +560,18 @@ CLASS ltcl_sap1_to_bcp47 IMPLEMENTATION.
METHOD assert_sap1_to_bcp47.
DATA lv_result TYPE string.
lv_result = zcl_abapgit_convert=>language_sap1_to_bcp47( im_from ).
cl_abap_unit_assert=>assert_equals( exp = im_to
act = lv_result ).
cl_abap_unit_assert=>assert_equals(
exp = im_to
act = lv_result
msg = |Converting "{ im_from }" should result in "{ im_to }"| ).
ENDMETHOD.
METHOD assert_sap1_to_bcp47_fail.
DATA lv_result TYPE string.
DATA lv_act TYPE sy-subrc.
zcl_abapgit_convert=>language_sap1_to_bcp47(
EXPORTING
@ -484,8 +582,13 @@ CLASS ltcl_sap1_to_bcp47 IMPLEMENTATION.
no_assignment = 1
OTHERS = 2 ).
cl_abap_unit_assert=>assert_equals( exp = 1
act = sy-subrc ).
" Assert itself might change sy-subrc (it does in 702!)
lv_act = sy-subrc.
cl_abap_unit_assert=>assert_equals(
exp = 1
act = lv_act
msg = |Converting "{ im_from }" should fail| ).
ENDMETHOD.
METHOD english.

Some files were not shown because too many files have changed in this diff Show More