mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Data deserialize (#4654)
* Data deserialize Continuing on #3441 - Fixes issue with namespaced tables - Adds deserialize of table content during pull but does NOT persist changes to database `zcl_abapgit_repo->deserialize` now contains the following call to deserialize "data": ```abap zcl_abapgit_data_factory=>get_deserializer( )->deserialize( ii_config = get_data_config( ) it_files = get_files_remote( ) iv_persist = abap_false ). "<<no persisting, just test for now ``` Closes #4650 * Fixes and max record check * Get result preview * Split deser/actualize Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
e143ec7f70
commit
1104c88e48
|
@ -6,11 +6,9 @@ CLASS zcl_abapgit_data_config DEFINITION
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
INTERFACES zif_abapgit_data_config .
|
INTERFACES zif_abapgit_data_config .
|
||||||
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
CONSTANTS c_extension TYPE string VALUE '.config.json'.
|
|
||||||
DATA mt_config TYPE zif_abapgit_data_config=>ty_config_tt .
|
DATA mt_config TYPE zif_abapgit_data_config=>ty_config_tt .
|
||||||
|
|
||||||
METHODS dump
|
METHODS dump
|
||||||
|
@ -24,7 +22,7 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
CLASS zcl_abapgit_data_config IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD dump.
|
METHOD dump.
|
||||||
|
@ -32,12 +30,11 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
||||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||||
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
||||||
|
|
||||||
|
|
||||||
TRY.
|
TRY.
|
||||||
lo_ajson = zcl_abapgit_ajson=>create_empty( ).
|
lo_ajson = zcl_abapgit_ajson=>create_empty( ).
|
||||||
lo_ajson->zif_abapgit_ajson_writer~set(
|
lo_ajson->zif_abapgit_ajson_writer~set(
|
||||||
iv_path = '/'
|
iv_path = '/'
|
||||||
iv_val = is_config ).
|
iv_val = is_config ).
|
||||||
rv_json = zcl_abapgit_convert=>string_to_xstring_utf8( lo_ajson->stringify( 2 ) ).
|
rv_json = zcl_abapgit_convert=>string_to_xstring_utf8( lo_ajson->stringify( 2 ) ).
|
||||||
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
||||||
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
|
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
|
||||||
|
@ -48,8 +45,8 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD zif_abapgit_data_config~add_config.
|
METHOD zif_abapgit_data_config~add_config.
|
||||||
|
|
||||||
ASSERT NOT is_config-type IS INITIAL.
|
ASSERT is_config-type IS NOT INITIAL.
|
||||||
ASSERT NOT is_config-name IS 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.
|
||||||
|
@ -69,7 +66,7 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
||||||
|
|
||||||
CLEAR mt_config.
|
CLEAR mt_config.
|
||||||
LOOP AT it_files INTO ls_file WHERE path = zif_abapgit_data_config=>c_default_path
|
LOOP AT it_files INTO ls_file WHERE path = zif_abapgit_data_config=>c_default_path
|
||||||
AND filename CP |*{ c_extension }|.
|
AND filename CP |*.{ zif_abapgit_data_config=>c_config }.{ zif_abapgit_data_config=>c_default_format }|.
|
||||||
TRY.
|
TRY.
|
||||||
lo_ajson = zcl_abapgit_ajson=>parse( zcl_abapgit_convert=>xstring_to_string_utf8( ls_file-data ) ).
|
lo_ajson = zcl_abapgit_ajson=>parse( zcl_abapgit_convert=>xstring_to_string_utf8( ls_file-data ) ).
|
||||||
lo_ajson->zif_abapgit_ajson_reader~to_abap( IMPORTING ev_container = ls_config ).
|
lo_ajson->zif_abapgit_ajson_reader~to_abap( IMPORTING ev_container = ls_config ).
|
||||||
|
@ -90,8 +87,8 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD zif_abapgit_data_config~remove_config.
|
METHOD zif_abapgit_data_config~remove_config.
|
||||||
|
|
||||||
ASSERT NOT is_config-type IS INITIAL.
|
ASSERT is_config-type IS NOT INITIAL.
|
||||||
ASSERT NOT is_config-name IS 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 ).
|
||||||
|
|
||||||
DELETE mt_config WHERE name = is_config-name AND type = is_config-type.
|
DELETE mt_config WHERE name = is_config-name AND type = is_config-type.
|
||||||
|
@ -110,9 +107,10 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
|
||||||
ls_file-path = zif_abapgit_data_config=>c_default_path.
|
ls_file-path = zif_abapgit_data_config=>c_default_path.
|
||||||
|
|
||||||
LOOP AT mt_config INTO ls_config.
|
LOOP AT mt_config INTO ls_config.
|
||||||
ls_file-filename = to_lower( |{ ls_config-name }{ c_extension }| ).
|
|
||||||
ls_file-data = dump( ls_config ).
|
ls_file-data = dump( ls_config ).
|
||||||
ls_file-sha1 = zcl_abapgit_hash=>sha1_blob( ls_file-data ).
|
ls_file-sha1 = zcl_abapgit_hash=>sha1_blob( ls_file-data ).
|
||||||
|
ls_config-type = zif_abapgit_data_config=>c_config.
|
||||||
|
ls_file-filename = zcl_abapgit_data_utils=>build_filename( ls_config ).
|
||||||
APPEND ls_file TO rt_files.
|
APPEND ls_file TO rt_files.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
|
|
@ -6,28 +6,53 @@ CLASS zcl_abapgit_data_deserializer DEFINITION
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
INTERFACES zif_abapgit_data_deserializer .
|
INTERFACES zif_abapgit_data_deserializer .
|
||||||
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
METHODS read_json
|
METHODS convert_json_to_itab
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!is_file TYPE zif_abapgit_definitions=>ty_file
|
!is_file TYPE zif_abapgit_definitions=>ty_file
|
||||||
!ir_data TYPE REF TO data
|
!ir_data TYPE REF TO data
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
METHODS preview_database_changes
|
||||||
|
IMPORTING
|
||||||
|
!iv_name TYPE tadir-obj_name
|
||||||
|
!it_where TYPE string_table
|
||||||
|
!ir_data TYPE REF TO data
|
||||||
|
RETURNING
|
||||||
|
VALUE(rs_result) TYPE zif_abapgit_data_deserializer=>ty_result
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
METHODS write_database_table
|
||||||
|
IMPORTING
|
||||||
|
!iv_name TYPE tadir-obj_name
|
||||||
|
!ir_del TYPE REF TO data
|
||||||
|
!ir_ins TYPE REF TO data
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
|
METHODS read_database_table
|
||||||
|
IMPORTING
|
||||||
|
!iv_name TYPE tadir-obj_name
|
||||||
|
!it_where TYPE string_table
|
||||||
|
RETURNING
|
||||||
|
VALUE(rr_data) TYPE REF TO data .
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_DATA_DESERIALIZER IMPLEMENTATION.
|
CLASS zcl_abapgit_data_deserializer IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD read_json.
|
METHOD convert_json_to_itab.
|
||||||
|
|
||||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||||
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
||||||
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
|
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
|
||||||
|
|
||||||
ASSIGN ir_data->* TO <lg_tab>.
|
ASSIGN ir_data->* TO <lg_tab>.
|
||||||
|
|
||||||
|
@ -41,9 +66,104 @@ CLASS ZCL_ABAPGIT_DATA_DESERIALIZER IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD preview_database_changes.
|
||||||
|
|
||||||
|
* method currently distinguishes between records be deleted and inserted (comparison of complete record)
|
||||||
|
* to-do: compare records based on database key of table to determine updates to existing records
|
||||||
|
|
||||||
|
DATA lr_data TYPE REF TO data.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <lg_old> TYPE ANY TABLE.
|
||||||
|
FIELD-SYMBOLS <lg_new> TYPE ANY TABLE.
|
||||||
|
FIELD-SYMBOLS <ls_del> TYPE any.
|
||||||
|
FIELD-SYMBOLS <ls_ins> TYPE any.
|
||||||
|
FIELD-SYMBOLS <lg_del> TYPE ANY TABLE.
|
||||||
|
FIELD-SYMBOLS <lg_ins> TYPE ANY TABLE.
|
||||||
|
|
||||||
|
lr_data = read_database_table(
|
||||||
|
iv_name = iv_name
|
||||||
|
it_where = it_where ).
|
||||||
|
|
||||||
|
ASSIGN lr_data->* TO <lg_old>.
|
||||||
|
ASSIGN ir_data->* TO <lg_new>.
|
||||||
|
|
||||||
|
rs_result-table = iv_name.
|
||||||
|
rs_result-deletes = zcl_abapgit_data_utils=>build_table_itab( iv_name ).
|
||||||
|
rs_result-inserts = zcl_abapgit_data_utils=>build_table_itab( iv_name ).
|
||||||
|
ASSIGN rs_result-deletes->* TO <lg_del>.
|
||||||
|
ASSIGN rs_result-inserts->* TO <lg_ins>.
|
||||||
|
|
||||||
|
<lg_del> = <lg_old>.
|
||||||
|
<lg_ins> = <lg_new>.
|
||||||
|
|
||||||
|
" Remove identical records
|
||||||
|
LOOP AT <lg_del> ASSIGNING <ls_del>.
|
||||||
|
READ TABLE <lg_ins> ASSIGNING <ls_ins> FROM <ls_del>.
|
||||||
|
IF sy-subrc = 0.
|
||||||
|
DELETE TABLE <lg_del> FROM <ls_del>.
|
||||||
|
DELETE TABLE <lg_ins> FROM <ls_ins>.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD read_database_table.
|
||||||
|
|
||||||
|
DATA lv_where LIKE LINE OF it_where.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
|
||||||
|
|
||||||
|
rr_data = zcl_abapgit_data_utils=>build_table_itab( iv_name ).
|
||||||
|
ASSIGN rr_data->* TO <lg_tab>.
|
||||||
|
|
||||||
|
LOOP AT it_where INTO lv_where.
|
||||||
|
SELECT * FROM (iv_name) APPENDING TABLE <lg_tab> WHERE (lv_where).
|
||||||
|
ENDLOOP.
|
||||||
|
IF lines( it_where ) = 0.
|
||||||
|
SELECT * FROM (iv_name) INTO TABLE <lg_tab>.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD write_database_table.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <lg_del> TYPE ANY TABLE.
|
||||||
|
FIELD-SYMBOLS <lg_ins> TYPE ANY TABLE.
|
||||||
|
|
||||||
|
ASSIGN ir_del->* TO <lg_del>.
|
||||||
|
ASSIGN ir_ins->* TO <lg_ins>.
|
||||||
|
|
||||||
|
IF lines( <lg_del> ) > 0.
|
||||||
|
DELETE (iv_name) FROM TABLE <lg_del>.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
zcx_abapgit_exception=>raise( |Error deleting { lines( <lg_del> ) } records from table { iv_name }| ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lines( <lg_ins> ) > 0.
|
||||||
|
INSERT (iv_name) FROM TABLE <lg_ins>.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
zcx_abapgit_exception=>raise( |Error inserting { lines( <lg_ins> ) } records into table { iv_name }| ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD zif_abapgit_data_deserializer~actualize.
|
METHOD zif_abapgit_data_deserializer~actualize.
|
||||||
|
|
||||||
* todo, this method will update the database
|
* this method updates the database
|
||||||
|
|
||||||
|
DATA ls_result LIKE LINE OF it_result.
|
||||||
|
|
||||||
|
LOOP AT it_result INTO ls_result.
|
||||||
|
write_database_table(
|
||||||
|
iv_name = ls_result-table
|
||||||
|
ir_del = ls_result-deletes
|
||||||
|
ir_ins = ls_result-inserts ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
@ -56,7 +176,7 @@ CLASS ZCL_ABAPGIT_DATA_DESERIALIZER IMPLEMENTATION.
|
||||||
DATA ls_config LIKE LINE OF lt_configs.
|
DATA ls_config LIKE LINE OF lt_configs.
|
||||||
DATA lr_data TYPE REF TO data.
|
DATA lr_data TYPE REF TO data.
|
||||||
DATA ls_file LIKE LINE OF it_files.
|
DATA ls_file LIKE LINE OF it_files.
|
||||||
|
DATA ls_result LIKE LINE OF rt_result.
|
||||||
|
|
||||||
lt_configs = ii_config->get_configs( ).
|
lt_configs = ii_config->get_configs( ).
|
||||||
|
|
||||||
|
@ -68,12 +188,17 @@ CLASS ZCL_ABAPGIT_DATA_DESERIALIZER IMPLEMENTATION.
|
||||||
path = zif_abapgit_data_config=>c_default_path
|
path = zif_abapgit_data_config=>c_default_path
|
||||||
filename = zcl_abapgit_data_utils=>build_filename( ls_config ).
|
filename = zcl_abapgit_data_utils=>build_filename( ls_config ).
|
||||||
IF sy-subrc = 0.
|
IF sy-subrc = 0.
|
||||||
read_json(
|
convert_json_to_itab(
|
||||||
ir_data = lr_data
|
ir_data = lr_data
|
||||||
is_file = ls_file ).
|
is_file = ls_file ).
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
* todo
|
ls_result = preview_database_changes(
|
||||||
|
iv_name = ls_config-name
|
||||||
|
it_where = ls_config-where
|
||||||
|
ir_data = lr_data ).
|
||||||
|
|
||||||
|
INSERT ls_result INTO TABLE rt_result.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,14 @@ CLASS zcl_abapgit_data_serializer DEFINITION
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
INTERFACES zif_abapgit_data_serializer .
|
INTERFACES zif_abapgit_data_serializer .
|
||||||
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
METHODS dump_itab
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
CONSTANTS c_max_records TYPE i VALUE 10000 ##NO_TEXT.
|
||||||
|
|
||||||
|
METHODS convert_itab_to_json
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!ir_data TYPE REF TO data
|
!ir_data TYPE REF TO data
|
||||||
RETURNING
|
RETURNING
|
||||||
|
@ -20,22 +25,23 @@ CLASS zcl_abapgit_data_serializer DEFINITION
|
||||||
!iv_name TYPE tadir-obj_name
|
!iv_name TYPE tadir-obj_name
|
||||||
!it_where TYPE string_table
|
!it_where TYPE string_table
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rr_data) TYPE REF TO data .
|
VALUE(rr_data) TYPE REF TO data
|
||||||
PRIVATE SECTION.
|
RAISING
|
||||||
|
zcx_abapgit_exception .
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
|
CLASS zcl_abapgit_data_serializer IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD dump_itab.
|
METHOD convert_itab_to_json.
|
||||||
|
|
||||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||||
DATA lv_string TYPE string.
|
DATA lv_string TYPE string.
|
||||||
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
||||||
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
|
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
|
||||||
|
|
||||||
ASSIGN ir_data->* TO <lg_tab>.
|
ASSIGN ir_data->* TO <lg_tab>.
|
||||||
|
|
||||||
|
@ -57,8 +63,10 @@ CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD read_database_table.
|
METHOD read_database_table.
|
||||||
|
|
||||||
|
DATA lv_records TYPE i.
|
||||||
DATA lv_where LIKE LINE OF it_where.
|
DATA lv_where LIKE LINE OF it_where.
|
||||||
FIELD-SYMBOLS: <lg_tab> TYPE ANY TABLE.
|
|
||||||
|
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
|
||||||
|
|
||||||
rr_data = zcl_abapgit_data_utils=>build_table_itab( iv_name ).
|
rr_data = zcl_abapgit_data_utils=>build_table_itab( iv_name ).
|
||||||
ASSIGN rr_data->* TO <lg_tab>.
|
ASSIGN rr_data->* TO <lg_tab>.
|
||||||
|
@ -70,6 +78,12 @@ CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
|
||||||
SELECT * FROM (iv_name) INTO TABLE <lg_tab>.
|
SELECT * FROM (iv_name) INTO TABLE <lg_tab>.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
lv_records = lines( <lg_tab> ).
|
||||||
|
IF lv_records > c_max_records.
|
||||||
|
zcx_abapgit_exception=>raise( |Too many records selected from table { iv_name
|
||||||
|
} (selected { lv_records }, max { c_max_records })| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,20 +94,19 @@ CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
|
||||||
DATA ls_file LIKE LINE OF rt_files.
|
DATA ls_file LIKE LINE OF rt_files.
|
||||||
DATA lr_data TYPE REF TO data.
|
DATA lr_data TYPE REF TO data.
|
||||||
|
|
||||||
|
|
||||||
ls_file-path = zif_abapgit_data_config=>c_default_path.
|
ls_file-path = zif_abapgit_data_config=>c_default_path.
|
||||||
lt_configs = ii_config->get_configs( ).
|
lt_configs = ii_config->get_configs( ).
|
||||||
|
|
||||||
LOOP AT lt_configs INTO ls_config.
|
LOOP AT lt_configs INTO ls_config.
|
||||||
ASSERT ls_config-type = zif_abapgit_data_config=>c_data_type-tabu. " todo
|
ASSERT ls_config-type = zif_abapgit_data_config=>c_data_type-tabu. " todo
|
||||||
ASSERT NOT ls_config-name IS INITIAL.
|
ASSERT ls_config-name IS NOT INITIAL.
|
||||||
|
|
||||||
lr_data = read_database_table(
|
lr_data = read_database_table(
|
||||||
iv_name = ls_config-name
|
iv_name = ls_config-name
|
||||||
it_where = ls_config-where ).
|
it_where = ls_config-where ).
|
||||||
|
|
||||||
ls_file-filename = zcl_abapgit_data_utils=>build_filename( ls_config ).
|
ls_file-filename = zcl_abapgit_data_utils=>build_filename( ls_config ).
|
||||||
ls_file-data = dump_itab( lr_data ).
|
ls_file-data = convert_itab_to_json( lr_data ).
|
||||||
ls_file-sha1 = zcl_abapgit_hash=>sha1_blob( ls_file-data ).
|
ls_file-sha1 = zcl_abapgit_hash=>sha1_blob( ls_file-data ).
|
||||||
APPEND ls_file TO rt_files.
|
APPEND ls_file TO rt_files.
|
||||||
|
|
||||||
|
|
|
@ -3,30 +3,31 @@ CLASS zcl_abapgit_data_utils DEFINITION
|
||||||
CREATE PUBLIC .
|
CREATE PUBLIC .
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
CLASS-METHODS build_table_itab
|
CLASS-METHODS build_table_itab
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!iv_name TYPE tadir-obj_name
|
!iv_name TYPE tadir-obj_name
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rr_data) TYPE REF TO data .
|
VALUE(rr_data) TYPE REF TO data .
|
||||||
|
|
||||||
CLASS-METHODS build_filename
|
CLASS-METHODS build_filename
|
||||||
IMPORTING
|
IMPORTING
|
||||||
is_config TYPE zif_abapgit_data_config=>ty_config
|
!is_config TYPE zif_abapgit_data_config=>ty_config
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_filename) TYPE string.
|
VALUE(rv_filename) TYPE string .
|
||||||
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
|
CLASS zcl_abapgit_data_utils IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD build_filename.
|
METHOD build_filename.
|
||||||
|
|
||||||
rv_filename = to_lower( |{ is_config-name }.{ is_config-type }.json| ).
|
rv_filename = to_lower( |{ is_config-name }.{ is_config-type }.{ zif_abapgit_data_config=>c_default_format }| ).
|
||||||
|
|
||||||
|
REPLACE ALL OCCURRENCES OF '/' IN rv_filename WITH '#'.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
34
src/data/zcl_abapgit_data_utils.clas.testclasses.abap
Normal file
34
src/data/zcl_abapgit_data_utils.clas.testclasses.abap
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
CLASS ltcl_data_utils_test DEFINITION FINAL
|
||||||
|
FOR TESTING
|
||||||
|
RISK LEVEL HARMLESS
|
||||||
|
DURATION SHORT.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
METHODS build_filename FOR TESTING.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_data_utils_test IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD build_filename.
|
||||||
|
|
||||||
|
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
|
||||||
|
|
||||||
|
ls_config-name = 'T100'.
|
||||||
|
ls_config-type = 'TABU'.
|
||||||
|
|
||||||
|
cl_abap_unit_assert=>assert_equals(
|
||||||
|
act = zcl_abapgit_data_utils=>build_filename( ls_config )
|
||||||
|
exp = 't100.tabu.json' ).
|
||||||
|
|
||||||
|
ls_config-name = '/NSPC/T200'.
|
||||||
|
ls_config-type = 'TABU'.
|
||||||
|
|
||||||
|
cl_abap_unit_assert=>assert_equals(
|
||||||
|
act = zcl_abapgit_data_utils=>build_filename( ls_config )
|
||||||
|
exp = '#nspc#t200.tabu.json' ).
|
||||||
|
|
||||||
|
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>
|
||||||
|
|
|
@ -14,6 +14,8 @@ INTERFACE zif_abapgit_data_config
|
||||||
ty_config_tt TYPE SORTED TABLE OF ty_config WITH UNIQUE KEY type name .
|
ty_config_tt TYPE SORTED TABLE OF ty_config WITH UNIQUE KEY type name .
|
||||||
|
|
||||||
CONSTANTS c_default_path TYPE string VALUE '/data/' ##NO_TEXT.
|
CONSTANTS c_default_path TYPE string VALUE '/data/' ##NO_TEXT.
|
||||||
|
CONSTANTS c_default_format TYPE string VALUE 'json' ##NO_TEXT.
|
||||||
|
CONSTANTS c_config TYPE string VALUE 'conf' ##NO_TEXT.
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
BEGIN OF c_data_type,
|
BEGIN OF c_data_type,
|
||||||
tabu TYPE ty_data_type VALUE 'TABU',
|
tabu TYPE ty_data_type VALUE 'TABU',
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<VSEOINTERF>
|
<VSEOINTERF>
|
||||||
<CLSNAME>ZIF_ABAPGIT_DATA_CONFIG</CLSNAME>
|
<CLSNAME>ZIF_ABAPGIT_DATA_CONFIG</CLSNAME>
|
||||||
<LANGU>E</LANGU>
|
<LANGU>E</LANGU>
|
||||||
<DESCRIPT>abapGit - Data config</DESCRIPT>
|
<DESCRIPT>abapGit - Data Config</DESCRIPT>
|
||||||
<EXPOSURE>2</EXPOSURE>
|
<EXPOSURE>2</EXPOSURE>
|
||||||
<STATE>1</STATE>
|
<STATE>1</STATE>
|
||||||
<UNICODE>X</UNICODE>
|
<UNICODE>X</UNICODE>
|
||||||
|
|
|
@ -1,25 +1,27 @@
|
||||||
INTERFACE zif_abapgit_data_deserializer
|
INTERFACE zif_abapgit_data_deserializer
|
||||||
PUBLIC .
|
PUBLIC .
|
||||||
|
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_result,
|
TYPES: BEGIN OF ty_result,
|
||||||
table TYPE tadir-obj_name,
|
table TYPE tadir-obj_name,
|
||||||
deletes TYPE REF TO data,
|
deletes TYPE REF TO data,
|
||||||
updates TYPE REF TO data,
|
updates TYPE REF TO data,
|
||||||
inserts TYPE REF TO data,
|
inserts TYPE REF TO data,
|
||||||
END OF ty_result.
|
END OF ty_result.
|
||||||
|
TYPES: ty_results TYPE STANDARD TABLE OF ty_result WITH KEY table.
|
||||||
|
|
||||||
METHODS deserialize
|
METHODS deserialize
|
||||||
IMPORTING
|
IMPORTING
|
||||||
!ii_config TYPE REF TO zif_abapgit_data_config
|
!ii_config TYPE REF TO zif_abapgit_data_config
|
||||||
!it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
!it_files TYPE zif_abapgit_definitions=>ty_files_tt
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rs_result) TYPE ty_result
|
VALUE(rt_result) TYPE ty_results
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
METHODS actualize
|
METHODS actualize
|
||||||
IMPORTING
|
IMPORTING
|
||||||
is_result TYPE ty_result
|
it_result TYPE ty_results
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception .
|
zcx_abapgit_exception .
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<VSEOINTERF>
|
<VSEOINTERF>
|
||||||
<CLSNAME>ZIF_ABAPGIT_DATA_DESERIALIZER</CLSNAME>
|
<CLSNAME>ZIF_ABAPGIT_DATA_DESERIALIZER</CLSNAME>
|
||||||
<LANGU>E</LANGU>
|
<LANGU>E</LANGU>
|
||||||
<DESCRIPT>abapGit - Data deserializer</DESCRIPT>
|
<DESCRIPT>abapGit - Data Deserializer</DESCRIPT>
|
||||||
<EXPOSURE>2</EXPOSURE>
|
<EXPOSURE>2</EXPOSURE>
|
||||||
<STATE>1</STATE>
|
<STATE>1</STATE>
|
||||||
<UNICODE>X</UNICODE>
|
<UNICODE>X</UNICODE>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<VSEOINTERF>
|
<VSEOINTERF>
|
||||||
<CLSNAME>ZIF_ABAPGIT_DATA_SERIALIZER</CLSNAME>
|
<CLSNAME>ZIF_ABAPGIT_DATA_SERIALIZER</CLSNAME>
|
||||||
<LANGU>E</LANGU>
|
<LANGU>E</LANGU>
|
||||||
<DESCRIPT>abapGit - Data serializer</DESCRIPT>
|
<DESCRIPT>abapGit - Data Serializer</DESCRIPT>
|
||||||
<EXPOSURE>2</EXPOSURE>
|
<EXPOSURE>2</EXPOSURE>
|
||||||
<STATE>1</STATE>
|
<STATE>1</STATE>
|
||||||
<UNICODE>X</UNICODE>
|
<UNICODE>X</UNICODE>
|
||||||
|
|
|
@ -217,7 +217,7 @@ ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
CLASS zcl_abapgit_repo IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD bind_listener.
|
METHOD bind_listener.
|
||||||
|
@ -331,6 +331,7 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
METHOD deserialize.
|
METHOD deserialize.
|
||||||
|
|
||||||
DATA: lt_updated_files TYPE zif_abapgit_definitions=>ty_file_signatures_tt,
|
DATA: lt_updated_files TYPE zif_abapgit_definitions=>ty_file_signatures_tt,
|
||||||
|
lt_result TYPE zif_abapgit_data_deserializer=>ty_results,
|
||||||
lx_error TYPE REF TO zcx_abapgit_exception.
|
lx_error TYPE REF TO zcx_abapgit_exception.
|
||||||
|
|
||||||
find_remote_dot_abapgit( ).
|
find_remote_dot_abapgit( ).
|
||||||
|
@ -351,6 +352,7 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
zcx_abapgit_exception=>raise( |No transport request was supplied| ).
|
zcx_abapgit_exception=>raise( |No transport request was supplied| ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
" Deserialize objects
|
||||||
TRY.
|
TRY.
|
||||||
lt_updated_files = zcl_abapgit_objects=>deserialize(
|
lt_updated_files = zcl_abapgit_objects=>deserialize(
|
||||||
io_repo = me
|
io_repo = me
|
||||||
|
@ -364,9 +366,15 @@ CLASS ZCL_ABAPGIT_REPO IMPLEMENTATION.
|
||||||
|
|
||||||
APPEND get_dot_abapgit( )->get_signature( ) TO lt_updated_files.
|
APPEND get_dot_abapgit( )->get_signature( ) TO lt_updated_files.
|
||||||
|
|
||||||
|
update_local_checksums( lt_updated_files ).
|
||||||
|
|
||||||
|
" Deserialize data (no save to database, just test for now)
|
||||||
|
lt_result = zcl_abapgit_data_factory=>get_deserializer( )->deserialize(
|
||||||
|
ii_config = get_data_config( )
|
||||||
|
it_files = get_files_remote( ) ).
|
||||||
|
|
||||||
CLEAR: mt_local.
|
CLEAR: mt_local.
|
||||||
|
|
||||||
update_local_checksums( lt_updated_files ).
|
|
||||||
update_last_deserialize( ).
|
update_last_deserialize( ).
|
||||||
reset_status( ).
|
reset_status( ).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user