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": {
|
"devDependencies": {
|
||||||
"@abaplint/cli": "^2.91.32",
|
"@abaplint/cli": "^2.92.0",
|
||||||
"@abaplint/database-sqlite": "^2.1.29",
|
"@abaplint/database-sqlite": "^2.1.40",
|
||||||
"@abaplint/runtime": "^2.1.38",
|
"@abaplint/runtime": "^2.1.40",
|
||||||
"@abaplint/transpiler-cli": "^2.1.38",
|
"@abaplint/transpiler-cli": "^2.1.40",
|
||||||
"abapmerge": "^0.14.7",
|
"abapmerge": "^0.14.7",
|
||||||
"c8": "^7.12.0",
|
"c8": "^7.12.0",
|
||||||
"eslint": "^8.22.0"
|
"eslint": "^8.22.0"
|
||||||
|
|
|
@ -3,7 +3,7 @@ CLASS zcl_abapgit_transport DEFINITION
|
||||||
CREATE PUBLIC .
|
CREATE PUBLIC .
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
* todo, add interfaces for this class, consider merging zcl_abapgit_transport_mass into this class?
|
||||||
CLASS-METHODS zip
|
CLASS-METHODS zip
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_show_log_popup TYPE abap_bool DEFAULT abap_true
|
!iv_show_log_popup TYPE abap_bool DEFAULT abap_true
|
||||||
|
@ -13,6 +13,7 @@ CLASS zcl_abapgit_transport DEFINITION
|
||||||
VALUE(rv_xstr) TYPE xstring
|
VALUE(rv_xstr) TYPE xstring
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
CLASS-METHODS to_tadir
|
CLASS-METHODS to_tadir
|
||||||
IMPORTING
|
IMPORTING
|
||||||
it_transport_headers TYPE trwbo_request_headers
|
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
|
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
CLASS-METHODS add_all_objects_to_trans_req
|
CLASS-METHODS add_all_objects_to_trans_req
|
||||||
IMPORTING
|
IMPORTING
|
||||||
iv_key TYPE zif_abapgit_persistence=>ty_value
|
iv_key TYPE zif_abapgit_persistence=>ty_value
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
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.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
CLASS-METHODS read_requests
|
CLASS-METHODS read_requests
|
||||||
|
@ -223,6 +234,31 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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.
|
METHOD read_requests.
|
||||||
DATA lt_requests LIKE rt_requests.
|
DATA lt_requests LIKE rt_requests.
|
||||||
FIELD-SYMBOLS <ls_trkorr> LIKE LINE OF it_trkorr.
|
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.
|
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-type IS NOT INITIAL.
|
||||||
ASSERT is_config-name IS NOT INITIAL.
|
ASSERT is_config-name IS NOT INITIAL.
|
||||||
ASSERT is_config-name = to_upper( is_config-name ).
|
ASSERT is_config-name = to_upper( is_config-name ).
|
||||||
|
|
||||||
INSERT is_config INTO TABLE mt_config.
|
INSERT is_config INTO TABLE mt_config.
|
||||||
IF sy-subrc <> 0.
|
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.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
DATA ms_config TYPE zif_abapgit_data_config=>ty_config.
|
||||||
|
|
||||||
METHODS setup.
|
METHODS setup.
|
||||||
|
METHODS double_add_config FOR TESTING RAISING cx_static_check.
|
||||||
METHODS to_json FOR TESTING RAISING cx_static_check.
|
METHODS to_json FOR TESTING RAISING cx_static_check.
|
||||||
METHODS from_json
|
METHODS from_json
|
||||||
IMPORTING it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
IMPORTING it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
||||||
|
@ -31,6 +32,29 @@ CLASS ltcl_test IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
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.
|
METHOD to_json.
|
||||||
|
|
||||||
DATA li_config TYPE REF TO zif_abapgit_data_config.
|
DATA li_config TYPE REF TO zif_abapgit_data_config.
|
||||||
|
|
|
@ -18,9 +18,10 @@ CLASS zcl_abapgit_gui_page_data DEFINITION
|
||||||
|
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
BEGIN OF c_event,
|
BEGIN OF c_event,
|
||||||
add TYPE string VALUE 'add',
|
add TYPE string VALUE 'add',
|
||||||
update TYPE string VALUE 'update',
|
update TYPE string VALUE 'update',
|
||||||
remove TYPE string VALUE 'remove',
|
remove TYPE string VALUE 'remove',
|
||||||
|
add_via_transport TYPE string VALUE 'add_via_transport',
|
||||||
END OF c_event .
|
END OF c_event .
|
||||||
|
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
|
@ -37,6 +38,18 @@ CLASS zcl_abapgit_gui_page_data DEFINITION
|
||||||
|
|
||||||
DATA mo_repo TYPE REF TO zcl_abapgit_repo .
|
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
|
METHODS build_where
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!io_map TYPE REF TO zcl_abapgit_string_map
|
!io_map TYPE REF TO zcl_abapgit_string_map
|
||||||
|
@ -74,6 +87,57 @@ ENDCLASS.
|
||||||
CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
|
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.
|
METHOD build_where.
|
||||||
|
|
||||||
DATA lv_where LIKE LINE OF rt_where.
|
DATA lv_where LIKE LINE OF rt_where.
|
||||||
|
@ -91,11 +155,42 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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.
|
METHOD constructor.
|
||||||
|
|
||||||
super->constructor( ).
|
super->constructor( ).
|
||||||
|
|
||||||
ms_control-page_title = 'Data'.
|
ms_control-page_title = 'Data'.
|
||||||
|
ms_control-page_menu = build_menu( ).
|
||||||
|
|
||||||
mo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
|
mo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
|
||||||
mi_config = mo_repo->get_data_config( ).
|
mi_config = mo_repo->get_data_config( ).
|
||||||
|
@ -179,9 +274,10 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
|
||||||
METHOD render_content.
|
METHOD render_content.
|
||||||
|
|
||||||
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
||||||
|
ri_html->add( '<div class="repo">' ).
|
||||||
ri_html->add( render_add( ) ).
|
|
||||||
ri_html->add( render_existing( ) ).
|
ri_html->add( render_existing( ) ).
|
||||||
|
ri_html->add( render_add( ) ).
|
||||||
|
ri_html->add( '</div>' ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -236,12 +332,19 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
|
||||||
CASE ii_event->mv_action.
|
CASE ii_event->mv_action.
|
||||||
WHEN c_event-add.
|
WHEN c_event-add.
|
||||||
event_add( ii_event ).
|
event_add( ii_event ).
|
||||||
|
mo_repo->refresh( ).
|
||||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||||
WHEN c_event-update.
|
WHEN c_event-update.
|
||||||
event_update( ii_event ).
|
event_update( ii_event ).
|
||||||
|
mo_repo->refresh( ).
|
||||||
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||||
WHEN c_event-remove.
|
WHEN c_event-remove.
|
||||||
event_remove( ii_event ).
|
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.
|
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
|
||||||
ENDCASE.
|
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>
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
<FIXPT>X</FIXPT>
|
<FIXPT>X</FIXPT>
|
||||||
<UNICODE>X</UNICODE>
|
<UNICODE>X</UNICODE>
|
||||||
|
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||||
</VSEOCLASS>
|
</VSEOCLASS>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
</asx:abap>
|
</asx:abap>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user