data: use ajson for serialization (#4363)

* data: use ajson for serialization

* config to_json

* implement from_json

* fix

* move method build_table_itab to new class

* start deserialize

* update

* scaffolding

* add page

* upd

* fix warning

* update

* rename variable

* upd

* update

* reorder
This commit is contained in:
Lars Hvam 2021-01-03 04:55:24 +01:00 committed by GitHub
parent 2b7a60daeb
commit 1d1d046d39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 616 additions and 68 deletions

View File

@ -11,8 +11,17 @@ CLASS zcl_abapgit_data_config DEFINITION
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
CONSTANTS c_extension TYPE string VALUE '.config.json'.
DATA mv_path TYPE string . DATA mv_path TYPE string .
DATA mt_config TYPE zif_abapgit_data_config=>ty_config_tt . DATA mt_config TYPE zif_abapgit_data_config=>ty_config_tt .
METHODS dump
IMPORTING
!is_config TYPE zif_abapgit_data_config=>ty_config
RETURNING
VALUE(rv_json) TYPE string
RAISING
zcx_abapgit_exception .
ENDCLASS. ENDCLASS.
@ -27,10 +36,31 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD dump.
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
DATA lv_string TYPE string.
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
TRY.
lo_ajson = zcl_abapgit_ajson=>create_empty( ).
lo_ajson->zif_abapgit_ajson_writer~set(
iv_path = '/'
iv_val = is_config ).
rv_json = zcl_abapgit_convert=>string_to_xstring_utf8( lo_ajson->stringify( 2 ) ).
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_data_config~add_config. METHOD zif_abapgit_data_config~add_config.
ASSERT NOT is_config-type IS INITIAL. ASSERT NOT is_config-type IS INITIAL.
ASSERT NOT is_config-name IS INITIAL. ASSERT NOT is_config-name IS INITIAL.
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.
@ -41,8 +71,24 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
METHOD zif_abapgit_data_config~from_json. METHOD zif_abapgit_data_config~from_json.
* todo
ASSERT 0 = 1. DATA ls_file LIKE LINE OF it_files.
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
CLEAR mt_config.
LOOP AT it_files INTO ls_file WHERE path = mv_path AND filename CP |*{ c_extension }|.
TRY.
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 ).
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
ENDTRY.
zif_abapgit_data_config~add_config( ls_config ).
ENDLOOP.
ENDMETHOD. ENDMETHOD.
@ -60,7 +106,9 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
METHOD zif_abapgit_data_config~remove_config. METHOD zif_abapgit_data_config~remove_config.
* todo, give exception if it does not exist ASSERT NOT is_config-type IS INITIAL.
ASSERT NOT is_config-name IS INITIAL.
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.
IF sy-subrc <> 0. IF sy-subrc <> 0.
@ -80,8 +128,19 @@ CLASS ZCL_ABAPGIT_DATA_CONFIG IMPLEMENTATION.
METHOD zif_abapgit_data_config~to_json. METHOD zif_abapgit_data_config~to_json.
* todo
ASSERT 0 = 1. DATA ls_config LIKE LINE OF mt_config.
DATA ls_file LIKE LINE OF rt_files.
ls_file-path = mv_path.
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-sha1 = zcl_abapgit_hash=>sha1_blob( ls_file-data ).
APPEND ls_file TO rt_files.
ENDLOOP.
ENDMETHOD. ENDMETHOD.

View File

