mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Data serialization, add WHERE condition based on transport (#5720)
This commit is contained in:
parent
1737957b34
commit
ac982560aa
|
@ -25,10 +25,10 @@
|
|||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@abaplint/cli": "^2.91.32",
|
||||
"@abaplint/database-sqlite": "^2.1.29",
|
||||
"@abaplint/runtime": "^2.1.38",
|
||||
"@abaplint/transpiler-cli": "^2.1.38",
|
||||
"@abaplint/cli": "^2.92.0",
|
||||
"@abaplint/database-sqlite": "^2.1.40",
|
||||
"@abaplint/runtime": "^2.1.40",
|
||||
"@abaplint/transpiler-cli": "^2.1.40",
|
||||
"abapmerge": "^0.14.7",
|
||||
"c8": "^7.12.0",
|
||||
"eslint": "^8.22.0"
|
||||
|
|
|
@ -3,7 +3,7 @@ CLASS zcl_abapgit_transport DEFINITION
|
|||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
* todo, add interfaces for this class, consider merging zcl_abapgit_transport_mass into this class?
|
||||
CLASS-METHODS zip
|
||||
IMPORTING
|
||||
!iv_show_log_popup TYPE abap_bool DEFAULT abap_true
|
||||
|
@ -13,6 +13,7 @@ CLASS zcl_abapgit_transport DEFINITION
|
|||
VALUE(rv_xstr) TYPE xstring
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS to_tadir
|
||||
IMPORTING
|
||||
it_transport_headers TYPE trwbo_request_headers
|
||||
|
@ -20,11 +21,21 @@ CLASS zcl_abapgit_transport DEFINITION
|
|||
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS add_all_objects_to_trans_req
|
||||
IMPORTING
|
||||
iv_key TYPE zif_abapgit_persistence=>ty_value
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS read
|
||||
IMPORTING
|
||||
!is_trkorr TYPE trwbo_request_header OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rs_request) TYPE trwbo_request
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
PROTECTED SECTION.
|
||||
|
||||
CLASS-METHODS read_requests
|
||||
|
@ -223,6 +234,31 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD read.
|
||||
|
||||
rs_request-h-trkorr = is_trkorr-trkorr.
|
||||
|
||||
CALL FUNCTION 'TRINT_READ_REQUEST'
|
||||
EXPORTING
|
||||
iv_read_e070 = abap_true
|
||||
iv_read_e07t = abap_true
|
||||
iv_read_e070c = abap_true
|
||||
iv_read_e070m = abap_true
|
||||
iv_read_objs_keys = abap_true
|
||||
iv_read_objs = abap_true
|
||||
iv_read_attributes = abap_true
|
||||
CHANGING
|
||||
cs_request = rs_request
|
||||
EXCEPTIONS
|
||||
error_occured = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD read_requests.
|
||||
DATA lt_requests LIKE rt_requests.
|
||||
FIELD-SYMBOLS <ls_trkorr> LIKE LINE OF it_trkorr.
|
||||
|
|
|
@ -45,13 +45,25 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_data_config~add_config.
|
||||
|
||||
DATA lv_where TYPE string.
|
||||
|
||||
FIELD-SYMBOLS <ls_config> LIKE LINE OF mt_config.
|
||||
|
||||
ASSERT is_config-type IS NOT INITIAL.
|
||||
ASSERT is_config-name IS NOT INITIAL.
|
||||
ASSERT is_config-name = to_upper( is_config-name ).
|
||||
|
||||
INSERT is_config INTO TABLE mt_config.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( 'Already in table' ).
|
||||
* append to existing
|
||||
READ TABLE mt_config ASSIGNING <ls_config> WITH KEY type = is_config-type name = is_config-name.
|
||||
ASSERT sy-subrc = 0.
|
||||
LOOP AT is_config-where INTO lv_where.
|
||||
READ TABLE <ls_config>-where TRANSPORTING NO FIELDS WITH KEY table_line = lv_where.
|
||||
IF sy-subrc <> 0.
|
||||
INSERT lv_where INTO TABLE <ls_config>-where.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -5,6 +5,7 @@ CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
|
|||
DATA ms_config TYPE zif_abapgit_data_config=>ty_config.
|
||||
|
||||
METHODS setup.
|
||||
METHODS double_add_config FOR TESTING RAISING cx_static_check.
|
||||
METHODS to_json FOR TESTING RAISING cx_static_check.
|
||||
METHODS from_json
|
||||
IMPORTING it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
||||
|
@ -31,6 +32,29 @@ CLASS ltcl_test IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD double_add_config.
|
||||
|
||||
DATA li_config TYPE REF TO zif_abapgit_data_config.
|
||||
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
|
||||
|
||||
CREATE OBJECT li_config TYPE zcl_abapgit_data_config.
|
||||
|
||||
ls_config-name = 'HELLO'.
|
||||
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
|
||||
APPEND 'foo' TO ls_config-where.
|
||||
|
||||
li_config->add_config( ls_config ).
|
||||
|
||||
CLEAR ls_config-where.
|
||||
APPEND 'bar' TO ls_config-where.
|
||||
li_config->add_config( ls_config ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lines( li_config->get_configs( ) )
|
||||
exp = 1 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_json.
|
||||
|
||||
DATA li_config TYPE REF TO zif_abapgit_data_config.
|
||||
|
|
|
@ -18,9 +18,10 @@ CLASS zcl_abapgit_gui_page_data DEFINITION
|
|||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_event,
|
||||
add TYPE string VALUE 'add',
|
||||
update TYPE string VALUE 'update',
|
||||
remove TYPE string VALUE 'remove',
|
||||
add TYPE string VALUE 'add',
|
||||
update TYPE string VALUE 'update',
|
||||
remove TYPE string VALUE 'remove',
|
||||
add_via_transport TYPE string VALUE 'add_via_transport',
|
||||
END OF c_event .
|
||||
|
||||
CONSTANTS:
|
||||
|
@ -37,6 +38,18 @@ CLASS zcl_abapgit_gui_page_data DEFINITION
|
|||
|
||||
DATA mo_repo TYPE REF TO zcl_abapgit_repo .
|
||||
|
||||
CLASS-METHODS concatenated_key_to_where
|
||||
IMPORTING
|
||||
!iv_table TYPE tabname
|
||||
!iv_tabkey TYPE clike
|
||||
RETURNING
|
||||
VALUE(rv_where) TYPE string .
|
||||
METHODS add_via_transport
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS build_menu
|
||||
RETURNING
|
||||
VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar .
|
||||
METHODS build_where
|
||||
IMPORTING
|
||||
!io_map TYPE REF TO zcl_abapgit_string_map
|
||||
|
@ -74,6 +87,57 @@ ENDCLASS.
|
|||
CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD add_via_transport.
|
||||
|
||||
DATA lt_trkorr TYPE trwbo_request_headers.
|
||||
DATA ls_trkorr LIKE LINE OF lt_trkorr.
|
||||
DATA ls_request TYPE trwbo_request.
|
||||
DATA ls_key LIKE LINE OF ls_request-keys.
|
||||
DATA lv_where TYPE string.
|
||||
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
|
||||
|
||||
|
||||
lt_trkorr = zcl_abapgit_ui_factory=>get_popups( )->popup_to_select_transports( ).
|
||||
IF lines( lt_trkorr ) <> 1.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_trkorr INDEX 1 INTO ls_trkorr.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ls_request = zcl_abapgit_transport=>read( ls_trkorr ).
|
||||
|
||||
IF lines( ls_request-keys ) = 0.
|
||||
zcx_abapgit_exception=>raise( |No keys found, select task| ).
|
||||
ENDIF.
|
||||
|
||||
LOOP AT ls_request-keys INTO ls_key WHERE object = 'TABU'.
|
||||
ASSERT ls_key-objname IS NOT INITIAL.
|
||||
ASSERT ls_key-tabkey IS NOT INITIAL.
|
||||
|
||||
CLEAR ls_config.
|
||||
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
|
||||
ls_config-name = to_upper( ls_key-objname ).
|
||||
lv_where = concatenated_key_to_where(
|
||||
iv_table = ls_key-objname
|
||||
iv_tabkey = ls_key-tabkey ).
|
||||
APPEND lv_where TO ls_config-where.
|
||||
mi_config->add_config( ls_config ).
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD build_menu.
|
||||
|
||||
CREATE OBJECT ro_menu.
|
||||
|
||||
ro_menu->add( iv_txt = 'Add via transport'
|
||||
iv_act = c_event-add_via_transport ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD build_where.
|
||||
|
||||
DATA lv_where LIKE LINE OF rt_where.
|
||||
|
@ -91,11 +155,42 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
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 lv_key TYPE string.
|
||||
|
||||
lv_key = iv_tabkey.
|
||||
lo_structdescr ?= cl_abap_typedescr=>describe_by_name( iv_table ).
|
||||
|
||||
lt_fields = lo_structdescr->get_ddic_field_list( ).
|
||||
|
||||
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.
|
||||
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.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
super->constructor( ).
|
||||
|
||||
ms_control-page_title = 'Data'.
|
||||
ms_control-page_menu = build_menu( ).
|
||||
|
||||
mo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
|
||||
mi_config = mo_repo->get_data_config( ).
|
||||
|
@ -179,9 +274,10 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
|
|||
METHOD render_content.
|
||||
|
||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||
|
||||
ri_html->add( render_add( ) ).
|
||||
ri_html->add( '<div class="repo">' ).
|
||||
ri_html->add( render_existing( ) ).
|
||||
ri_html->add( render_add( ) ).
|
||||
ri_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -236,12 +332,19 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
|
|||
CASE ii_event->mv_action.
|
||||
WHEN c_event-add.
|
||||
event_add( ii_event ).
|
||||
mo_repo->refresh( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
WHEN c_event-update.
|
||||
event_update( ii_event ).
|
||||
mo_repo->refresh( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
WHEN c_event-remove.
|
||||
event_remove( ii_event ).
|
||||
mo_repo->refresh( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
WHEN c_event-add_via_transport.
|
||||
add_via_transport( ).
|
||||
mo_repo->refresh( ).
|
||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||
ENDCASE.
|
||||
|
||||
|
|
27
src/ui/zcl_abapgit_gui_page_data.clas.testclasses.abap
Normal file
27
src/ui/zcl_abapgit_gui_page_data.clas.testclasses.abap
Normal file
|
@ -0,0 +1,27 @@
|
|||
CLASS ltcl_test DEFINITION DEFERRED.
|
||||
CLASS zcl_abapgit_gui_page_data DEFINITION LOCAL FRIENDS ltcl_test.
|
||||
|
||||
CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS concatenated_key_to_where FOR TESTING RAISING cx_static_check.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltcl_test IMPLEMENTATION.
|
||||
|
||||
METHOD concatenated_key_to_where.
|
||||
|
||||
DATA lv_where TYPE string.
|
||||
|
||||
lv_where = zcl_abapgit_gui_page_data=>concatenated_key_to_where(
|
||||
iv_table = 'T100'
|
||||
iv_tabkey = 'EABC55555555555555555001' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_where
|
||||
exp = |sprsl = 'E' AND arbgb = 'ABC55555555555555555' AND msgnr = '001'| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
|
@ -10,6 +10,7 @@
|
|||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
|
|
Loading…
Reference in New Issue
Block a user