delete_ui2_json (#846)

* delete_ui2_json

* update

* update
This commit is contained in:
oblomov 2024-02-03 01:22:48 +01:00 committed by GitHub
parent d5c331ffbb
commit 0c7130cfc2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 1013 additions and 2049 deletions

View File

@ -1,44 +1,46 @@
interface z2ui5_if_ajson_mapping INTERFACE z2ui5_if_ajson_mapping
public. PUBLIC.
types: INTERFACES if_serializable_object.
begin of ty_mapping_field, " deprecated, will be removed
abap type string,
json type string,
end of ty_mapping_field,
ty_mapping_fields type standard table of ty_mapping_field
with unique sorted key abap components abap
with unique sorted key json components json.
types: TYPES:
begin of ty_rename, BEGIN OF ty_mapping_field, " deprecated, will be removed
from type string, abap TYPE string,
to type string, json TYPE string,
end of ty_rename, END OF ty_mapping_field,
tty_rename_map type standard table of ty_rename ty_mapping_fields TYPE STANDARD TABLE OF ty_mapping_field
with unique sorted key by_name components from. WITH UNIQUE SORTED KEY abap COMPONENTS abap
WITH UNIQUE SORTED KEY json COMPONENTS json.
types: TYPES:
ty_table_of type standard table of ref to z2ui5_if_ajson_mapping. BEGIN OF ty_rename,
from TYPE string,
to TYPE string,
END OF ty_rename,
tty_rename_map TYPE STANDARD TABLE OF ty_rename
WITH UNIQUE SORTED KEY by_name COMPONENTS from.
methods to_abap " deprecated, will be removed TYPES:
importing ty_table_of TYPE STANDARD TABLE OF REF TO z2ui5_if_ajson_mapping.
!iv_path type string
!iv_name type string
returning
value(rv_result) type string.
methods to_json " deprecated, will be removed METHODS to_abap " deprecated, will be removed
importing IMPORTING
!iv_path type string !iv_path TYPE string
!iv_name type string !iv_name TYPE string
returning RETURNING
value(rv_result) type string. VALUE(rv_result) TYPE string.
methods rename_node METHODS to_json " deprecated, will be removed
importing IMPORTING
!is_node type z2ui5_if_ajson_types=>ty_node !iv_path TYPE string
changing !iv_name TYPE string
!cv_name type z2ui5_if_ajson_types=>ty_node-name. RETURNING
VALUE(rv_result) TYPE string.
endinterface. METHODS rename_node
IMPORTING
!is_node TYPE z2ui5_if_ajson_types=>ty_node
CHANGING
!cv_name TYPE z2ui5_if_ajson_types=>ty_node-name.
ENDINTERFACE.

View File

@ -159,11 +159,9 @@ CLASS z2ui5_cl_util_func DEFINITION
CLASS-METHODS trans_json_by_any CLASS-METHODS trans_json_by_any
IMPORTING IMPORTING
!any TYPE any !any TYPE any
!pretty_mode TYPE clike DEFAULT z2ui5_if_client=>cs_pretty_mode-none
!compress_mode TYPE clike DEFAULT z2ui5_if_client=>cs_compress_mode-standard
RETURNING RETURNING
VALUE(result) TYPE string. VALUE(result) TYPE string.
CLASS-METHODS trans_xml_2_any CLASS-METHODS trans_xml_2_any
IMPORTING IMPORTING
@ -1243,53 +1241,27 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
METHOD trans_json_2_any. METHOD trans_json_2_any.
TRY.
* IF z2ui5_cl_fw_controller=>cv_check_ajson = abap_true. z2ui5_cl_ajson=>parse( val )->to_abap(
* ASSERT 1 = 0. IMPORTING
* ENDIF. ev_container = data ).
/ui2/cl_json=>deserialize(
EXPORTING
json = CONV string( val )
assoc_arrays = abap_true
CHANGING
data = data ).
CATCH z2ui5_cx_ajson_error INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD. ENDMETHOD.
METHOD trans_json_by_any. METHOD trans_json_by_any.
TRY.
* IF z2ui5_cl_fw_controller=>cv_check_ajson = abap_true. DATA(li_ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ).
* ASSERT 1 = 0. result = li_ajson->set( iv_path = `/` iv_val = any )->stringify( ).
* ENDIF.
CASE compress_mode.
WHEN z2ui5_if_client=>cs_compress_mode-full.
result = /ui2/cl_json=>serialize(
data = any
compress = abap_true
pretty_name = pretty_mode ).
WHEN z2ui5_if_client=>cs_compress_mode-none.
result = /ui2/cl_json=>serialize(
data = any
compress = abap_false
pretty_name = pretty_mode ).
WHEN OTHERS.
DATA(lo_json) = NEW z2ui5_cl_util_ui2_json(
compress = abap_true
pretty_name = pretty_mode ).
result = lo_json->serialize_int( any ).
ENDCASE.
CATCH z2ui5_cx_ajson_error INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD. ENDMETHOD.

File diff suppressed because it is too large Load Diff

View File

@ -1,240 +0,0 @@
CLASS z2ui5_cl_util_tree_json DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
DATA mo_root TYPE REF TO z2ui5_cl_util_tree_json.
DATA mo_parent TYPE REF TO z2ui5_cl_util_tree_json.
DATA mv_name TYPE string.
DATA mv_value TYPE string.
DATA mt_values TYPE STANDARD TABLE OF REF TO z2ui5_cl_util_tree_json WITH EMPTY KEY.
DATA mr_actual TYPE REF TO data.
DATA mv_apost_active TYPE abap_bool.
CLASS-METHODS factory
IMPORTING
iv_json TYPE clike OPTIONAL
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_util_tree_json.
METHODS constructor.
METHODS get_attribute
IMPORTING
name TYPE string
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_util_tree_json.
METHODS get_val
RETURNING
VALUE(result) TYPE string.
METHODS get_val_ref
RETURNING
VALUE(result) TYPE REF TO data.
METHODS add_attribute
IMPORTING
n TYPE clike
v TYPE clike
apos_active TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_util_tree_json.
METHODS add_attribute_object
IMPORTING
name TYPE clike
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_util_tree_json.
METHODS add_attribute_struc
IMPORTING
val TYPE data
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_util_tree_json.
METHODS add_attribute_instance
IMPORTING
val TYPE REF TO z2ui5_cl_util_tree_json
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_util_tree_json.
METHODS stringify
RETURNING
VALUE(result) TYPE string.
PROTECTED SECTION.
CLASS-METHODS new
IMPORTING
io_root TYPE REF TO z2ui5_cl_util_tree_json
iv_name TYPE simple
RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_util_tree_json.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_util_tree_json IMPLEMENTATION.
METHOD add_attribute.
result = new( io_root = mo_root
iv_name = n ).
result->mv_value = COND #( WHEN apos_active = abap_true
THEN escape( val = v
format = cl_abap_format=>e_json_string ) ELSE v ).
result->mv_apost_active = apos_active.
result->mo_parent = me.
INSERT result INTO TABLE mt_values.
ENDMETHOD.
METHOD add_attribute_instance.
val->mo_root = mo_root.
val->mo_parent = me.
INSERT val INTO TABLE mt_values.
result = val.
ENDMETHOD.
METHOD add_attribute_object.
result = new( io_root = mo_root
iv_name = name ).
INSERT result INTO TABLE mt_values.
result->mo_parent = me.
ENDMETHOD.
METHOD add_attribute_struc.
FIELD-SYMBOLS <value> TYPE any.
DATA(lo_struc) = CAST cl_abap_structdescr( cl_abap_datadescr=>describe_by_data( val ) ).
DATA(lt_comp) = lo_struc->get_components( ).
LOOP AT lt_comp REFERENCE INTO DATA(lr_comp).
ASSIGN COMPONENT lr_comp->name OF STRUCTURE val TO <value>.
add_attribute( n = lr_comp->name
v = <value> ).
ENDLOOP.
result = me.
ENDMETHOD.
METHOD constructor.
mo_root = me.
ENDMETHOD.
METHOD factory.
IF z2ui5_cl_fw_controller=>cv_check_ajson = abap_true.
ASSERT 1 = 0.
ENDIF.
result = NEW #( ).
result->mo_root = result.
z2ui5_cl_util_func=>trans_json_2_any(
EXPORTING
val = iv_json
CHANGING
data = result->mr_actual ).
ENDMETHOD.
METHOD get_attribute.
IF z2ui5_cl_fw_controller=>cv_check_ajson = abap_true.
ASSERT 1 = 0.
ENDIF.
FIELD-SYMBOLS <attribute> TYPE any.
z2ui5_cl_util_func=>x_check_raise( xsdbool( mr_actual IS INITIAL ) ).
result = new( io_root = mo_root
iv_name = name ).
DATA(lv_name) = 'MR_ACTUAL->' && replace( val = name
sub = `-`
with = `_`
occ = 0 ).
ASSIGN (lv_name) TO <attribute>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
result->mr_actual = <attribute>.
result->mo_parent = me.
INSERT result INTO TABLE mt_values.
ENDMETHOD.
METHOD get_val.
FIELD-SYMBOLS <attribute> TYPE any.
ASSIGN mr_actual->* TO <attribute>.
z2ui5_cl_util_func=>x_check_raise( when = xsdbool( sy-subrc <> 0 )
v = `value of attribute in JSON not found` ).
result = <attribute>.
ENDMETHOD.
METHOD get_val_ref.
result = mr_actual.
ENDMETHOD.
METHOD new.
result = NEW #( ).
result->mo_root = io_root.
result->mv_name = CONV string( iv_name ).
ENDMETHOD.
METHOD stringify.
LOOP AT mt_values INTO DATA(lo_attri).
IF sy-tabix > 1.
result = result && `,`.
ENDIF.
result = |{ result }"{ lo_attri->mv_name }":|.
IF lo_attri->mt_values IS NOT INITIAL.
result = result && lo_attri->stringify( ).
ELSEIF lo_attri->mv_apost_active = abap_true OR lo_attri->mv_value IS INITIAL.
result = result && `"` && lo_attri->mv_value && `"`.
ELSE.
result = result && lo_attri->mv_value.
ENDIF.
ENDLOOP.
result = `{` && result && `}`.
ENDMETHOD.
ENDCLASS.