@ -0,0 +1,80 @@
CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
PRIVATE SECTION.
DATA mv_json TYPE string.
DATA ms_config TYPE zif_abapgit_data_config=>ty_config.
METHODS setup.
METHODS to_json FOR TESTING RAISING cx_static_check.
METHODS from_json
IMPORTING it_files TYPE zif_abapgit_definitions=>ty_files_tt
RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_test IMPLEMENTATION.
METHOD setup.
mv_json = |\{\n| &&
| "name": "DUMMY",\n| &&
| "type": "TABU",\n| &&
| "where": [\n| &&
| "DUMMY"\n| &&
| ]\n| &&
|\}|.
ms_config-type = zif_abapgit_data_config=>c_data_type-tabu.
ms_config-name = 'DUMMY'.
APPEND 'DUMMY' TO ms_config-where.
ENDMETHOD.
METHOD to_json.
DATA li_config TYPE REF TO zif_abapgit_data_config.
DATA lt_files TYPE zif_abapgit_definitions=>ty_files_tt.
DATA ls_file LIKE LINE OF lt_files.
DATA lv_json TYPE string.
CREATE OBJECT li_config TYPE zcl_abapgit_data_config.
li_config->add_config( ms_config ).
lt_files = li_config->to_json( ).
cl_abap_unit_assert=>assert_equals(
act = lines( lt_files )
exp = 1 ).
READ TABLE lt_files INDEX 1 INTO ls_file.
cl_abap_unit_assert=>assert_subrc( ).
cl_abap_unit_assert=>assert_not_initial( ls_file-data ).
lv_json = zcl_abapgit_convert=>xstring_to_string_utf8( ls_file-data ).
cl_abap_unit_assert=>assert_equals(
act = lv_json
exp = mv_json ).
from_json( lt_files ).
ENDMETHOD.
METHOD from_json.
DATA li_config TYPE REF TO zif_abapgit_data_config.
CREATE OBJECT li_config TYPE zcl_abapgit_data_config.
li_config->from_json( it_files ).
cl_abap_unit_assert=>assert_equals(
act = lines( li_config->get_configs( ) )
exp = 1 ).
ENDMETHOD.
ENDCLASS.

View File

@ -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>

View File

@ -8,6 +8,13 @@ CLASS zcl_abapgit_data_deserializer DEFINITION
INTERFACES zif_abapgit_data_deserializer . INTERFACES zif_abapgit_data_deserializer .
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
METHODS read_json
IMPORTING
!is_file TYPE zif_abapgit_definitions=>ty_file
!ir_data TYPE REF TO data
RAISING
zcx_abapgit_exception .
ENDCLASS. ENDCLASS.
@ -15,8 +22,61 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_DATA_DESERIALIZER IMPLEMENTATION. CLASS ZCL_ABAPGIT_DATA_DESERIALIZER IMPLEMENTATION.
METHOD read_json.
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
ASSIGN ir_data->* TO <lg_tab>.
TRY.
lo_ajson = zcl_abapgit_ajson=>parse( zcl_abapgit_convert=>xstring_to_string_utf8( is_file-data ) ).
lo_ajson->zif_abapgit_ajson_reader~to_abap( IMPORTING ev_container = <lg_tab> ).
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_data_deserializer~actualize.
* todo, this method will update the database
ENDMETHOD.
METHOD zif_abapgit_data_deserializer~deserialize. METHOD zif_abapgit_data_deserializer~deserialize.
* this method does not persist any changes to the database
DATA lt_configs TYPE zif_abapgit_data_config=>ty_config_tt.
DATA ls_config LIKE LINE OF lt_configs.
DATA lr_data TYPE REF TO data.
DATA ls_file LIKE LINE OF it_files.
lt_configs = ii_config->get_configs( ).
LOOP AT lt_configs INTO ls_config.
lr_data = zcl_abapgit_data_utils=>build_table_itab( ls_config-name ).
READ TABLE it_files INTO ls_file WITH KEY
path = ii_config->get_path( )
filename = zcl_abapgit_data_utils=>build_filename( ls_config ).
IF sy-subrc = 0.
read_json(
ir_data = lr_data
is_file = ls_file ).
ENDIF.
* todo * todo
ENDLOOP.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -0,0 +1,32 @@
CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL.
PRIVATE SECTION.
METHODS test1 FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_test IMPLEMENTATION.
METHOD test1.
DATA li_cut TYPE REF TO zif_abapgit_data_deserializer.
DATA li_config TYPE REF TO zif_abapgit_data_config.
DATA lt_files TYPE zif_abapgit_definitions=>ty_files_tt.
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
CREATE OBJECT li_cut TYPE zcl_abapgit_data_deserializer.
CREATE OBJECT li_config TYPE zcl_abapgit_data_config.
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
ls_config-name = 'SFLIGHT'.
li_config->add_config( ls_config ).
li_cut->deserialize(
ii_config = li_config
it_files = lt_files ).
ENDMETHOD.
ENDCLASS.

View File

