From 97cdd3afa802d17c409d61c9b3ba7f4af0a67d0f Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Sun, 8 Oct 2023 08:50:15 +0200 Subject: [PATCH] refactor concatenated_key_to_where() (#6531) --- package.json | 8 ++--- src/data/zcl_abapgit_data_utils.clas.abap | 9 ++---- src/repo/zcl_abapgit_repo_srv.clas.abap | 2 ++ .../pages/zcl_abapgit_gui_page_data.clas.abap | 32 +++++++++++++------ ...bapgit_gui_page_data.clas.testclasses.abap | 20 ++++++++++++ src/zif_abapgit_definitions.intf.abap | 2 +- 6 files changed, 52 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index ca00d5be7..95d4fc84b 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,12 @@ ] }, "devDependencies": { - "@abaplint/cli": "^2.102.51", + "@abaplint/cli": "^2.102.56", "@abaplint/database-sqlite": "^2.7.101", - "@abaplint/runtime": "^2.7.101", - "@abaplint/transpiler-cli": "^2.7.101", + "@abaplint/runtime": "^2.7.102", + "@abaplint/transpiler-cli": "^2.7.102", "abapmerge": "^0.16.0", "c8": "^8.0.1", - "eslint": "^8.50.0" + "eslint": "^8.51.0" } } diff --git a/src/data/zcl_abapgit_data_utils.clas.abap b/src/data/zcl_abapgit_data_utils.clas.abap index 06844c731..ed7435124 100644 --- a/src/data/zcl_abapgit_data_utils.clas.abap +++ b/src/data/zcl_abapgit_data_utils.clas.abap @@ -3,7 +3,7 @@ CLASS zcl_abapgit_data_utils DEFINITION CREATE PUBLIC. PUBLIC SECTION. - + TYPES ty_names TYPE STANDARD TABLE OF abap_compname WITH DEFAULT KEY . CLASS-METHODS build_table_itab IMPORTING !iv_name TYPE tadir-obj_name @@ -24,8 +24,6 @@ CLASS zcl_abapgit_data_utils DEFINITION CLASS-METHODS jump IMPORTING !is_item TYPE zif_abapgit_definitions=>ty_item - RETURNING - VALUE(rv_exit) TYPE abap_bool RAISING zcx_abapgit_exception. CLASS-METHODS does_table_exist @@ -38,9 +36,6 @@ CLASS zcl_abapgit_data_utils DEFINITION !iv_name TYPE tadir-obj_name RETURNING VALUE(rv_customizing) TYPE abap_bool. - PROTECTED SECTION. - PRIVATE SECTION. - TYPES ty_names TYPE STANDARD TABLE OF abap_compname WITH DEFAULT KEY . CLASS-METHODS list_key_fields IMPORTING !iv_name TYPE tadir-obj_name @@ -48,6 +43,8 @@ CLASS zcl_abapgit_data_utils DEFINITION VALUE(rt_names) TYPE ty_names RAISING zcx_abapgit_exception. + PROTECTED SECTION. + PRIVATE SECTION. ENDCLASS. diff --git a/src/repo/zcl_abapgit_repo_srv.clas.abap b/src/repo/zcl_abapgit_repo_srv.clas.abap index 642ef5d83..767e1a620 100644 --- a/src/repo/zcl_abapgit_repo_srv.clas.abap +++ b/src/repo/zcl_abapgit_repo_srv.clas.abap @@ -309,6 +309,8 @@ CLASS zcl_abapgit_repo_srv IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF mt_list. + ASSERT iv_key IS NOT INITIAL. + IF mv_init = abap_false. refresh_all( ). ENDIF. diff --git a/src/ui/pages/zcl_abapgit_gui_page_data.clas.abap b/src/ui/pages/zcl_abapgit_gui_page_data.clas.abap index 0959afad4..12285962c 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_data.clas.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_data.clas.abap @@ -51,7 +51,9 @@ CLASS zcl_abapgit_gui_page_data DEFINITION !iv_table TYPE tabname !iv_tabkey TYPE clike RETURNING - VALUE(rv_where) TYPE string . + VALUE(rv_where) TYPE string + RAISING + zcx_abapgit_exception. METHODS add_via_transport RAISING zcx_abapgit_exception . @@ -153,28 +155,38 @@ CLASS zcl_abapgit_gui_page_data IMPLEMENTATION. METHOD concatenated_key_to_where. DATA lo_structdescr TYPE REF TO cl_abap_structdescr. - DATA lt_fields TYPE ddfields. - DATA ls_field LIKE LINE OF lt_fields. + DATA lo_typedescr TYPE REF TO cl_abap_typedescr. + DATA lt_fields TYPE zcl_abapgit_data_utils=>ty_names. + DATA lv_field LIKE LINE OF lt_fields. + DATA lv_table TYPE tadir-obj_name. + DATA lv_length TYPE i. + DATA lv_tabix TYPE i. DATA lv_key TYPE c LENGTH 900. lv_key = iv_tabkey. lo_structdescr ?= cl_abap_typedescr=>describe_by_name( iv_table ). - lt_fields = lo_structdescr->get_ddic_field_list( ). + lv_table = iv_table. + lt_fields = zcl_abapgit_data_utils=>list_key_fields( lv_table ). - LOOP AT lt_fields INTO ls_field WHERE keyflag = abap_true. - IF ls_field-position = '0001' AND ls_field-datatype = 'CLNT'. - lv_key = lv_key+ls_field-leng. + LOOP AT lt_fields INTO lv_field. + lv_tabix = sy-tabix. + lo_typedescr = cl_abap_typedescr=>describe_by_name( |{ iv_table }-{ lv_field }| ). + lv_length = lo_typedescr->length / cl_abap_char_utilities=>charsize. + + IF lv_tabix = 1 AND lo_typedescr->get_relative_name( ) = 'MANDT'. + lv_key = lv_key+lv_length. CONTINUE. ENDIF. + IF lv_key = |*|. EXIT. " current loop ENDIF. IF NOT rv_where IS INITIAL. rv_where = |{ rv_where } AND |. ENDIF. - rv_where = |{ rv_where }{ to_lower( ls_field-fieldname ) } = '{ lv_key(ls_field-leng) }'|. - lv_key = lv_key+ls_field-leng. + rv_where = |{ rv_where }{ to_lower( lv_field ) } = '{ lv_key(lv_length) }'|. + lv_key = lv_key+lv_length. ENDLOOP. ENDMETHOD. @@ -300,7 +312,7 @@ CLASS zcl_abapgit_gui_page_data IMPLEMENTATION. lt_configs = mi_config->get_configs( ). LOOP AT lt_configs INTO ls_config. - lo_form = zcl_abapgit_html_form=>create( ). + lo_form = zcl_abapgit_html_form=>create( ). CREATE OBJECT lo_form_data. lo_form_data->set( diff --git a/src/ui/pages/zcl_abapgit_gui_page_data.clas.testclasses.abap b/src/ui/pages/zcl_abapgit_gui_page_data.clas.testclasses.abap index 02c94083f..0fbefc1ad 100644 --- a/src/ui/pages/zcl_abapgit_gui_page_data.clas.testclasses.abap +++ b/src/ui/pages/zcl_abapgit_gui_page_data.clas.testclasses.abap @@ -8,6 +8,7 @@ CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. METHODS concatenated_key_to_where2 FOR TESTING RAISING cx_static_check. METHODS concatenated_key_to_where3 FOR TESTING RAISING cx_static_check. METHODS concatenated_key_to_where4 FOR TESTING RAISING cx_static_check. + METHODS with_mandt FOR TESTING RAISING cx_static_check. ENDCLASS. @@ -69,4 +70,23 @@ CLASS ltcl_test IMPLEMENTATION. ENDMETHOD. + METHOD with_mandt. + + DATA lv_where TYPE string. + + IF sy-sysid = 'ABC'. +* dont run on open-abap + RETURN. + ENDIF. + + lv_where = zcl_abapgit_gui_page_data=>concatenated_key_to_where( + iv_table = 'USR02' + iv_tabkey = '100ASDF' ). + + cl_abap_unit_assert=>assert_equals( + act = lv_where + exp = |bname = 'ASDF'| ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/zif_abapgit_definitions.intf.abap b/src/zif_abapgit_definitions.intf.abap index 2cdfbaff0..db523812b 100644 --- a/src/zif_abapgit_definitions.intf.abap +++ b/src/zif_abapgit_definitions.intf.abap @@ -358,7 +358,7 @@ INTERFACE zif_abapgit_definitions go_background TYPE string VALUE 'go_background', go_background_run TYPE string VALUE 'go_background_run', go_repo_diff TYPE string VALUE 'go_repo_diff', - go_file_diff TYPE string VALUE 'go_fill_diff', + go_file_diff TYPE string VALUE 'go_file_diff', go_stage TYPE string VALUE 'go_stage', go_stage_transport TYPE string VALUE 'go_stage_transport', go_commit TYPE string VALUE 'go_commit',