View File

@ -1,85 +0,0 @@
*CLASS ltcl_unit_01_json DEFINITION FINAL FOR TESTING
* DURATION LONG
* RISK LEVEL HARMLESS.
*
* PRIVATE SECTION.
* METHODS test_json_attri FOR TESTING RAISING cx_static_check.
* METHODS test_json_object FOR TESTING RAISING cx_static_check.
* METHODS test_json_struc FOR TESTING RAISING cx_static_check.
* METHODS test_create_json FOR TESTING RAISING cx_static_check.
*
*ENDCLASS.
*
*CLASS ltcl_unit_01_json IMPLEMENTATION.
*
* METHOD test_json_attri.
*
* DATA(lo_tree) = NEW z2ui5_cl_util_tree_json( ).
* lo_tree->add_attribute( n = `AAA`
* v = `BBB` ).
*
* DATA(lv_result) = lo_tree->stringify( ).
* IF `{"AAA":"BBB"}` <> lv_result.
* cl_abap_unit_assert=>fail( 'json tree - wrong stringify attributes' ).
* ENDIF.
*
* ENDMETHOD.
*
* METHOD test_json_object.
*
* DATA(lo_tree) = NEW z2ui5_cl_util_tree_json( ).
* lo_tree->add_attribute_object( `CCC` )->add_attribute( n = `AAA`
* v = `BBB` ).
*
* DATA(lv_result) = lo_tree->stringify( ).
* IF `{"CCC":{"AAA":"BBB"}}` <> lv_result.
* cl_abap_unit_assert=>fail( 'json tree - wrong stringify object attributes' ).
* ENDIF.
*
* ENDMETHOD.
*
* METHOD test_json_struc.
*
* DATA(lo_tree) = NEW z2ui5_cl_util_tree_json( ).
*
* TYPES:
* BEGIN OF ty_s_test,
* comp1 TYPE string,
* comp2 TYPE string,
* END OF ty_s_test.
*
* DATA(ls_test) = VALUE ty_s_test( comp1 = `AAA` comp2 = `BBB` ).
* lo_tree->add_attribute_object( `CCC` )->add_attribute_struc( ls_test ).
*
* DATA(lv_result) = lo_tree->stringify( ).
* IF `{"CCC":{"COMP1":"AAA","COMP2":"BBB"}}` <> lv_result.
* cl_abap_unit_assert=>fail( 'json tree - wrong stringify structure' ).
* ENDIF.
*
* ENDMETHOD.
*
* METHOD test_create_json.
*
*
*
* DATA(lo_json) = z2ui5_cl_util_tree_json=>factory( `{"CCC":{"COMP1":"AAA","COMP2":"BBB"}}` ).
*
* DATA(lo_attri) = lo_json->get_attribute( `CCC` )->get_attribute( `COMP2` ).
*
*
* FIELD-SYMBOLS <any> TYPE any.
* DATA(lr_ref) = lo_attri->get_val_ref( ).
*
* ASSIGN lr_ref->* TO <any>.
* IF <any> <> `BBB`.
* cl_abap_unit_assert=>fail( quit = 5 ).
* ENDIF.
*
* DATA(lv_val) = lo_attri->get_val( ).
* IF lv_val <> `BBB`.
* cl_abap_unit_assert=>fail( quit = 5 ).
* ENDIF.
*
* ENDMETHOD.
*
*ENDCLASS.

View File