@ -5,11 +5,12 @@
<VSEOCLASS> <VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_DATA_DESERIALIZER</CLSNAME> <CLSNAME>ZCL_ABAPGIT_DATA_DESERIALIZER</CLSNAME>
<LANGU>E</LANGU> <LANGU>E</LANGU>
<DESCRIPT>abapGit - Data deserializer</DESCRIPT> <DESCRIPT>abapGit - Data Deserializer</DESCRIPT>
<STATE>1</STATE> <STATE>1</STATE>
<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>

View File

@ -5,7 +5,7 @@
<VSEOCLASS> <VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_DATA_FACTORY</CLSNAME> <CLSNAME>ZCL_ABAPGIT_DATA_FACTORY</CLSNAME>
<LANGU>E</LANGU> <LANGU>E</LANGU>
<DESCRIPT>abapGit - Data factory</DESCRIPT> <DESCRIPT>abapGit - Data Factory</DESCRIPT>
<STATE>1</STATE> <STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL> <CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT> <FIXPT>X</FIXPT>

View File

@ -5,7 +5,7 @@
<VSEOCLASS> <VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_DATA_INJECTOR</CLSNAME> <CLSNAME>ZCL_ABAPGIT_DATA_INJECTOR</CLSNAME>
<LANGU>E</LANGU> <LANGU>E</LANGU>
<DESCRIPT>abapGit - Data injector</DESCRIPT> <DESCRIPT>abapGit - Data Injector</DESCRIPT>
<STATE>1</STATE> <STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL> <CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT> <FIXPT>X</FIXPT>

View File

