json refactoring (#864)

* json refactoring

* update

* update
This commit is contained in:
oblomov 2024-02-04 16:56:56 +01:00 committed by GitHub
parent afaeb7f871
commit 6aa276f60b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 116 additions and 135 deletions

View File

@ -58,7 +58,6 @@ CLASS z2ui5_cl_fw_app DEFINITION
END OF ty_s_next.
DATA mo_http_post TYPE REF TO z2ui5_cl_fw_http_post.
DATA ms_db TYPE z2ui5_cl_fw_draft=>ty_s_db.
DATA ms_actual TYPE z2ui5_if_client=>ty_s_actual.
DATA ms_next TYPE ty_s_next.
@ -69,7 +68,7 @@ CLASS z2ui5_cl_fw_app DEFINITION
METHODS factory_system_error
IMPORTING
ix TYPE REF TO cx_root
ix TYPE REF TO cx_root
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_app.
@ -95,14 +94,12 @@ CLASS z2ui5_cl_fw_app DEFINITION
PROTECTED SECTION.
METHODS app_next_factory
IMPORTING
app TYPE REF TO z2ui5_if_app
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_app.
PRIVATE SECTION.
ENDCLASS.
@ -116,7 +113,6 @@ CLASS Z2UI5_CL_FW_APP IMPLEMENTATION.
app->id_draft = COND #( WHEN app->id_draft IS INITIAL THEN z2ui5_cl_util_func=>uuid_get_c32( ) ELSE app->id_draft ).
result = NEW #( mo_http_post ).
result->ms_db-app = app.
result->ms_db-id = app->id_draft.
result->ms_db-id_prev = ms_db-id.
@ -144,14 +140,13 @@ CLASS Z2UI5_CL_FW_APP IMPLEMENTATION.
result = app_next_factory( ms_next-o_app_call ).
result->ms_db-id_prev_app_stack = ms_db-id.
CLEAR result->ms_db-t_attri.
CLEAR ms_next.
IF ms_db-app IS BOUND.
z2ui5_cl_fw_draft=>create( id = ms_db-id db = ms_db ).
ENDIF.
CLEAR result->ms_db-t_attri.
ENDMETHOD.
@ -181,16 +176,16 @@ CLASS Z2UI5_CL_FW_APP IMPLEMENTATION.
result->ms_actual-viewname = mo_http_post->ms_request-s_frontend-viewname.
NEW z2ui5_cl_fw_http_mapper( )->model_front_to_back(
viewname = mo_http_post->ms_request-s_frontend-viewname
app = result->ms_db-app
t_attri = result->ms_db-t_attri
ajson_in = mo_http_post->ms_request-o_model
).
viewname = mo_http_post->ms_request-s_frontend-viewname
app = result->ms_db-app
t_attri = result->ms_db-t_attri
model = mo_http_post->ms_request-o_model ).
result->ms_actual-event = mo_http_post->ms_request-s_frontend-event.
result->ms_actual-t_event_arg = mo_http_post->ms_request-s_frontend-t_event_arg.
result->ms_actual-check_on_navigated = abap_false.
result->ms_db-check_attri = abap_false.
ENDMETHOD.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_APP</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - controller</DESCRIPT>
<DESCRIPT>abap2UI5 - app flow</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -150,64 +150,6 @@ ENDCLASS.
CLASS Z2UI5_CL_FW_BINDING IMPLEMENTATION.
METHOD bind_struc_comp.
FIELD-SYMBOLS <ele> TYPE any.
FIELD-SYMBOLS <row> TYPE any.
DATA lr_ref_in TYPE REF TO data.
DATA lr_ref TYPE REF TO data.
ASSIGN i_struc TO <row>.
DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( i_struc ).
LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(<comp>).
ASSIGN COMPONENT <comp>-name OF STRUCTURE <row> TO <ele>.
lr_ref_in = REF #( <ele> ).
lr_ref = REF #( i_val ).
IF lr_ref = lr_ref_in.
r_result = `{` && iv_name && '/' && <comp>-name && `}`.
RETURN.
ENDIF.
ENDLOOP.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `BINDING_ERROR - No class attribute for binding found - Please check if the binded values are public attributes of your class`.
ENDMETHOD.
METHOD bind_tab_cell.
FIELD-SYMBOLS <ele> TYPE any.
FIELD-SYMBOLS <row> TYPE any.
DATA lr_ref_in TYPE REF TO data.
DATA lr_ref TYPE REF TO data.
ASSIGN i_tab[ i_tab_index ] TO <row>.
DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <row> ).
LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(<comp>).
ASSIGN COMPONENT <comp>-name OF STRUCTURE <row> TO <ele>.
lr_ref_in = REF #( <ele> ).
lr_ref = REF #( i_val ).
IF lr_ref = lr_ref_in.
r_result = `{` && iv_name && '/' && shift_right( CONV string( i_tab_index - 1 ) ) && '/' && <comp>-name && `}`.
RETURN.
ENDIF.
ENDLOOP.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `BINDING_ERROR - No class attribute for binding found - Please check if the binded values are public attributes of your class`.
ENDMETHOD.
METHOD bind.
@ -301,6 +243,66 @@ CLASS Z2UI5_CL_FW_BINDING IMPLEMENTATION.
ENDMETHOD.
METHOD bind_struc_comp.
FIELD-SYMBOLS <ele> TYPE any.
FIELD-SYMBOLS <row> TYPE any.
DATA lr_ref_in TYPE REF TO data.
DATA lr_ref TYPE REF TO data.
ASSIGN i_struc TO <row>.
DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( i_struc ).
LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(<comp>).
ASSIGN COMPONENT <comp>-name OF STRUCTURE <row> TO <ele>.
lr_ref_in = REF #( <ele> ).
lr_ref = REF #( i_val ).
IF lr_ref = lr_ref_in.
r_result = `{` && iv_name && '/' && <comp>-name && `}`.
RETURN.
ENDIF.
ENDLOOP.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `BINDING_ERROR - No class attribute for binding found - Please check if the binded values are public attributes of your class`.
ENDMETHOD.
METHOD bind_tab_cell.
FIELD-SYMBOLS <ele> TYPE any.
FIELD-SYMBOLS <row> TYPE any.
DATA lr_ref_in TYPE REF TO data.
DATA lr_ref TYPE REF TO data.
ASSIGN i_tab[ i_tab_index ] TO <row>.
DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <row> ).
LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(<comp>).
ASSIGN COMPONENT <comp>-name OF STRUCTURE <row> TO <ele>.
lr_ref_in = REF #( <ele> ).
lr_ref = REF #( i_val ).
IF lr_ref = lr_ref_in.
r_result = `{` && iv_name && '/' && shift_right( CONV string( i_tab_index - 1 ) ) && '/' && <comp>-name && `}`.
RETURN.
ENDIF.
ENDLOOP.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `BINDING_ERROR - No class attribute for binding found - Please check if the binded values are public attributes of your class`.
ENDMETHOD.
METHOD dissolve_dref.
LOOP AT mt_attri REFERENCE INTO DATA(lr_bind)

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_BINDING</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - binding</DESCRIPT>
<DESCRIPT>abap2UI5 - data binding</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -14,14 +14,12 @@ CLASS z2ui5_cl_fw_client DEFINITION
handler TYPE REF TO z2ui5_cl_fw_app.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION.
CLASS z2ui5_cl_fw_client IMPLEMENTATION.
METHOD constructor.
@ -49,7 +47,7 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION.
t_event_arg = mo_app->ms_actual-t_event_arg
s_draft = CORRESPONDING #( mo_app->ms_db )
check_on_navigated = mo_app->ms_actual-check_on_navigated
s_config = value #(
s_config = VALUE #(
origin = mo_app->mo_http_post->ms_request-s_frontend-origin
pathname = mo_app->mo_http_post->ms_request-s_frontend-pathname
search = mo_app->mo_http_post->ms_request-s_frontend-search
@ -270,29 +268,27 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION.
i_tab_index = tab_index
i_tab = tab
i_val = val ).
RETURN.
ENDIF.
ELSE.
DATA(lo_binder) = z2ui5_cl_fw_binding=>factory(
app = mo_app->ms_db-app
attri = mo_app->ms_db-t_attri
check_attri = mo_app->ms_db-check_attri
type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
data = val
view = view
custom_mapper = custom_mapper
custom_mapper_back = custom_mapper_back
custom_filter = custom_filter
).
DATA(lo_binder) = z2ui5_cl_fw_binding=>factory(
app = mo_app->ms_db-app
attri = mo_app->ms_db-t_attri
check_attri = mo_app->ms_db-check_attri
type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
data = val
view = view
custom_mapper = custom_mapper
custom_mapper_back = custom_mapper_back
custom_filter = custom_filter
).
result = lo_binder->main( ).
mo_app->ms_db-t_attri = lo_binder->mt_attri.
mo_app->ms_db-check_attri = lo_binder->mv_check_attri.
IF path = abap_false.
result = `{` && result && `}`.
ENDIF.
result = lo_binder->main( ).
mo_app->ms_db-t_attri = lo_binder->mt_attri.
mo_app->ms_db-check_attri = lo_binder->mv_check_attri.
IF path = abap_false.
result = `{` && result && `}`.
ENDIF.
ENDMETHOD.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_CLIENT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - client</DESCRIPT>
<DESCRIPT>abap2UI5 - user api</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -5,7 +5,6 @@ CLASS z2ui5_cl_fw_draft DEFINITION
PUBLIC SECTION.
TYPES ty_s_db2 TYPE z2ui5_t_fw_01.
TYPES:
@ -51,17 +50,14 @@ ENDCLASS.
CLASS Z2UI5_CL_FW_DRAFT IMPLEMENTATION.
CLASS z2ui5_cl_fw_draft IMPLEMENTATION.
METHOD cleanup.
DATA(lv_time) = z2ui5_cl_util_func=>time_get_timestampl( ).
DATA(lv_four_hours_ago) = z2ui5_cl_util_func=>time_substract_seconds(
time = lv_time
seconds = 60 * 60 * 4 ).
time = z2ui5_cl_util_func=>time_get_timestampl( )
seconds = 60 * 60 * 4 ).
DELETE FROM z2ui5_t_fw_01 WHERE timestampl < @lv_four_hours_ago.
COMMIT WORK.
@ -109,7 +105,6 @@ CLASS Z2UI5_CL_FW_DRAFT IMPLEMENTATION.
WHERE data_rtti IS NOT INITIAL
AND type_kind = cl_abap_classdescr=>typekind_dref.
DATA(lv_assign) = 'LO_APP->' && lr_attri->name.
ASSIGN (lv_assign) TO <ref>.
IF sy-subrc <> 0.
@ -158,6 +153,7 @@ CLASS Z2UI5_CL_FW_DRAFT IMPLEMENTATION.
METHOD trans_any_2_xml.
FIELD-SYMBOLS <attri> TYPE any.
FIELD-SYMBOLS <deref_attri> TYPE any.
@ -183,7 +179,6 @@ CLASS Z2UI5_CL_FW_DRAFT IMPLEMENTATION.
DATA(lv_assign) = 'LO_APP->' && lr_attri->name.
UNASSIGN <deref_attri>.
UNASSIGN <attri>.
ASSIGN (lv_assign) TO <attri>.
@ -207,7 +202,7 @@ CLASS Z2UI5_CL_FW_DRAFT IMPLEMENTATION.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attributes of your class`.
val = `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attributes of your class`.
ENDTRY.
ENDTRY.

View File

@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_FW_DRAFT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - draft</DESCRIPT>
<DESCRIPT>abap2UI5 - draft &amp; db</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>

View File

@ -23,7 +23,7 @@ CLASS z2ui5_cl_fw_http_mapper DEFINITION
app TYPE REF TO object
viewname TYPE string
t_attri TYPE z2ui5_cl_fw_binding=>ty_t_attri
ajson_in TYPE REF TO z2ui5_if_ajson ##NEEDED.
model TYPE REF TO z2ui5_if_ajson ##NEEDED.
METHODS model_back_to_front
IMPORTING
@ -48,7 +48,6 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
LOOP AT t_attri REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``.
"(1) set pretty mode
IF lr_attri->custom_mapper IS BOUND.
DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = lr_attri->custom_mapper ) ).
@ -56,7 +55,6 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
ENDIF.
"(2) read attribute of end-user app
IF lr_attri->bind_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
OR lr_attri->bind_type = z2ui5_cl_fw_binding=>cs_bind_type-two_way.
@ -66,8 +64,7 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
ASSERT sy-subrc = 0.
ENDIF.
"(3) write into json
"(3) write to json
CASE lr_attri->bind_type.
WHEN z2ui5_cl_fw_binding=>cs_bind_type-one_time.
@ -86,7 +83,6 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
ASSERT `` = `ERROR_UNKNOWN_BIND_MODE`.
ENDCASE.
"(4) set compress mode
"todo performance - add and filter in a single loop
IF lr_attri->custom_filter IS BOUND.
@ -105,7 +101,6 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD.
@ -121,13 +116,13 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
ASSIGN (lv_name_back) TO <backend>.
ASSERT sy-subrc = 0.
DATA(ajson_val) = ajson_in->slice( `/` && lr_attri->name_front ).
DATA(lo_val_front) = model->slice( `/` && lr_attri->name_front ).
IF lr_attri->custom_mapper_back IS BOUND.
ajson_val = ajson_val->map( lr_attri->custom_mapper_back ).
lo_val_front = lo_val_front->map( lr_attri->custom_mapper_back ).
ENDIF.
ajson_val->to_abap(
lo_val_front->to_abap(
IMPORTING
ev_container = <backend> ).
@ -154,20 +149,14 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
IMPORTING
ev_container = result-s_frontend ).
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
result-s_control-check_launchpad = xsdbool( result-s_frontend-search CS `scenario=LAUNCHPAD` ).
IF result-s_frontend-id IS NOT INITIAL.
RETURN.
ENDIF.
result-s_control-app_start = z2ui5_cl_util_func=>c_trim_upper( result-s_frontend-app_start ).
IF result-s_control-app_start IS NOT INITIAL.
RETURN.
ENDIF.
result-s_control-app_start = z2ui5_cl_util_func=>c_trim_upper(
z2ui5_cl_util_func=>url_param_get( val = `app_start` url = result-s_frontend-search ) ).
@ -185,10 +174,12 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
ajson_result->set( iv_path = `/` iv_val = val-s_frontend ).
ajson_result = ajson_result->filter( NEW z2ui5_cl_fw_http_mapper( ) ).
DATA(lv_frontend) = ajson_result->stringify( ).
DATA(lv_model) = val-o_model->stringify( ).
result = `{` &&
|"S_FRONTEND" : { ajson_result->stringify( ) },| &&
|"MODEL" : { val-o_model->stringify( ) }| &&
|"S_FRONTEND":{ lv_frontend },| &&
|"MODEL":{ COND #( WHEN lv_model IS INITIAL THEN `{}` ELSE lv_model ) }| &&
`}`.
CATCH cx_root INTO DATA(x).
@ -201,10 +192,9 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
rv_keep = abap_true.
CASE iv_visit.
WHEN z2ui5_if_ajson_filter=>visit_type-value.
WHEN z2ui5_if_ajson_filter=>visit_type-value.
CASE is_node-type.
WHEN z2ui5_if_ajson_types=>node_type-boolean.
@ -221,7 +211,7 @@ CLASS z2ui5_cl_fw_http_mapper IMPLEMENTATION.
ENDIF.
ENDCASE.
WHEN z2ui5_if_ajson_filter=>visit_type-close.
WHEN z2ui5_if_ajson_filter=>visit_type-close.
IF is_node-children = 0.
rv_keep = abap_false.

View File

@ -6,8 +6,8 @@ CLASS z2ui5_cl_fw_http_post DEFINITION
PUBLIC SECTION.
DATA mv_request_json TYPE string.
DATA ms_request TYPE z2ui5_if_client=>ty_s_http_request_post.
DATA ms_response TYPE z2ui5_if_client=>ty_s_http_response_post.
DATA ms_request TYPE z2ui5_if_client=>ty_s_http_request_post.
DATA ms_response TYPE z2ui5_if_client=>ty_s_http_response_post.
CLASS-METHODS factory
IMPORTING
@ -20,16 +20,20 @@ CLASS z2ui5_cl_fw_http_post DEFINITION
VALUE(result) TYPE string.
PROTECTED SECTION.
CLASS-DATA mo_http_mapper TYPE REF TO z2ui5_cl_fw_http_mapper.
DATA mo_app TYPE REF TO z2ui5_cl_fw_app.
DATA mo_http_mapper TYPE REF TO z2ui5_cl_fw_http_mapper.
DATA mo_app TYPE REF TO z2ui5_cl_fw_app.
METHODS main_begin.
METHODS main_process
RETURNING
VALUE(check_go_frontend) TYPE abap_bool.
METHODS main_end
RETURNING
VALUE(result) TYPE string.
PRIVATE SECTION.
ENDCLASS.
@ -42,7 +46,7 @@ CLASS z2ui5_cl_fw_http_post IMPLEMENTATION.
result = NEW #( ).
result->mv_request_json = val.
mo_http_mapper = NEW z2ui5_cl_fw_http_mapper( ).
result->mo_http_mapper = NEW z2ui5_cl_fw_http_mapper( ).
result->mo_app = NEW z2ui5_cl_fw_app( result ).
ENDMETHOD.

View File

@ -103,7 +103,6 @@ INTERFACE z2ui5_if_client
BEGIN OF ty_s_actual,
event TYPE string,
t_event_arg TYPE string_table,
* check_launchpad_active TYPE abap_bool,
check_on_navigated TYPE abap_bool,
viewname TYPE string,
s_draft TYPE ty_s_draft,