@ -1,17 +0,0 @@
<?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>Z2UI5_CL_UTIL_TREE_JSON</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - utility json</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -1,29 +0,0 @@
CLASS z2ui5_cl_util_ui2_json DEFINITION
PUBLIC
FINAL
CREATE PUBLIC INHERITING FROM /ui2/cl_json.
PUBLIC SECTION.
PROTECTED SECTION.
METHODS is_compressable REDEFINITION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_util_ui2_json IMPLEMENTATION.
METHOD is_compressable.
rv_compress = super->is_compressable(
type_descr = type_descr
name = name ).
IF z2ui5_cl_util_func=>boolean_check_by_name( type_descr->get_relative_name( ) ).
rv_compress = abap_false.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -1,16 +0,0 @@
<?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>Z2UI5_CL_UTIL_UI2_JSON</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - /ui2/cl_json compress extension</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -1,33 +1,33 @@
class Z2UI5_CX_UTIL_ERROR definition CLASS z2ui5_cx_util_error DEFINITION
public PUBLIC
inheriting from CX_NO_CHECK INHERITING FROM cx_no_check
final FINAL
create public . CREATE PUBLIC .
public section. PUBLIC SECTION.
data: DATA:
BEGIN OF ms_error, BEGIN OF ms_error,
x_root TYPE REF TO cx_root, x_root TYPE REF TO cx_root,
uuid TYPE string, uuid TYPE string,
text TYPE string, text TYPE string,
END OF ms_error . END OF ms_error .
methods CONSTRUCTOR METHODS constructor
importing IMPORTING
!VAL type ANY optional !val TYPE any OPTIONAL
!PREVIOUS type ref to CX_ROOT optional !previous TYPE REF TO cx_root OPTIONAL
preferred parameter VAL . PREFERRED PARAMETER val .
methods IF_MESSAGE~GET_TEXT METHODS if_message~get_text
redefinition . REDEFINITION .
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
CLASS Z2UI5_CX_UTIL_ERROR IMPLEMENTATION. CLASS z2ui5_cx_util_error IMPLEMENTATION.
METHOD constructor ##ADT_SUPPRESS_GENERATION. METHOD constructor ##ADT_SUPPRESS_GENERATION.
@ -45,7 +45,7 @@ CLASS Z2UI5_CX_UTIL_ERROR IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD IF_MESSAGE~get_text. METHOD if_message~get_text.
IF ms_error-x_root IS NOT INITIAL. IF ms_error-x_root IS NOT INITIAL.
result = ms_error-x_root->get_text( ). result = ms_error-x_root->get_text( ).
@ -55,7 +55,7 @@ CLASS Z2UI5_CX_UTIL_ERROR IMPLEMENTATION.
error = abap_true. error = abap_true.
ENDIF. ENDIF.
result = COND #( WHEN error = abap_true AND result IS INITIAL THEN `unknown error` else result ). result = COND #( WHEN error = abap_true AND result IS INITIAL THEN `unknown error` ELSE result ).
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -33,7 +33,7 @@ CLASS z2ui5_cl_fw_binding DEFINITION
depth TYPE i, depth TYPE i,
ajson_local TYPE REF TO z2ui5_if_ajson, ajson_local TYPE REF TO z2ui5_if_ajson,
custom_filter TYPE REF TO z2ui5_if_ajson_filter, custom_filter TYPE REF TO z2ui5_if_ajson_filter,
custom_mapper TYPE REF TO z2ui5_if_ajson_mapping, custom_mapper TYPE REF TO z2ui5_if_ajson_mapping,
END OF ty_s_attri. END OF ty_s_attri.
TYPES ty_t_attri TYPE SORTED TABLE OF ty_s_attri WITH UNIQUE KEY name. TYPES ty_t_attri TYPE SORTED TABLE OF ty_s_attri WITH UNIQUE KEY name.
@ -45,9 +45,6 @@ CLASS z2ui5_cl_fw_binding DEFINITION
data TYPE data OPTIONAL data TYPE data OPTIONAL
check_attri TYPE data OPTIONAL check_attri TYPE data OPTIONAL
view TYPE clike OPTIONAL view TYPE clike OPTIONAL
pretty_name TYPE clike OPTIONAL
compress TYPE clike OPTIONAL
* compress_custom TYPE clike OPTIONAL
custom_filter TYPE REF TO z2ui5_if_ajson_filter OPTIONAL custom_filter TYPE REF TO z2ui5_if_ajson_filter OPTIONAL
custom_mapper TYPE REF TO z2ui5_if_ajson_mapping OPTIONAL custom_mapper TYPE REF TO z2ui5_if_ajson_mapping OPTIONAL
RETURNING RETURNING
@ -132,12 +129,6 @@ CLASS z2ui5_cl_fw_binding DEFINITION
RETURNING RETURNING
VALUE(result) TYPE REF TO ty_s_attri. VALUE(result) TYPE REF TO ty_s_attri.
METHODS name_front_create
IMPORTING
val TYPE clike
RETURNING
VALUE(result) TYPE string.
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
@ -186,23 +177,10 @@ CLASS z2ui5_cl_fw_binding IMPLEMENTATION.
bind->viewname = mv_view. bind->viewname = mv_view.
bind->custom_filter = mo_custom_filter. bind->custom_filter = mo_custom_filter.
bind->custom_mapper = mo_custom_mapper. bind->custom_mapper = mo_custom_mapper.
* bind->compress_custom = mv_compress_custom.
IF z2ui5_cl_fw_controller=>cv_check_ajson = abap_false. bind->name_front = replace( val = bind->name sub = `-` with = `/` ).
bind->name_front = replace( val = bind->name_front sub = `>` with = `` ).
bind->name_front = name_front_create( bind->name ). result = `/` && COND #( WHEN mv_type = cs_bind_type-two_way THEN cv_model_edit_name && `/` ) && bind->name_front.
result = COND #( WHEN mv_type = cs_bind_type-two_way THEN `/` && cv_model_edit_name && `/` ELSE `/` ) && bind->name_front.
IF strlen( result ) > 30.
bind->name_front = z2ui5_cl_util_func=>uuid_get_c22( ).
result = COND #( WHEN mv_type = cs_bind_type-two_way THEN `/` && cv_model_edit_name && `/` ELSE `/` ) && bind->name_front.
ENDIF.
ELSE.
bind->name_front = replace( val = bind->name sub = `-` with = `/` ).
bind->name_front = replace( val = bind->name_front sub = `>` with = `` ).
result = `/` && COND #( WHEN mv_type = cs_bind_type-two_way THEN cv_model_edit_name && `/` ) && bind->name_front.
ENDIF.
ENDMETHOD. ENDMETHOD.
@ -214,40 +192,27 @@ CLASS z2ui5_cl_fw_binding IMPLEMENTATION.
ASSIGN mr_data->* TO <any>. ASSIGN mr_data->* TO <any>.
DATA(lv_id) = to_upper( z2ui5_cl_util_func=>uuid_get_c22( ) ). DATA(lv_id) = to_upper( z2ui5_cl_util_func=>uuid_get_c22( ) ).
IF z2ui5_cl_fw_controller=>cv_check_ajson = abap_false. IF mo_custom_mapper IS BOUND.
DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = mo_custom_mapper ) ).
INSERT VALUE #( name = lv_id
data_stringify = z2ui5_cl_util_func=>trans_json_by_any( any = mr_data
compress_mode = me->mv_compress )
bind_type = cs_bind_type-one_time )
INTO TABLE mt_attri.
ELSE. ELSE.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
"(1) set pretty mode
CASE mv_pretty_name.
WHEN z2ui5_if_client=>cs_pretty_mode-none.
DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
WHEN z2ui5_if_client=>cs_pretty_mode-camel_case.
ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) ).
WHEN OTHERS.
ASSERT `` = `ERROR_UNKNOWN_PRETTY_MODE`.
ENDCASE.
INSERT VALUE #( name_front = lv_id
name = lv_id
ajson_local = ajson->set( iv_path = `/` iv_val = <any> )
bind_type = cs_bind_type-one_time
pretty_name = mv_pretty_name
compress = mv_compress
)
INTO TABLE mt_attri.
ENDIF. ENDIF.
IF mo_custom_filter IS BOUND.
ajson = ajson->filter( mo_custom_filter ).
ELSE.
ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
ENDIF.
INSERT VALUE #( name_front = lv_id
name = lv_id
ajson_local = ajson->set( iv_path = `/` iv_val = <any> )
bind_type = cs_bind_type-one_time
pretty_name = mv_pretty_name
compress = mv_compress
)
INTO TABLE mt_attri.
result = |/{ lv_id }|. result = |/{ lv_id }|.
CATCH cx_root INTO DATA(x). CATCH cx_root INTO DATA(x).
@ -327,8 +292,6 @@ CLASS z2ui5_cl_fw_binding IMPLEMENTATION.
r_result->mv_type = type. r_result->mv_type = type.
r_result->mv_check_attri = check_attri. r_result->mv_check_attri = check_attri.
r_result->mv_view = view. r_result->mv_view = view.
r_result->mv_pretty_name = pretty_name.
r_result->mv_compress = compress.
r_result->mo_custom_filter = custom_filter. r_result->mo_custom_filter = custom_filter.
r_result->mo_custom_mapper = custom_mapper. r_result->mo_custom_mapper = custom_mapper.
@ -502,29 +465,6 @@ CLASS z2ui5_cl_fw_binding IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD name_front_create.
result = replace( val = val
sub = `*`
with = `_`
occ = 0 ).
result = replace( val = result
sub = `>`
with = `_`
occ = 0 ).
result = replace( val = result
sub = `-`
with = `_`
occ = 0 ).
IF mv_pretty_name = abap_true.
REPLACE ALL OCCURRENCES OF `_` IN result WITH ``.
ENDIF.
ENDMETHOD.
METHOD search_binding. METHOD search_binding.
set_attri_ready( REF #( mt_attri ) ). set_attri_ready( REF #( mt_attri ) ).

View File

@ -316,8 +316,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
IF struc IS NOT INITIAL. IF struc IS NOT INITIAL.
DATA(lv_name_struc) = z2ui5_if_client~_bind_edit( val = struc DATA(lv_name_struc) = z2ui5_if_client~_bind_edit( val = struc
path = abap_true path = abap_true ).
pretty_mode = pretty_mode ).
result = bind_struc_comp( result = bind_struc_comp(
iv_name = lv_name_struc iv_name = lv_name_struc
i_struc = struc i_struc = struc
@ -333,9 +332,6 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
check_attri = mo_handler->ms_db-check_attri check_attri = mo_handler->ms_db-check_attri
type = z2ui5_cl_fw_binding=>cs_bind_type-one_way type = z2ui5_cl_fw_binding=>cs_bind_type-one_way
data = val data = val
pretty_name = pretty_mode
compress = compress_mode
* compress_custom = compress_custom
custom_mapper = custom_mapper custom_mapper = custom_mapper
custom_filter = custom_filter custom_filter = custom_filter
). ).
@ -377,8 +373,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
IF tab IS NOT INITIAL. IF tab IS NOT INITIAL.
DATA(lv_name) = z2ui5_if_client~_bind_edit( val = tab DATA(lv_name) = z2ui5_if_client~_bind_edit( val = tab
path = abap_true path = abap_true ).
pretty_mode = pretty_mode ).
result = bind_tab_cell( result = bind_tab_cell(
iv_name = lv_name iv_name = lv_name
i_tab_index = tab_index i_tab_index = tab_index
@ -392,8 +387,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
IF struc IS NOT INITIAL. IF struc IS NOT INITIAL.
DATA(lv_name_struc) = z2ui5_if_client~_bind_edit( val = struc DATA(lv_name_struc) = z2ui5_if_client~_bind_edit( val = struc
path = abap_true path = abap_true ).
pretty_mode = pretty_mode ).
result = bind_struc_comp( result = bind_struc_comp(
iv_name = lv_name_struc iv_name = lv_name_struc
i_struc = struc i_struc = struc
@ -410,9 +404,6 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
type = z2ui5_cl_fw_binding=>cs_bind_type-two_way type = z2ui5_cl_fw_binding=>cs_bind_type-two_way
data = val data = val
view = view view = view
pretty_name = pretty_mode
compress = compress_mode
* compress_custom = compress_custom
custom_mapper = custom_mapper custom_mapper = custom_mapper
custom_filter = custom_filter custom_filter = custom_filter
). ).
@ -436,10 +427,7 @@ CLASS z2ui5_cl_fw_client IMPLEMENTATION.
check_attri = mo_handler->ms_db-check_attri check_attri = mo_handler->ms_db-check_attri
type = z2ui5_cl_fw_binding=>cs_bind_type-one_time type = z2ui5_cl_fw_binding=>cs_bind_type-one_time
data = val data = val
pretty_name = pretty_mode custom_mapper = custom_mapper
compress = compress_mode
* compress_custom = compress_custom
custom_mapper = custom_mapper
custom_filter = custom_filter custom_filter = custom_filter
). ).

View File

@ -4,7 +4,6 @@ CLASS z2ui5_cl_fw_controller DEFINITION
CREATE PUBLIC. CREATE PUBLIC.
PUBLIC SECTION. PUBLIC SECTION.
CLASS-DATA cv_check_ajson TYPE abap_bool VALUE abap_true.
TYPES: TYPES:
BEGIN OF ty_s_next2, BEGIN OF ty_s_next2,
@ -59,7 +58,6 @@ CLASS z2ui5_cl_fw_controller DEFINITION
END OF ty_s_next. END OF ty_s_next.
CLASS-DATA ss_config TYPE z2ui5_if_client=>ty_s_config. CLASS-DATA ss_config TYPE z2ui5_if_client=>ty_s_config.
CLASS-DATA so_body TYPE REF TO z2ui5_cl_util_tree_json.
CLASS-DATA so_body_ajson TYPE REF TO z2ui5_if_ajson. CLASS-DATA so_body_ajson TYPE REF TO z2ui5_if_ajson.
DATA ms_db TYPE z2ui5_cl_fw_db=>ty_s_db. DATA ms_db TYPE z2ui5_cl_fw_db=>ty_s_db.
@ -86,10 +84,6 @@ CLASS z2ui5_cl_fw_controller DEFINITION
CLASS-METHODS body_read_location. CLASS-METHODS body_read_location.
CLASS-METHODS _get_id
RETURNING
VALUE(result) TYPE string.
CLASS-METHODS app_system_factory CLASS-METHODS app_system_factory
IMPORTING IMPORTING
VALUE(ix) TYPE REF TO cx_root OPTIONAL VALUE(ix) TYPE REF TO cx_root OPTIONAL
@ -129,18 +123,6 @@ CLASS z2ui5_cl_fw_controller DEFINITION
RETURNING RETURNING
VALUE(result) TYPE REF TO z2ui5_cl_fw_controller. VALUE(result) TYPE REF TO z2ui5_cl_fw_controller.
METHODS app_client_end_model
RETURNING
VALUE(rv_viewmodel) TYPE string.
METHODS app_client_end_response
IMPORTING
iv_viewmodel TYPE string
RETURNING
VALUE(r_result) TYPE string.
METHODS app_client_end_db.
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
@ -168,50 +150,13 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
METHOD app_client_begin_event. METHOD app_client_begin_event.
TRY. TRY.
IF cv_check_ajson = abap_false. DATA(ajson) = so_body_ajson->slice( `/ARGUMENTS` ).
ms_actual-event = ajson->get( `/1/EVENT` ).
FIELD-SYMBOLS <any> TYPE any. ajson->delete( `/1` ).
FIELD-SYMBOLS <arg> TYPE STANDARD TABLE. ajson->to_abap(
FIELD-SYMBOLS <arg_row> TYPE any. IMPORTING
FIELD-SYMBOLS <val> TYPE any. ev_container = ms_actual-t_event_arg
).
ASSIGN (`SO_BODY->MR_ACTUAL`) TO <any>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
ASSIGN (`<ANY>->ARGUMENTS`) TO <any>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
ASSIGN (`<ANY>->*`) TO <any>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
ASSIGN <any> TO <arg>.
z2ui5_cl_util_func=>x_check_raise( xsdbool( sy-subrc <> 0 ) ).
LOOP AT <arg> ASSIGNING <arg_row>.
IF sy-tabix = 1.
ASSIGN (`<ARG_ROW>->EVENT->*`) TO <val>.
ms_actual-event = <val>.
ELSE.
ASSIGN <arg_row>->* TO <val>.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
INSERT CONV string( <val> ) INTO TABLE ms_actual-t_event_arg.
ENDIF.
ENDLOOP.
ELSE.
DATA(ajson) = so_body_ajson->slice( `/ARGUMENTS` ).
ms_actual-event = ajson->get( `/1/EVENT` ).
ajson->delete( `/1` ).
ajson->to_abap(
IMPORTING
ev_container = ms_actual-t_event_arg
).
ENDIF.
CATCH cx_root INTO DATA(x). CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND. ASSERT x IS NOT BOUND.
@ -220,91 +165,31 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
METHOD app_client_begin_factory. METHOD app_client_begin_factory.
result = NEW #( ).
result->ms_db = z2ui5_cl_fw_db=>load_app( id_prev ).
result->ms_db-id = z2ui5_cl_util_func=>uuid_get_c32( ).
result->ms_db-id_prev = id_prev.
TRY. TRY.
IF cv_check_ajson = abap_false.
result->ms_actual-viewname = so_body->get_attribute( `VIEWNAME` )->get_val( ).
ELSE.
result->ms_actual-viewname = so_body_ajson->get( iv_path = `/VIEWNAME` ).
ENDIF.
CATCH cx_root.
ENDTRY.
result = NEW #( ).
result->ms_db = z2ui5_cl_fw_db=>load_app( id_prev ).
result->ms_db-id = z2ui5_cl_util_func=>uuid_get_c32( ).
result->ms_db-id_prev = id_prev.
result->ms_actual-viewname = so_body_ajson->get( iv_path = `/VIEWNAME` ).
CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDMETHOD. ENDMETHOD.
METHOD app_client_begin_model. METHOD app_client_begin_model.
IF cv_check_ajson = abap_false. z2ui5_cl_fw_model_ajson=>front_to_back(
viewname = ms_actual-viewname
TRY. app = ms_db-app
DATA(lo_model) = z2ui5_cl_fw_model=>factory( t_attri = ms_db-t_attri
viewname = ms_actual-viewname ajson_in = so_body_ajson
app = ms_db-app ).
attri = ms_db-t_attri ).
lo_model->main_set_backend(
so_body->get_attribute( z2ui5_cl_fw_binding=>cv_model_edit_name )->mr_actual ).
CATCH cx_root.
ENDTRY.
ELSE.
z2ui5_cl_fw_model_ajson=>front_to_back(
viewname = ms_actual-viewname
app = ms_db-app
t_attri = ms_db-t_attri
ajson_in = so_body_ajson
).
ENDIF.
ENDMETHOD.
METHOD app_client_end_db.
z2ui5_cl_fw_db=>create( id = ms_db-id
db = ms_db ).
ENDMETHOD.
METHOD app_client_end_model.
DATA(lo_binder) = z2ui5_cl_fw_model=>factory(
viewname = ms_actual-viewname
app = ms_db-app
attri = ms_db-t_attri ).
rv_viewmodel = lo_binder->main_set_frontend( ).
ENDMETHOD.
METHOD app_client_end_response.
DATA(lo_resp) = z2ui5_cl_util_tree_json=>factory( ).
lo_resp->add_attribute( n = `OVIEWMODEL`
v = iv_viewmodel
apos_active = abap_false ).
lo_resp->add_attribute( n = `PARAMS`
v = z2ui5_cl_util_func=>trans_json_by_any( ms_next-s_set )
apos_active = abap_false ).
lo_resp->add_attribute( n = `ID`
v = ms_db-id ).
r_result = lo_resp->mo_root->stringify( ).
ENDMETHOD. ENDMETHOD.
@ -354,32 +239,18 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
METHOD app_start_factory. METHOD app_start_factory.
IF cv_check_ajson = abap_false. TRY.
TRY. DATA(lv_classname) = to_upper( so_body_ajson->get( `/APP_START` ) ).
DATA(lv_classname) = to_upper( so_body->get_attribute( `APP_START` )->get_val( ) ). lv_classname = z2ui5_cl_util_func=>c_trim( lv_classname ).
lv_classname = z2ui5_cl_util_func=>c_trim( lv_classname ). CATCH cx_root.
CATCH cx_root. ENDTRY.
ENDTRY.
IF lv_classname IS INITIAL.
lv_classname = z2ui5_cl_util_func=>url_param_get( val = `app_start`
url = ss_config-search ).
ENDIF.
ELSE.
TRY.
lv_classname = to_upper( so_body_ajson->get( `/APP_START` ) ).
lv_classname = z2ui5_cl_util_func=>c_trim( lv_classname ).
CATCH cx_root.
ENDTRY.
IF lv_classname IS INITIAL.
lv_classname = z2ui5_cl_util_func=>url_param_get( val = `app_start`
url = ss_config-search ).
ENDIF.
IF lv_classname IS INITIAL.
lv_classname = z2ui5_cl_util_func=>url_param_get( val = `app_start`
url = ss_config-search ).
ENDIF. ENDIF.
IF lv_classname IS INITIAL. IF lv_classname IS INITIAL.
result = app_system_factory( ). result = app_system_factory( ).
RETURN. RETURN.
@ -422,74 +293,16 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
METHOD body_read_location. METHOD body_read_location.
TRY.
IF cv_check_ajson = abap_false. so_body_ajson->slice( `/OLOCATION` )->to_abap(
IMPORTING
ev_container = ss_config
).
FIELD-SYMBOLS <struc> TYPE any. CATCH cx_root INTO DATA(x).
FIELD-SYMBOLS <val_ref> TYPE REF TO data. ASSERT x IS NOT BOUND.
FIELD-SYMBOLS <tab> TYPE table. ENDTRY.
FIELD-SYMBOLS <val2> TYPE data.
TRY.
DATA(location) = so_body->get_attribute( `OLOCATION` ).
CATCH cx_root.
ENDTRY.
TRY.
ss_config-search = location->get_attribute( `SEARCH` )->get_val( ).
CATCH cx_root.
ENDTRY.
TRY.
ss_config-origin = location->get_attribute( `ORIGIN` )->get_val( ).
CATCH cx_root.
ENDTRY.
TRY.
ss_config-pathname = location->get_attribute( `PATHNAME` )->get_val( ).
CATCH cx_root.
ENDTRY.
TRY.
ss_config-version = location->get_attribute( `VERSION` )->get_val( ).
CATCH cx_root.
ENDTRY.
TRY.
ss_config-check_launchpad_active = location->get_attribute( `CHECK_LAUNCHPAD_ACTIVE` )->get_val( ).
CATCH cx_root.
ENDTRY.
TRY.
DATA(ls_params) = location->get_attribute( `STARTUP_PARAMETERS` )->get_val_ref( ).
ASSIGN ls_params->* TO <struc>.
DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <struc> ).
LOOP AT lt_comp INTO DATA(ls_comp).
ASSIGN COMPONENT ls_comp-name OF STRUCTURE <struc> TO <val_ref>.
ASSIGN <val_ref>->* TO <tab>.
ASSIGN <tab>[ 1 ] TO <val_ref>.
ASSIGN <val_ref>->* TO <val2>.
INSERT VALUE #( n = ls_comp-name v = <val2> ) INTO TABLE ss_config-t_startup_params.
ENDLOOP.
CATCH cx_root.
ENDTRY.
ELSE.
TRY.
so_body_ajson->slice( `/OLOCATION` )->to_abap(
IMPORTING
ev_container = ss_config
).
CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDIF.
ENDMETHOD. ENDMETHOD.
@ -534,21 +347,10 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
METHOD request_begin. METHOD request_begin.
TRY. TRY.
* ss_config-body = body. so_body_ajson = z2ui5_cl_ajson=>parse( body ).
IF cv_check_ajson = abap_false.
so_body = z2ui5_cl_util_tree_json=>factory( body ).
ELSE.
so_body_ajson = z2ui5_cl_ajson=>parse( body ).
ENDIF.
* ss_config-view_model_edit_name = z2ui5_cl_fw_binding=>cv_model_edit_name.
body_read_location( ). body_read_location( ).
IF cv_check_ajson = abap_false. DATA(lv_id_prev) = so_body_ajson->get( `/ID` ).
DATA(lv_id_prev) = _get_id( ).
ELSE.
lv_id_prev = so_body_ajson->get( `/ID` ).
ENDIF.
IF lv_id_prev IS INITIAL. IF lv_id_prev IS INITIAL.
result = app_start_factory( ). result = app_start_factory( ).
result->ms_actual-check_on_navigated = abap_true. result->ms_actual-check_on_navigated = abap_true.
@ -572,47 +374,28 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
METHOD request_end. METHOD request_end.
IF cv_check_ajson = abap_false.
DATA(lv_viewmodel) = app_client_end_model( ).
result = app_client_end_response( lv_viewmodel ).
app_client_end_db( ).
ELSE.
TRY.
"todo performance - write all data directly into the target ajson
DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty(
ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
ajson_result->set( iv_path = `/PARAMS` iv_val = ms_next-s_set ).
ajson_result->set( iv_path = `/ID` iv_val = ms_db-id ).
ajson_result = ajson_result->filter( NEW z2ui5_cl_fw_model_ajson( ) ).
DATA(lo_ajson) = z2ui5_cl_fw_model_ajson=>back_to_front(
app = ms_db-app
t_attri = ms_db-t_attri ).
ajson_result->set( iv_path = `/OVIEWMODEL` iv_val = lo_ajson ).
result = ajson_result->stringify( ).
z2ui5_cl_fw_db=>create( id = ms_db-id db = ms_db ).
CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY.
ENDIF.
ENDMETHOD.
METHOD _get_id.
TRY. TRY.
result = so_body->get_attribute( `ID` )->get_val( ). "todo performance - write all data directly into the target ajson
DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty(
ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
CATCH cx_root. ajson_result->set( iv_path = `/PARAMS` iv_val = ms_next-s_set ).
ajson_result->set( iv_path = `/ID` iv_val = ms_db-id ).
ajson_result = ajson_result->filter( NEW z2ui5_cl_fw_model_ajson( ) ).
DATA(lo_ajson) = z2ui5_cl_fw_model_ajson=>back_to_front(
app = ms_db-app
t_attri = ms_db-t_attri ).
ajson_result->set( iv_path = `/OVIEWMODEL` iv_val = lo_ajson ).
result = ajson_result->stringify( ).
z2ui5_cl_fw_db=>create( id = ms_db-id db = ms_db ).
CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND.
ENDTRY. ENDTRY.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -1,177 +0,0 @@
CLASS z2ui5_cl_fw_model DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS factory
IMPORTING
app TYPE REF TO object
attri TYPE z2ui5_cl_fw_binding=>ty_t_attri
viewname TYPE string
RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_fw_model.
METHODS main_set_backend
IMPORTING
model TYPE REF TO data ##NEEDED.
METHODS main_set_frontend
RETURNING
VALUE(result) TYPE string.
DATA mo_app TYPE REF TO object.
DATA mt_attri TYPE z2ui5_cl_fw_binding=>ty_t_attri.
DATA mv_viewname TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_fw_model IMPLEMENTATION.
METHOD factory.
r_result = NEW #( ).
r_result->mo_app = app.
r_result->mt_attri = attri.
r_result->mv_viewname = viewname.
ENDMETHOD.
METHOD main_set_backend.
FIELD-SYMBOLS <backend> TYPE any.
FIELD-SYMBOLS <frontend> TYPE any.
LOOP AT mt_attri REFERENCE INTO DATA(lr_attri)
WHERE bind_type = z2ui5_cl_fw_binding=>cs_bind_type-two_way AND
viewname = mv_viewname.
TRY.
DATA(lv_name_back) = `MO_APP->` && lr_attri->name.
UNASSIGN <backend>.
ASSIGN (lv_name_back) TO <backend>.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `NO_BACKEND_VALUE_FOUND_WITH_NAME__` && lv_name_back.
ENDIF.
DATA(lv_name_front) = `MODEL->` && lr_attri->name_front.
UNASSIGN <frontend>.
ASSIGN (lv_name_front) TO <frontend>.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `NO_FRONTEND_VALUE_FOUND_WITH_NAME__` && lv_name_front.
ENDIF.
CASE lr_attri->type_kind.
WHEN cl_abap_typedescr=>typekind_table.
z2ui5_cl_util_func=>trans_ref_tab_2_tab(
EXPORTING
ir_tab_from = <frontend>
pretty_name = lr_attri->pretty_name
IMPORTING
t_result = <backend> ).
WHEN cl_abap_typedescr=>typekind_struct1 OR cl_abap_typedescr=>typekind_struct2.
z2ui5_cl_util_func=>trans_ref_struc_2_struc(
EXPORTING
ir_struc_from = <frontend>
pretty_name = lr_attri->pretty_name
IMPORTING
r_result = <backend> ).
WHEN OTHERS.
ASSIGN <frontend>->* TO <frontend>.
CASE lr_attri->type_kind.
WHEN cl_abap_typedescr=>typekind_date OR cl_abap_typedescr=>typekind_time.
z2ui5_cl_util_func=>trans_json_2_any(
EXPORTING
val = `"` && <frontend> && `"`
CHANGING
data = <backend> ).
WHEN OTHERS.
<backend> = <frontend>.
ENDCASE.
ENDCASE.
CATCH cx_root.
ENDTRY.
ENDLOOP.
ENDMETHOD.
METHOD main_set_frontend.
DATA(lr_view_model) = z2ui5_cl_util_tree_json=>factory( ).
DATA(lo_update) = lr_view_model->add_attribute_object( z2ui5_cl_fw_binding=>cv_model_edit_name ).
FIELD-SYMBOLS <attribute> TYPE any.
LOOP AT mt_attri REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``.
IF lr_attri->bind_type = z2ui5_cl_fw_binding=>cs_bind_type-one_time.
lr_view_model->add_attribute( n = lr_attri->name
v = lr_attri->data_stringify
apos_active = abap_false ).
CONTINUE.
ENDIF.
DATA(lo_actual) = COND #( WHEN lr_attri->bind_type = z2ui5_cl_fw_binding=>cs_bind_type-one_way THEN lr_view_model
ELSE lo_update ).
DATA(lv_name_back) = `MO_APP->` && lr_attri->name.
ASSIGN (lv_name_back) TO <attribute>.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING
val = `Error while creating the response, seems that some app data is not available anymore. <p>BINDING_ERROR - No attribute found with name: ` && lr_attri->name && `</p>`.
ENDIF.
CASE lr_attri->type_kind.
WHEN `h`.
lo_actual->add_attribute( n = lr_attri->name_front
v = z2ui5_cl_util_func=>trans_json_by_any( any = <attribute> pretty_mode = lr_attri->pretty_name compress_mode = lr_attri->compress )
apos_active = abap_false ).
WHEN OTHERS.
IF z2ui5_cl_util_func=>boolean_check_by_name( lr_attri->type ).
lo_actual->add_attribute( n = lr_attri->name_front
v = SWITCH #( <attribute> WHEN abap_true THEN `true` ELSE `false` )
apos_active = abap_false ).
ELSE.
lo_actual->add_attribute( n = lr_attri->name_front
v = z2ui5_cl_util_func=>trans_json_by_any( any = <attribute> pretty_mode = lr_attri->pretty_name compress_mode = lr_attri->compress )
apos_active = abap_false ).
ENDIF.
ENDCASE.
ENDLOOP.
result = lr_view_model->stringify( ).
ENDMETHOD.
ENDCLASS.

View File

@ -1,69 +0,0 @@
*CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING
* DURATION LONG
* RISK LEVEL DANGEROUS.
*
* PUBLIC SECTION.
* DATA quantity TYPE string.
*
* PRIVATE SECTION.
* METHODS test_model_set_frontend FOR TESTING RAISING cx_static_check.
* METHODS test_model_set_backend FOR TESTING RAISING cx_static_check.
*
*ENDCLASS.
*
*
*CLASS ltcl_unit_test IMPLEMENTATION.
*
* METHOD test_model_set_frontend.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ( name = `QUANTITY` bind_type = z2ui5_cl_fw_binding=>cs_bind_type-two_way name_front = `QUANTITY` ) ).
* DATA(lo_app) = NEW ltcl_unit_test( ).
*
* lo_app->quantity = `600`.
*
* DATA(lo_model) = z2ui5_cl_fw_model=>factory(
* viewname = ``
* app = lo_app
* attri = lt_attri ).
*
* DATA(lv_frontend) = lo_model->main_set_frontend( ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lv_frontend
* exp = `{"EDIT":{"QUANTITY":"600"}}` ).
*
* ENDMETHOD.
*
* METHOD test_model_set_backend.
*
* DATA(lt_attri) = VALUE z2ui5_cl_fw_binding=>ty_t_attri( ( name = `QUANTITY` bind_type = z2ui5_cl_fw_binding=>cs_bind_type-two_way name_front = `QUANTITY` ) ).
* DATA(lo_app) = NEW ltcl_unit_test( ).
*
* DATA(lv_model) = `{"EDIT":{"QUANTITY":"600"},"oScroll":[],"OMESSAGEMANAGER":[],"ID":"0242B09497911EDE90A60CD0D8519DD5","ARGUMENTS":[{"EVENT":"BUTTON_POST","METHOD":"UPDATE","CHECK_VIEW_DESTROY":false}],"OCURSOR":{"id":"__button1"},"OLOCATION":{`
* && `"SEARCH":"?sap-client=001&app_start=z2ui5_cl_app_hello_world","VERSION":"com.sap.ui5.dist:sapui5-sdk-dist:1.116.0:war"}}`.
*
* DATA lr_model TYPE REF TO data.
* FIELD-SYMBOLS <any> TYPE any.
* /ui2/cl_json=>deserialize(
* EXPORTING
* json = lv_model
* CHANGING
* data = lr_model ).
*
* DATA(lo_model) = z2ui5_cl_fw_model=>factory(
* viewname = ``
* app = lo_app
* attri = lt_attri ).
*
* DATA(lv_assign) = `LR_MODEL->` && z2ui5_cl_fw_binding=>cv_model_edit_name.
*
* ASSIGN (lv_assign) TO <any>.
* lo_model->main_set_backend( <any> ).
*
* cl_abap_unit_assert=>assert_equals(
* act = lo_app->quantity
* exp = `600` ).
*
* ENDMETHOD.
*
*ENDCLASS.