@ -12,12 +12,9 @@ CLASS zcl_abapgit_data_serializer DEFINITION
IMPORTING IMPORTING
!ir_data TYPE REF TO data !ir_data TYPE REF TO data
RETURNING RETURNING
VALUE(rv_data) TYPE xstring . VALUE(rv_data) TYPE xstring
METHODS build_table_itab RAISING
IMPORTING zcx_abapgit_exception .
!iv_name TYPE tadir-obj_name
RETURNING
VALUE(rr_data) TYPE REF TO data .
METHODS read_database_table METHODS read_database_table
IMPORTING IMPORTING
!iv_name TYPE tadir-obj_name !iv_name TYPE tadir-obj_name
@ -32,41 +29,27 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION. CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
METHOD build_table_itab.
DATA lo_structure TYPE REF TO cl_abap_structdescr.
DATA lo_table TYPE REF TO cl_abap_tabledescr.
lo_structure ?= cl_abap_structdescr=>describe_by_name( iv_name ).
* todo, also add unique key corresponding to the db table, so duplicates cannot be returned
lo_table = cl_abap_tabledescr=>create( lo_structure ).
CREATE DATA rr_data TYPE HANDLE lo_table.
ENDMETHOD.
METHOD dump_itab. METHOD dump_itab.
* quick and dirty, will be json instead DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
DATA lv_string TYPE string.
DATA lt_data TYPE string_table. DATA lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
DATA lv_str TYPE string.
FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE. FIELD-SYMBOLS <lg_tab> TYPE ANY TABLE.
FIELD-SYMBOLS <ls_row> TYPE any.
ASSIGN ir_data->* TO <lg_tab>. ASSIGN ir_data->* TO <lg_tab>.
LOOP AT <lg_tab> ASSIGNING <ls_row>.
cl_abap_container_utilities=>fill_container_c(
EXPORTING
im_value = <ls_row>
IMPORTING
ex_container = lv_str ).
APPEND lv_str TO lt_data.
ENDLOOP.
rv_data = zcl_abapgit_convert=>string_to_xstring_utf8( concat_lines_of( table = lt_data TRY.
sep = |\n| ) ). lo_ajson = zcl_abapgit_ajson=>create_empty( ).
lo_ajson->zif_abapgit_ajson_writer~set(
iv_path = '/'
iv_val = <lg_tab> ).
lv_string = lo_ajson->stringify( 2 ).
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
zcx_abapgit_exception=>raise( lx_ajson->get_text( ) ).
ENDTRY.
rv_data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_string ).
ENDMETHOD. ENDMETHOD.
@ -76,7 +59,7 @@ CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
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 = 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>.
LOOP AT it_where INTO lv_where. LOOP AT it_where INTO lv_where.
@ -108,7 +91,7 @@ CLASS ZCL_ABAPGIT_DATA_SERIALIZER IMPLEMENTATION.
iv_name = ls_config-name iv_name = ls_config-name
it_where = ls_config-where ). it_where = ls_config-where ).
ls_file-filename = to_lower( |{ ls_config-name }.{ ls_config-type }.todo| ). ls_file-filename = zcl_abapgit_data_utils=>build_filename( ls_config ).
ls_file-data = dump_itab( lr_data ). ls_file-data = dump_itab( 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.

View File

@ -0,0 +1,45 @@
CLASS zcl_abapgit_data_utils DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS build_table_itab
IMPORTING
!iv_name TYPE tadir-obj_name
RETURNING
VALUE(rr_data) TYPE REF TO data .
CLASS-METHODS build_filename
IMPORTING
is_config TYPE zif_abapgit_data_config=>ty_config
RETURNING
VALUE(rv_filename) TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
METHOD build_filename.
rv_filename = to_lower( |{ is_config-name }.{ is_config-type }.json| ).
ENDMETHOD.
METHOD build_table_itab.
DATA lo_structure TYPE REF TO cl_abap_structdescr.
DATA lo_table TYPE REF TO cl_abap_tabledescr.
lo_structure ?= cl_abap_structdescr=>describe_by_name( iv_name ).
* todo, also add unique key corresponding to the db table, so duplicates cannot be returned
lo_table = cl_abap_tabledescr=>create( lo_structure ).
CREATE DATA rr_data TYPE HANDLE lo_table.
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_DATA_UTILS</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Data Utils</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -11,7 +11,7 @@ INTERFACE zif_abapgit_data_config
where TYPE string_table, where TYPE string_table,
END OF ty_config . END OF ty_config .
TYPES: TYPES:
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: CONSTANTS:
@ -37,7 +37,9 @@ INTERFACE zif_abapgit_data_config
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS to_json METHODS to_json
RETURNING RETURNING
VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_tt . VALUE(rt_files) TYPE zif_abapgit_definitions=>ty_files_tt
RAISING
zcx_abapgit_exception .
METHODS add_config METHODS add_config
IMPORTING IMPORTING
!is_config TYPE ty_config !is_config TYPE ty_config

View File

@ -1,9 +1,26 @@
INTERFACE zif_abapgit_data_deserializer INTERFACE zif_abapgit_data_deserializer
PUBLIC . PUBLIC .
TYPES: BEGIN OF ty_result,
table TYPE tadir-obj_name,
deletes TYPE REF TO data,
updates TYPE REF TO data,
inserts TYPE REF TO data,
END OF ty_result.
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
VALUE(rs_result) TYPE ty_result
RAISING
zcx_abapgit_exception .
METHODS actualize
IMPORTING
is_result TYPE ty_result
RAISING
zcx_abapgit_exception .
ENDINTERFACE. ENDINTERFACE.

View File

@ -0,0 +1,225 @@
CLASS zcl_abapgit_gui_page_data DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_gui_page
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS constructor
RAISING
zcx_abapgit_exception .
METHODS zif_abapgit_gui_event_handler~on_event
REDEFINITION .
PROTECTED SECTION.
CONSTANTS:
BEGIN OF c_event,
add TYPE string VALUE 'add',
update TYPE string VALUE 'update',
remove TYPE string VALUE 'remove',
END OF c_event .
CONSTANTS:
BEGIN OF c_id,
table TYPE string VALUE 'table',
where TYPE string VALUE 'where',
END OF c_id .
DATA mi_config TYPE REF TO zif_abapgit_data_config .
METHODS render_content
REDEFINITION .
PRIVATE SECTION.
METHODS render_add
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html .
METHODS render_existing
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html
RAISING
zcx_abapgit_exception .
METHODS event_add
IMPORTING
!ii_event TYPE REF TO zif_abapgit_gui_event
RAISING
zcx_abapgit_exception .
METHODS event_remove
IMPORTING
!ii_event TYPE REF TO zif_abapgit_gui_event
RAISING
zcx_abapgit_exception .
METHODS event_update
IMPORTING
!ii_event TYPE REF TO zif_abapgit_gui_event
RAISING
zcx_abapgit_exception .
ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_DATA IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
ms_control-page_title = 'Data'.
CREATE OBJECT mi_config TYPE zcl_abapgit_data_config.
ENDMETHOD.
METHOD event_add.
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
lo_map = ii_event->form_data( ).
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
ls_config-name = to_upper( lo_map->get( c_id-table ) ).
SPLIT lo_map->get( c_id-where ) AT |\n| INTO TABLE ls_config-where.
mi_config->add_config( ls_config ).
ENDMETHOD.
METHOD event_remove.
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
lo_map = ii_event->form_data( ).
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
ls_config-name = to_upper( lo_map->get( c_id-table ) ).
mi_config->remove_config( ls_config ).
ENDMETHOD.
METHOD event_update.
DATA lo_map TYPE REF TO zcl_abapgit_string_map.
DATA ls_config TYPE zif_abapgit_data_config=>ty_config.
lo_map = ii_event->form_data( ).
ls_config-type = zif_abapgit_data_config=>c_data_type-tabu.
ls_config-name = to_upper( lo_map->get( c_id-table ) ).
SPLIT lo_map->get( c_id-where ) AT |\n| INTO TABLE ls_config-where.
mi_config->update_config( ls_config ).
ENDMETHOD.
METHOD render_add.
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
CREATE OBJECT lo_form_data.
lo_form = zcl_abapgit_html_form=>create( ).
lo_form->text(
iv_label = 'Table'
iv_name = c_id-table
iv_required = abap_true ).
lo_form->textarea(
iv_label = 'Where'
iv_placeholder = 'Conditions separated by newline'
iv_name = c_id-where ).
lo_form->command(
iv_label = 'Add'
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
iv_action = c_event-add ).
ri_html->add( lo_form->render(
iv_form_class = 'dialog w600px m-em5-sides margin-v1'
io_values = lo_form_data ) ).
ENDMETHOD.
METHOD render_content.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
ri_html->add( render_add( ) ).
ri_html->add( render_existing( ) ).
ENDMETHOD.
METHOD render_existing.
DATA lo_form TYPE REF TO zcl_abapgit_html_form.
DATA lo_form_data TYPE REF TO zcl_abapgit_string_map.
DATA lt_configs TYPE zif_abapgit_data_config=>ty_config_tt.
DATA ls_config LIKE LINE OF lt_configs.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
CREATE OBJECT lo_form_data.
lt_configs = mi_config->get_configs( ).
LOOP AT lt_configs INTO ls_config.
lo_form = zcl_abapgit_html_form=>create( ).
CREATE OBJECT lo_form_data.
lo_form_data->set(
iv_key = c_id-table
iv_val = |{ ls_config-name }| ).
lo_form->text(
iv_label = 'Table'
iv_name = c_id-table
iv_readonly = abap_true ).
lo_form_data->set(
iv_key = c_id-where
iv_val = concat_lines_of( table = ls_config-where sep = |\n| ) ).
lo_form->textarea(
iv_label = 'Where'
iv_placeholder = 'Conditions separated by newline'
iv_name = c_id-where ).
lo_form->command(
iv_label = 'Update'
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
iv_action = c_event-update ).
lo_form->command(
iv_label = 'Remove'
iv_cmd_type = zif_abapgit_html_form=>c_cmd_type-input_main
iv_action = c_event-remove ).
ri_html->add( lo_form->render(
iv_form_class = 'dialog w600px m-em5-sides margin-v1'
io_values = lo_form_data ) ).
ENDLOOP.
ENDMETHOD.
METHOD zif_abapgit_gui_event_handler~on_event.
CASE ii_event->mv_action.
WHEN c_event-add.
event_add( ii_event ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN c_event-update.
event_update( ii_event ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
WHEN c_event-remove.
event_remove( ii_event ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
ENDCASE.
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_GUI_PAGE_DATA</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>GUI - Data</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -19,6 +19,7 @@ CLASS zcl_abapgit_gui_page_repo_view DEFINITION
display_more TYPE string VALUE 'display_more' ##NO_TEXT, display_more TYPE string VALUE 'display_more' ##NO_TEXT,
repo_switch_origin_to_pr TYPE string VALUE 'repo_switch_origin_to_pr', repo_switch_origin_to_pr TYPE string VALUE 'repo_switch_origin_to_pr',
repo_reset_origin TYPE string VALUE 'repo_reset_origin', repo_reset_origin TYPE string VALUE 'repo_reset_origin',
go_data TYPE string VALUE 'go_data',
END OF c_actions . END OF c_actions .
METHODS constructor METHODS constructor
@ -192,7 +193,7 @@ ENDCLASS.
CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION. CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_VIEW IMPLEMENTATION.
METHOD apply_order_by. METHOD apply_order_by.
@ -308,6 +309,10 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
iv_act = |{ zif_abapgit_definitions=>c_action-repo_refresh_checksums }?key={ mv_key }| iv_act = |{ zif_abapgit_definitions=>c_action-repo_refresh_checksums }?key={ mv_key }|
iv_opt = lv_crossout ). iv_opt = lv_crossout ).
ro_advanced_dropdown->add( iv_txt = 'Beta - Data'
iv_act = |{ c_actions-go_data }?key={ mv_key }|
iv_opt = lv_crossout ).
IF is_repo_lang_logon_lang( ) = abap_false AND get_abapgit_tcode( ) IS NOT INITIAL. IF is_repo_lang_logon_lang( ) = abap_false AND get_abapgit_tcode( ) IS NOT INITIAL.
ro_advanced_dropdown->add( ro_advanced_dropdown->add(
iv_txt = 'Open in Main Language' iv_txt = 'Open in Main Language'
@ -637,6 +642,22 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_abapgit_tcode.
CONSTANTS: lc_report_tcode_hex TYPE x VALUE '80'.
DATA: lt_tcodes TYPE STANDARD TABLE OF tcode.
SELECT tcode
FROM tstc
INTO TABLE lt_tcodes
WHERE pgmna = sy-cprog
AND cinfo = lc_report_tcode_hex.
IF lines( lt_tcodes ) = 1.
READ TABLE lt_tcodes INDEX 1 INTO rv_tcode.
ENDIF.
ENDMETHOD.
METHOD get_item_class. METHOD get_item_class.
DATA lt_class TYPE TABLE OF string. DATA lt_class TYPE TABLE OF string.
@ -683,6 +704,11 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD is_repo_lang_logon_lang.
rv_repo_lang_is_logon_lang = boolc( mo_repo->get_dot_abapgit( )->get_master_language( ) = sy-langu ).
ENDMETHOD.
METHOD open_in_master_language. METHOD open_in_master_language.
DATA: DATA:
@ -1196,6 +1222,10 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
iv_key = |{ ii_event->query( )->get( 'KEY' ) }|. iv_key = |{ ii_event->query( )->get( 'KEY' ) }|.
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page_replacing. rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page_replacing.
WHEN c_actions-go_data.
CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_data.
rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page_replacing.
WHEN c_actions-toggle_hide_files. " Toggle file diplay WHEN c_actions-toggle_hide_files. " Toggle file diplay
mv_hide_files = zcl_abapgit_persistence_user=>get_instance( )->toggle_hide_files( ). mv_hide_files = zcl_abapgit_persistence_user=>get_instance( )->toggle_hide_files( ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render. rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render.
@ -1318,23 +1348,4 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION.
INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions.
ENDMETHOD. ENDMETHOD.
METHOD is_repo_lang_logon_lang.
rv_repo_lang_is_logon_lang = boolc( mo_repo->get_dot_abapgit( )->get_master_language( ) = sy-langu ).
ENDMETHOD.
METHOD get_abapgit_tcode.
CONSTANTS: lc_report_tcode_hex TYPE x VALUE '80'.
DATA: lt_tcodes TYPE STANDARD TABLE OF tcode.
SELECT tcode
FROM tstc
INTO TABLE lt_tcodes
WHERE pgmna = sy-cprog
AND cinfo = lc_report_tcode_hex.
IF lines( lt_tcodes ) = 1.
READ TABLE lt_tcodes INDEX 1 INTO rv_tcode.
ENDIF.
ENDMETHOD.
ENDCLASS. ENDCLASS.