View File

@ -1,17 +0,0 @@
<?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>Z2UI5_CL_FW_MODEL</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abap2UI5 - model</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -77,17 +77,6 @@ CLASS z2ui5_cl_fw_model_ajson IMPLEMENTATION.
ELSE. ELSE.
ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ). ajson = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
ENDIF. ENDIF.
* CASE lr_attri->pretty_name.
*
* WHEN z2ui5_if_client=>cs_pretty_mode-none.
* DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ).
*
* WHEN z2ui5_if_client=>cs_pretty_mode-camel_case.
* ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) ).
*
* WHEN OTHERS.
* ASSERT `` = `ERROR_UNKNOWN_PRETTY_MODE`.
* ENDCASE.
"(2) read attribute of end-user app "(2) read attribute of end-user app
@ -127,34 +116,13 @@ CLASS z2ui5_cl_fw_model_ajson IMPLEMENTATION.
ELSE. ELSE.
ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ). ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
ENDIF. ENDIF.
* IF lr_attri->compress_custom IS NOT INITIAL.
* DATA li_filter TYPE REF TO z2ui5_if_ajson_filter.
* CREATE OBJECT li_filter TYPE (lr_attri->compress_custom).
* ajson = ajson->filter( li_filter ).
*
* ELSEIF lr_attri->compress = z2ui5_if_client=>cs_compress_mode-full.
* "obsolete - is this still needed? use compress_custom instead
* ASSERT `` = `OBSOLET_COMPRESS_MODE_USE_CUSTOM_INSTEAD`.
*
* ELSEIF lr_attri->compress = z2ui5_if_client=>cs_compress_mode-standard.
* ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ).
*
* ELSEIF lr_attri->compress = z2ui5_if_client=>cs_compress_mode-none.
* "obsolete - is this still needed? use compress_custom instead
* ASSERT `` = `OBSOLET_COMPRESS_MODE_USE_CUSTOM_INSTEAD`.
*
* ELSE.
* ASSERT `` = `ERROR_UNKNOW_COMPRESS_MODE`.
* ENDIF.
"(5) write into result "(5) write into result
"todo performance - write directly into result "todo performance - write directly into result
ajson_result->set( iv_path = `/` && lv_path iv_val = ajson ). ajson_result->set( iv_path = `/` && lv_path iv_val = ajson ).
ENDLOOP. ENDLOOP.
* result = ajson_result->stringify( ). result = ajson_result.
result = ajson_result. "->stringify( ).
CATCH cx_root INTO DATA(x). CATCH cx_root INTO DATA(x).
ASSERT x IS NOT BOUND. ASSERT x IS NOT BOUND.
@ -164,7 +132,6 @@ CLASS z2ui5_cl_fw_model_ajson IMPLEMENTATION.
METHOD front_to_back. METHOD front_to_back.
DATA(ajson) = ajson_in->slice( `/EDIT` ). DATA(ajson) = ajson_in->slice( `/EDIT` ).
LOOP AT t_attri REFERENCE INTO DATA(lr_attri) LOOP AT t_attri REFERENCE INTO DATA(lr_attri)
@ -180,27 +147,13 @@ CLASS z2ui5_cl_fw_model_ajson IMPLEMENTATION.
DATA(ajson_val) = ajson->slice( `/` && lr_attri->name_front ). DATA(ajson_val) = ajson->slice( `/` && lr_attri->name_front ).
TRY. IF lr_attri->custom_mapper IS BOUND.
ajson_val = ajson_val->map( lr_attri->custom_mapper ).
ENDIF.
CASE lr_attri->pretty_name. ajson_val->to_abap(
IMPORTING
WHEN z2ui5_if_client=>cs_pretty_mode-none. ev_container = <backend> ).
WHEN z2ui5_if_client=>cs_pretty_mode-camel_case.
ajson_val = ajson_val->map( z2ui5_cl_ajson_mapping=>create_to_snake_case( ) ).
WHEN OTHERS.
ASSERT `` = `ToDo -> UNKNOWN_PRETTY_MODE`.
ENDCASE.
ajson_val->to_abap(
IMPORTING
ev_container = <backend> ).
CATCH cx_root.
ENDTRY.
CATCH cx_root INTO DATA(x). CATCH cx_root INTO DATA(x).
ASSERT x IS BOUND. ASSERT x IS BOUND.

View File

@ -431,8 +431,8 @@ CLASS z2ui5_cl_cc_chartjs DEFINITION
stack_weight TYPE i, stack_weight TYPE i,
stack TYPE string, stack TYPE string,
position TYPE string, position TYPE string,
ticks TYPE ty_ticks, ticks TYPE ty_ticks,
border TYPE ty_border, border TYPE ty_border,
grid TYPE ty_grid, grid TYPE ty_grid,
offset TYPE abap_bool, offset TYPE abap_bool,
axis TYPE string, axis TYPE string,
@ -545,8 +545,8 @@ CLASS z2ui5_cl_cc_chartjs DEFINITION
TYPES: TYPES:
BEGIN OF ty_options, BEGIN OF ty_options,
scales TYPE ty_scales, scales TYPE ty_scales,
responsive TYPE abap_bool, responsive TYPE abap_bool,
plugins TYPE ty_plugins, plugins TYPE ty_plugins,
hover TYPE ty_hover, hover TYPE ty_hover,
interaction TYPE ty_interaction, interaction TYPE ty_interaction,
@ -554,7 +554,7 @@ CLASS z2ui5_cl_cc_chartjs DEFINITION
layout TYPE ty_layout, layout TYPE ty_layout,
elements TYPE ty_elements, elements TYPE ty_elements,
index_axis TYPE string, index_axis TYPE string,
events TYPE string_table, events TYPE string_table,
END OF ty_options . END OF ty_options .
"ChartJS Configuration "ChartJS Configuration
@ -617,9 +617,14 @@ CLASS z2ui5_cl_cc_chartjs IMPLEMENTATION.
rv_keep = abap_true. rv_keep = abap_true.
CASE iv_visit. CASE iv_visit.
WHEN z2ui5_if_ajson_filter=>visit_type-open.
IF is_node-children = 0.
rv_keep = abap_false.
ENDIF.
WHEN z2ui5_if_ajson_filter=>visit_type-value. WHEN z2ui5_if_ajson_filter=>visit_type-value.
CASE is_node-type. CASE is_node-type.
@ -628,7 +633,7 @@ CLASS z2ui5_cl_cc_chartjs IMPLEMENTATION.
rv_keep = abap_false. rv_keep = abap_false.
ENDIF. ENDIF.
WHEN z2ui5_if_ajson_types=>node_type-number. WHEN z2ui5_if_ajson_types=>node_type-number.
IF is_node-value = `0`. IF is_node-value = `0` or is_node-value = `0.00`.
rv_keep = abap_false. rv_keep = abap_false.
ENDIF. ENDIF.
WHEN z2ui5_if_ajson_types=>node_type-string. WHEN z2ui5_if_ajson_types=>node_type-string.

View File

@ -7,7 +7,6 @@ CLASS z2ui5_cl_fw_http_handler DEFINITION
CLASS-METHODS http_post CLASS-METHODS http_post
IMPORTING IMPORTING
body TYPE string body TYPE string
check_old_json TYPE abap_bool DEFAULT abap_false
RETURNING RETURNING
VALUE(result) TYPE string. VALUE(result) TYPE string.
@ -45,8 +44,6 @@ CLASS z2ui5_cl_fw_http_handler IMPLEMENTATION.
METHOD http_post. METHOD http_post.
z2ui5_cl_fw_controller=>cv_check_ajson = xsdbool( check_old_json = abap_false ).
result = z2ui5_cl_fw_controller=>main( body ). result = z2ui5_cl_fw_controller=>main( body ).
ENDMETHOD. ENDMETHOD.

View File

@ -27,23 +27,6 @@ INTERFACE z2ui5_if_client
nested2 TYPE string VALUE `NEST2`, nested2 TYPE string VALUE `NEST2`,
END OF cs_view. END OF cs_view.
CONSTANTS:
BEGIN OF cs_pretty_mode,
none TYPE char1 VALUE ``,
low_case TYPE char1 VALUE `L`,
camel_case TYPE char1 VALUE `X`,
extended TYPE char1 VALUE `Y`,
user TYPE char1 VALUE `U`,
user_low_case TYPE char1 VALUE `C`,
END OF cs_pretty_mode .
CONSTANTS:
BEGIN OF cs_compress_mode,
standard TYPE string VALUE `STANDARD`,
full TYPE string VALUE `FULL`,
none TYPE string VALUE `NONE`,
END OF cs_compress_mode.
TYPES: TYPES:
BEGIN OF ty_s_name_value, BEGIN OF ty_s_name_value,
n TYPE string, n TYPE string,
@ -179,11 +162,8 @@ INTERFACE z2ui5_if_client
IMPORTING IMPORTING
val TYPE data val TYPE data
path TYPE abap_bool DEFAULT abap_false path TYPE abap_bool DEFAULT abap_false
pretty_mode TYPE clike DEFAULT cs_pretty_mode-none custom_mapper TYPE REF TO z2ui5_if_ajson_mapping OPTIONAL
compress_mode TYPE clike DEFAULT cs_compress_mode-standard custom_filter TYPE REF TO z2ui5_if_ajson_filter OPTIONAL
* compress_custom TYPE clike OPTIONAL
custom_mapper TYPE REF TO z2ui5_if_ajson_mapping optional
custom_filter TYPE REF TO z2ui5_if_ajson_filter optional
tab TYPE STANDARD TABLE OPTIONAL tab TYPE STANDARD TABLE OPTIONAL
tab_index TYPE i OPTIONAL tab_index TYPE i OPTIONAL
struc TYPE data OPTIONAL struc TYPE data OPTIONAL
@ -195,11 +175,8 @@ INTERFACE z2ui5_if_client
val TYPE data val TYPE data
path TYPE abap_bool DEFAULT abap_false path TYPE abap_bool DEFAULT abap_false
view TYPE string DEFAULT cs_view-main view TYPE string DEFAULT cs_view-main
pretty_mode TYPE clike DEFAULT cs_pretty_mode-none custom_mapper TYPE REF TO z2ui5_if_ajson_mapping OPTIONAL
compress_mode TYPE clike DEFAULT cs_compress_mode-standard custom_filter TYPE REF TO z2ui5_if_ajson_filter OPTIONAL
* compress_custom TYPE clike OPTIONAL
custom_mapper TYPE REF TO z2ui5_if_ajson_mapping optional
custom_filter TYPE REF TO z2ui5_if_ajson_filter optional
tab TYPE STANDARD TABLE OPTIONAL tab TYPE STANDARD TABLE OPTIONAL
tab_index TYPE i OPTIONAL tab_index TYPE i OPTIONAL
struc TYPE data OPTIONAL struc TYPE data OPTIONAL
@ -210,11 +187,8 @@ INTERFACE z2ui5_if_client
IMPORTING IMPORTING
val TYPE data val TYPE data
path TYPE abap_bool DEFAULT abap_false path TYPE abap_bool DEFAULT abap_false
pretty_mode TYPE clike DEFAULT cs_pretty_mode-none custom_mapper TYPE REF TO z2ui5_if_ajson_mapping OPTIONAL
* compress_custom TYPE clike OPTIONAL custom_filter TYPE REF TO z2ui5_if_ajson_filter OPTIONAL
compress_mode TYPE clike DEFAULT cs_compress_mode-standard
custom_mapper TYPE REF TO z2ui5_if_ajson_mapping optional
custom_filter TYPE REF TO z2ui5_if_ajson_filter optional
RETURNING RETURNING
VALUE(result) TYPE string. VALUE(result) TYPE string.