From 976658b611bb277cf127012eff0866001c442e11 Mon Sep 17 00:00:00 2001 From: oblomov <102328295+oblomov-dev@users.noreply.github.com> Date: Fri, 12 May 2023 10:53:36 +0200 Subject: [PATCH] demos (#222) * demos * demos --- src/00/z2ui5_cl_app_demo_27.clas.abap | 2 +- src/00/z2ui5_cl_app_demo_49.clas.abap | 242 ++++++---- .../z2ui5_cl_app_demo_49.clas.locals_imp.abap | 435 ++++++++++++++++++ ...z2ui5_cl_http_handler.clas.locals_imp.abap | 1 + 4 files changed, 591 insertions(+), 89 deletions(-) diff --git a/src/00/z2ui5_cl_app_demo_27.clas.abap b/src/00/z2ui5_cl_app_demo_27.clas.abap index aa43b880..382fdbf8 100644 --- a/src/00/z2ui5_cl_app_demo_27.clas.abap +++ b/src/00/z2ui5_cl_app_demo_27.clas.abap @@ -91,7 +91,7 @@ CLASS Z2UI5_CL_APP_DEMO_27 IMPLEMENTATION. navbuttonpress = client->_event( 'BACK' ) shownavbutton = abap_true )->header_content( - )->link( text = `Demo` href = `https://twitter.com/OblomovDev/status/1647889242545111043` + )->link( text = `Demo` target = `_blank` href = `https://twitter.com/OblomovDev/status/1647889242545111043` )->link( text = 'Source_Code' target = '_blank' href = Z2UI5_CL_XML_VIEW=>hlp_get_source_code_url( app = me get = client->get( ) ) diff --git a/src/00/z2ui5_cl_app_demo_49.clas.abap b/src/00/z2ui5_cl_app_demo_49.clas.abap index e4370b16..9fb3e077 100644 --- a/src/00/z2ui5_cl_app_demo_49.clas.abap +++ b/src/00/z2ui5_cl_app_demo_49.clas.abap @@ -24,7 +24,6 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC. uuid_prev_app_stack TYPE string, timestampl TYPE string, uname TYPE string, - data TYPE string, END OF ty_s_out. DATA: @@ -32,8 +31,10 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC. headerpinned TYPE abap_bool, headerexpanded TYPE abap_bool, search_val TYPE string, + title type string, t_tab TYPE STANDARD TABLE OF ty_S_out WITH EMPTY KEY, END OF ms_view. + TYPES: BEGIN OF ty_S_cols, visible TYPE abap_bool, @@ -43,8 +44,6 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC. editable TYPE abap_bool, END OF ty_S_cols. - DATA mt_cols TYPE STANDARD TABLE OF ty_S_cols. - TYPES: BEGIN OF ty_S_filter, selkz TYPE abap_bool, @@ -52,17 +51,6 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC. value TYPE string, END OF ty_S_filter. -* DATA mt_filter TYPE STANDARD TABLE OF ty_S_filter. - - -* DATA: -* BEGIN OF ms_table, -* check_zebra TYPE abap_bool, -* title TYPE string, -* sticky_header TYPE string, -* selmode TYPE string, -* END OF ms_table. - TYPES: BEGIN OF ty_S_sort, " selkz TYPE abap_bool, @@ -72,17 +60,15 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC. " check_descending TYPE string, END OF ty_S_sort. - DATA mt_sort TYPE STANDARD TABLE OF ty_S_sort. - DATA: BEGIN OF ms_layout, - BEGIN OF s_table, - check_zebra TYPE abap_bool, - title TYPE string, - sticky_header TYPE string, - selmode TYPE string, - END OF s_table, - t_filter TYPE STANDARD TABLE OF ty_S_filter, + check_zebra TYPE abap_bool, + title TYPE string, + sticky_header TYPE string, + selmode TYPE string, + t_filter TYPE STANDARD TABLE OF ty_S_filter, + t_cols TYPE STANDARD TABLE OF ty_S_cols, + t_sort TYPE STANDARD TABLE OF ty_S_sort, END OF ms_layout. TYPES: @@ -99,6 +85,18 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC. RETURNING VALUE(result) TYPE string. + TYPES: + BEGIN OF ty_S_db_layout, + SELKZ TYPE ABap_bool, + name TYPE string, + user TYPE string, + default TYPE abap_bool, + data TYPE string, + END OF ty_S_db_layout. + DATA mt_db_layout TYPE STANDARD TABLE OF ty_S_db_layout. + + DATA mv_layout_name TYPE string. + PROTECTED SECTION. DATA client TYPE REF TO z2ui5_if_client. @@ -120,9 +118,12 @@ CLASS z2ui5_cl_app_demo_49 DEFINITION PUBLIC. METHODS z2ui5_on_render_detail. METHODS z2ui5_on_render_pop_setup. METHODS z2ui5_on_render_pop_filter. - METHODS z2ui5_download_csv + METHODS z2ui5_on_render_pop_layout. + METHODS z2ui5_set_download_csv IMPORTING i_view TYPE REF TO z2ui5_cl_xml_view. + METHODS z2ui5_set_search. + METHODS z2ui5_set_detail. ENDCLASS. @@ -157,7 +158,6 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. METHOD z2ui5_on_event. - CASE app-get-event. WHEN 'BUTTON_DELETE'. @@ -177,53 +177,39 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. WHEN 'BUTTON_DOWNLOAD'. mv_check_download_csv = abap_true. + WHEN `POPUP_LAYOUT_LOAD`. + data(ls_layout2) = mt_db_layout[ selkz = abap_true ]. + z2ui5_lcl_utility=>trans_xml_2_object( + EXPORTING + xml = ls_layout2-data + IMPORTING + data = ms_layout + ). + ms_view-title = ls_layout2-name. + + WHEN `BUTTON_SAVE_LAYOUT`. + DATA(ls_layout) = VALUE ty_s_db_layout( + data = z2ui5_lcl_utility=>trans_data_2_xml( ms_layout ) + name = mv_layout_name + ). + INSERT ls_layout INTO TABLE mt_db_layout. + WHEN 'BUTTON_SEARCH'. app-next-s_cursor_pos-id = 'SEARCH'. app-next-s_cursor_pos-cursorpos = '99'. app-next-s_cursor_pos-selectionend = '99'. app-next-s_cursor_pos-selectionstart = '99'. - ms_view-t_tab = CORRESPONDING #( mt_table ). - IF ms_view-search_val IS NOT INITIAL. - LOOP AT ms_view-t_tab REFERENCE INTO DATA(lr_row). - DATA(lv_row) = ``. - DATA(lv_index) = 1. - DO. - ASSIGN COMPONENT lv_index OF STRUCTURE lr_row->* TO FIELD-SYMBOL(). - IF sy-subrc <> 0. - EXIT. - ENDIF. - lv_row = lv_row && . - lv_index = lv_index + 1. - ENDDO. - - IF lv_row NS ms_view-search_val. - DELETE ms_view-t_tab. - ENDIF. - ENDLOOP. - ENDIF. + z2ui5_set_search( ). WHEN 'MAIN'. app-view_main = 'MAIN'. WHEN 'DETAIL'. - - ms_detail = mt_table[ uuid = client->get( )-event_data ]. - - SELECT SINGLE FROM z2ui5_t_draft - FIELDS * - WHERE uuid = @ms_detail-uuid - INTO CORRESPONDING FIELDS OF @ms_detail - . - + z2ui5_set_detail( ). app-view_main = 'DETAIL'. - WHEN 'BUTTON_POST'. - - SELECT FROM z2ui5_t_draft - FIELDS * - INTO CORRESPONDING FIELDS OF TABLE @mt_table - UP TO 100 ROWS. - + WHEN 'POPUP_LAYOUT'. + app-view_popup = 'POPUP_LAYOUT'. WHEN 'POPUP_FILTER'. app-view_popup = 'POPUP_FILTER'. @@ -246,6 +232,7 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. ENDCASE. + ENDMETHOD. @@ -254,11 +241,14 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. app-view_main = 'MAIN'. init_table_output( ). - ms_layout-s_table-selmode = 'MultiSelect'. - ms_layout-s_table-check_zebra = abap_true. + ms_view-title = `Standart`. + ms_layout-selmode = 'MultiSelect'. + ms_layout-check_zebra = abap_true. ms_view-t_tab = CORRESPONDING #( mt_table ). - ms_layout-s_table-sticky_header = `HeaderToolbar,InfoToolbar,ColumnHeaders`. - ms_layout-s_table-title = `Drafts`. + ms_layout-sticky_header = `HeaderToolbar,InfoToolbar,ColumnHeaders`. + ms_layout-title = `Drafts`. + + app-next-t_scroll_pos = VALUE #( ( name = `page_main` ) ). ENDMETHOD. @@ -270,6 +260,8 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. z2ui5_on_render_pop_filter( ). WHEN `POPUP_SETUP`. z2ui5_on_render_pop_setup( ). + WHEN `POPUP_LAYOUT`. + z2ui5_on_render_pop_layout( ). ENDCASE. CASE app-view_main. @@ -284,8 +276,8 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. METHOD init_table_output. " CLEAR ms_layout-s_table. - CLEAR mt_cols. - CLEAR mt_sort. + " CLEAR mt_cols. + " CLEAR ms_layout-t_cols. ms_view-headerexpanded = abap_true. ms_view-headerpinned = abap_true. @@ -302,13 +294,13 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. name = lr_col->* " length = `10px` title = lr_col->* - ) INTO TABLE mt_cols. + ) INTO TABLE ms_layout-t_cols. INSERT VALUE #( " selkz = abap_true name = lr_col->* " length = `10px` - ) INTO TABLE mt_sort. + ) INTO TABLE ms_layout-t_cols. ENDLOOP. @@ -320,7 +312,7 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. " DATA(view) = z2ui5_cl_xml_view=>factory( )->shell( ). DATA(view) = z2ui5_cl_xml_view=>factory( - )->page( + )->page( id = `page_main` title = 'abap2UI5 - List Report' navbuttonpress = client->_event( 'BACK' ) shownavbutton = abap_true @@ -333,7 +325,7 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. )->get_parent( ). IF mv_check_download_csv = abap_true. - z2ui5_download_csv( view ). + z2ui5_set_download_csv( view ). ENDIF. DATA(page) = view->dynamic_page( @@ -343,7 +335,7 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. DATA(header_title) = page->title( ns = 'f' )->get( )->dynamic_page_title( ). - header_title->heading( ns = 'f' )->title( 'Standart' ). + header_title->heading( ns = 'f' )->title( ms_view-title ). header_title->expanded_content( 'f' )->label( text = 'Drafts of abap2UI5' ). @@ -352,7 +344,7 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. )->label( text = 'Drafts of abap2UI5' ). header_title->actions( ns = 'f' )->overflow_toolbar( - )->button( text = `Layout` type = `Emphasized` + )->button( text = `Layout` type = `Emphasized` press = client->_event( `POPUP_LAYOUT` ) )->button( text = `Start` press = client->_event( `BUTTON_START` ) type = `Emphasized` ). @@ -377,13 +369,13 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. DATA(tab) = cont->table( items = client->_bind( val = ms_view-t_tab ) - alternaterowcolors = ms_layout-s_table-check_zebra - sticky = ms_layout-s_table-sticky_header - mode = ms_layout-s_table-selmode ). + alternaterowcolors = ms_layout-check_zebra + sticky = ms_layout-sticky_header + mode = ms_layout-selmode ). tab->header_toolbar( )->toolbar( - )->title( text = ms_layout-s_table-title && ` (` && shift_right( CONV string( lines( ms_view-t_tab ) ) ) && `)` level = `H2` + )->title( text = ms_layout-title && ` (` && shift_right( CONV string( lines( ms_view-t_tab ) ) ) && `)` level = `H2` )->toolbar_spacer( )->button( icon = 'sap-icon://refresh' @@ -392,10 +384,8 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. value = client->_bind( ms_view-search_val ) search = client->_event( 'BUTTON_SEARCH' ) change = client->_event( 'BUTTON_SEARCH' ) -* liveChange = client->_event( 'BUTTON_SEARCH' ) width = `17.5rem` id = `SEARCH` - )->toolbar_spacer( )->button( text = `Custom Action` @@ -418,7 +408,7 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. DATA(lo_columns) = tab->columns( ). - LOOP AT mt_cols REFERENCE INTO DATA(lr_field) + LOOP AT ms_layout-t_cols REFERENCE INTO DATA(lr_field) WHERE visible = abap_true. lo_columns->column( width = lr_field->length )->text( text = CONV char10( lr_field->title ) )->footer( @@ -429,7 +419,7 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. press = client->_event( val = 'DETAIL' data = `${UUID}` ) selected = `{SELKZ}` type = `Navigation` )->cells( ). - LOOP AT mt_cols REFERENCE INTO lr_field + LOOP AT ms_layout-t_cols REFERENCE INTO lr_field WHERE visible = abap_true. IF lr_field->editable = abap_true. lo_cells->input( `{` && lr_field->name && `}` ). @@ -543,14 +533,14 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. )->simple_form( editable = abap_true )->content( 'form' )->label( 'zebra mode' - )->checkbox( client->_bind( ms_layout-s_table-check_zebra ) + )->checkbox( client->_bind( ms_layout-check_zebra ) )->label( 'sticky header' - )->input( client->_bind( ms_layout-s_table-sticky_header ) + )->input( client->_bind( ms_layout-sticky_header ) )->label( text = `Title` - )->Input( value = client->_bind( ms_layout-s_table-title ) + )->Input( value = client->_bind( ms_layout-title ) )->label( 'sel mode' )->combobox( - selectedkey = client->_bind( ms_layout-s_table-selmode ) + selectedkey = client->_bind( ms_layout-selmode ) items = client->_bind_one( VALUE ty_t_combo( ( key = 'None' text = 'None' ) ( key = 'SingleSelect' text = 'SingleSelect' ) @@ -567,7 +557,7 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. selected = client->_bind( mv_check_columns ) )->table( " mode = 'MultiSelect' - items = client->_bind( mt_cols ) + items = client->_bind( ms_layout-t_cols ) )->columns( )->column( )->text( 'Visible' )->get_parent( )->column( )->text( 'Name' )->get_parent( @@ -590,14 +580,14 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. selected = client->_bind( mv_check_sort ) )->list( - items = client->_bind( mt_sort ) + items = client->_bind( ms_layout-t_cols ) selectionchange = client->_event( 'SELCHANGE' ) )->custom_list_item( )->hbox( ). lo_hbox->combobox( selectedkey = `{NAME}` - items = client->_bind( mt_cols ) + items = client->_bind( ms_layout-t_cols ) * ( key = 'BLUE' text = 'green' ) * ( key = 'GREEN' text = 'blue' ) * ( key = 'BLACK' text = 'red' ) @@ -679,8 +669,46 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. ENDMETHOD. + METHOD z2ui5_on_render_pop_layout. - METHOD z2ui5_download_csv. + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup->dialog( title = 'abap2UI5 - Layout' contentwidth = `50%` + )->input( description = `Name` value = client->_bind( mv_layout_name ) + )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) + )->table( + mode = 'SingleSelectLeft' + items = client->_bind( mt_db_layout ) + )->columns( + )->column( )->text( 'Name' )->get_parent( + )->column( )->text( 'User' )->get_parent( + )->column( )->text( 'Default' )->get_parent( + " )->column( )->text( 'Description' )->get_parent( + )->get_parent( + )->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + " )->checkbox( '{SELKZ}' + )->text( '{NAME}' + )->text( '{USER}' + )->text( '{DEFAULT}' + " )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'load' + press = client->_event( 'POPUP_LAYOUT_LOAD' ) + type = 'Emphasized' + )->button( + text = 'close' + press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) + type = 'Emphasized' ). + + app-next-xml_popup = lo_popup->get_root( )->xml_get( ). + + ENDMETHOD. + + METHOD z2ui5_set_download_csv. DATA(lo_struc) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_data( ms_view-t_tab[ 1 ] ) ). DATA(lt_components) = lo_struc->get_components( ). @@ -741,4 +769,42 @@ CLASS z2ui5_cl_app_demo_49 IMPLEMENTATION. ENDMETHOD. + + METHOD z2ui5_set_search. + + ms_view-t_tab = CORRESPONDING #( mt_table ). + IF ms_view-search_val IS NOT INITIAL. + LOOP AT ms_view-t_tab REFERENCE INTO DATA(lr_row). + DATA(lv_row) = ``. + DATA(lv_index) = 1. + DO. + ASSIGN COMPONENT lv_index OF STRUCTURE lr_row->* TO FIELD-SYMBOL(). + IF sy-subrc <> 0. + EXIT. + ENDIF. + lv_row = lv_row && . + lv_index = lv_index + 1. + ENDDO. + + IF lv_row NS ms_view-search_val. + DELETE ms_view-t_tab. + ENDIF. + ENDLOOP. + ENDIF. + + ENDMETHOD. + + + METHOD z2ui5_set_detail. + + ms_detail = mt_table[ uuid = client->get( )-event_data ]. + + SELECT SINGLE FROM z2ui5_t_draft + FIELDS * + WHERE uuid = @ms_detail-uuid + INTO CORRESPONDING FIELDS OF @ms_detail + . + + ENDMETHOD. + ENDCLASS. diff --git a/src/00/z2ui5_cl_app_demo_49.clas.locals_imp.abap b/src/00/z2ui5_cl_app_demo_49.clas.locals_imp.abap index a4b0e6d8..d38f1b36 100644 --- a/src/00/z2ui5_cl_app_demo_49.clas.locals_imp.abap +++ b/src/00/z2ui5_cl_app_demo_49.clas.locals_imp.abap @@ -310,3 +310,438 @@ CLASS lcl_db IMPLEMENTATION. ENDMETHOD. ENDCLASS. + +CLASS z2ui5_lcl_utility DEFINITION INHERITING FROM cx_no_check. + + PUBLIC SECTION. + + TYPES: + BEGIN OF ty_attri, + name TYPE string, + type_kind TYPE string, + type TYPE string, + bind_type TYPE string, + data_stringify TYPE string, + gen_type_kind TYPE string, + gen_type TYPE string, + gen_kind TYPE string, + END OF ty_attri. + TYPES ty_T_attri TYPE STANDARD TABLE OF ty_attri WITH EMPTY KEY. + + DATA: + BEGIN OF ms_error, + x_root TYPE REF TO cx_root, + uuid TYPE string, + s_msg TYPE LINE OF bapirettab, + END OF ms_error. + + METHODS constructor + IMPORTING + val TYPE any OPTIONAL + previous TYPE REF TO cx_root OPTIONAL + PREFERRED PARAMETER val. + + METHODS get_text REDEFINITION. + + CLASS-METHODS raise + IMPORTING + v TYPE clike DEFAULT `CX_SY_SUBRC` + when TYPE abap_bool DEFAULT abap_true + PREFERRED PARAMETER v. + + CLASS-METHODS get_header_val + IMPORTING + v TYPE clike + RETURNING + VALUE(result) TYPE z2ui5_if_client=>ty_s_name_value-value. + + CLASS-METHODS get_param_val + IMPORTING + v TYPE clike + RETURNING + VALUE(result) TYPE z2ui5_if_client=>ty_s_name_value-value. + + CLASS-METHODS get_uuid + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS get_uuid_session + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS get_user_tech + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS get_timestampl + RETURNING + VALUE(result) TYPE timestampl. + + CLASS-METHODS trans_any_2_json + IMPORTING + any TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS trans_xml_2_object + IMPORTING + xml TYPE clike + EXPORTING + data TYPE data. + + CLASS-METHODS get_t_attri_by_ref + IMPORTING + io_app TYPE REF TO object + RETURNING + VALUE(result) TYPE ty_t_attri ##NEEDED. + + CLASS-METHODS trans_data_2_xml + IMPORTING + data TYPE data + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS get_abap_2_json + IMPORTING + val TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS check_is_boolean + IMPORTING + val TYPE any + RETURNING + VALUE(result) TYPE abap_bool. + + CLASS-METHODS get_json_boolean + IMPORTING + val TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS trans_ref_tab_2_tab + IMPORTING + ir_tab_from TYPE REF TO data + EXPORTING + t_result TYPE STANDARD TABLE. + + CLASS-METHODS get_trim_upper + IMPORTING + val TYPE any + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + + CLASS-DATA mv_counter TYPE i. + + CLASS-METHODS _get_t_attri + IMPORTING + io_app TYPE REF TO object + iv_attri TYPE csequence + RETURNING + VALUE(result) TYPE abap_attrdescr_tab. + + PRIVATE SECTION. + +ENDCLASS. + + +CLASS z2ui5_lcl_utility IMPLEMENTATION. + + METHOD get_trim_upper. + result = CONV #( val ). + result = to_upper( shift_left( shift_right( result ) ) ). + ENDMETHOD. + + + METHOD constructor. + + super->constructor( previous = previous ). + CLEAR textid. + + TRY. + ms_error-x_root ?= val. + CATCH cx_root ##CATCH_ALL. + ms_error-s_msg-message = val. + ENDTRY. + + TRY. + ms_error-uuid = get_uuid( ). + CATCH cx_root ##CATCH_ALL. + ENDTRY. + ENDMETHOD. + + + METHOD get_abap_2_json. + + IF check_is_boolean( val ). + result = COND #( WHEN val = abap_true THEN `true` ELSE `false` ). + ELSE. + result = |"{ escape( val = val format = cl_abap_format=>e_json_string ) }"|. + ENDIF. + + ENDMETHOD. + + + METHOD check_is_boolean. + + TRY. + DATA(lo_ele) = CAST cl_abap_elemdescr( cl_abap_elemdescr=>describe_by_data( val ) ). + CASE lo_ele->get_relative_name( ). + WHEN `ABAP_BOOL` OR `ABAP_BOOLEAN` OR `XSDBOOLEAN`. + result = abap_true. + ENDCASE. + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD get_json_boolean. + + IF check_is_boolean( val ). + result = COND #( WHEN val = abap_true THEN `true` ELSE `false` ). + ELSE. + result = val. + ENDIF. + + ENDMETHOD. + + + METHOD get_timestampl. + + GET TIME STAMP FIELD result. + + ENDMETHOD. + + + METHOD get_user_tech. + + result = sy-uname. + + ENDMETHOD. + + + METHOD get_uuid. + TRY. + + DATA uuid TYPE c LENGTH 32. + + TRY. + CALL METHOD (`CL_SYSTEM_UUID`)=>if_system_uuid_static~create_uuid_c32 + RECEIVING + uuid = uuid. + + CATCH cx_sy_dyn_call_illegal_class. + + DATA(lv_fm) = `GUID_CREATE`. + CALL FUNCTION lv_fm + IMPORTING + ev_guid_32 = uuid. + + ENDTRY. + + result = uuid. + + CATCH cx_root. + ASSERT 1 = 0. + ENDTRY. + ENDMETHOD. + + + METHOD get_uuid_session. + + mv_counter = mv_counter + 1. + result = get_trim_upper( mv_counter ). + + ENDMETHOD. + + + METHOD get_header_val. + + result = z2ui5_cl_http_handler=>client-t_header[ name = v ]-value. + + ENDMETHOD. + + + METHOD get_param_val. + + DATA(lt_param) = VALUE z2ui5_if_client=>ty_t_name_value( LET tab = z2ui5_cl_http_handler=>client-t_param IN FOR row IN tab + ( name = to_upper( row-name ) value = to_upper( row-value ) ) ). + TRY. + result = lt_param[ name = get_trim_upper( v ) ]-value. + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD get_t_attri_by_ref. + + DATA(lt_attri) = CAST cl_abap_classdescr( cl_abap_objectdescr=>describe_by_object_ref( io_app ) )->attributes. + + DELETE lt_attri WHERE visibility <> cl_abap_classdescr=>public. + + LOOP AT lt_attri INTO DATA(ls_attri) + WHERE type_kind = cl_abap_classdescr=>typekind_struct2 + OR type_kind = cl_abap_classdescr=>typekind_struct1. + + DELETE lt_attri INDEX sy-tabix. + + INSERT LINES OF _get_t_attri( + io_app = io_app + iv_attri = ls_attri-name ) INTO TABLE lt_attri. + + ENDLOOP. + + LOOP AT lt_attri INTO ls_attri. + + DATA(ls_attri2) = VALUE ty_attri( ). + ls_attri2 = CORRESPONDING #( ls_attri ). + + FIELD-SYMBOLS TYPE any. + UNASSIGN . + DATA(lv_assign) = `IO_APP->` && ls_attri-name. + ASSIGN (lv_assign) TO . + DATA(lo_descr) = cl_abap_datadescr=>describe_by_data( ). + CASE lo_descr->kind. + WHEN lo_descr->kind_elem. + ls_attri2-type = CAST cl_abap_elemdescr( lo_descr )->get_relative_name( ). + ENDCASE. + + APPEND ls_attri2 TO result. + ENDLOOP. + + ENDMETHOD. + + METHOD _get_t_attri. + + CONSTANTS c_prefix TYPE string VALUE `IO_APP->`. + FIELD-SYMBOLS TYPE any. + + DATA(lv_name) = c_prefix && to_upper( iv_attri ). + ASSIGN (lv_name) TO . + raise( when = xsdbool( sy-subrc <> 0 ) ). + + DATA(lo_type) = cl_abap_structdescr=>describe_by_data( ). + DATA(lo_struct) = CAST cl_abap_structdescr( lo_type ). + + LOOP AT lo_struct->get_components( ) REFERENCE INTO DATA(lr_comp). + + DATA(lv_element) = iv_attri && `-` && lr_comp->name. + + IF lr_comp->as_include = abap_true. + INSERT LINES OF _get_t_attri( io_app = io_app + iv_attri = lv_element ) INTO TABLE result. + + ELSE. + INSERT VALUE #( name = lv_element + type_kind = lr_comp->type->type_kind ) INTO TABLE result. + ENDIF. + + ENDLOOP. + ENDMETHOD. + + METHOD trans_any_2_json. + + result = /ui2/cl_json=>serialize( any ). + + ENDMETHOD. + + + METHOD trans_data_2_xml. + + " FIELD-SYMBOLS TYPE any. + " ASSIGN object->* TO . + " raise( when = xsdbool( sy-subrc <> 0 ) ). + + CALL TRANSFORMATION id + SOURCE data = data + RESULT XML result + OPTIONS data_refs = `heap-or-create`. + + ENDMETHOD. + + + METHOD trans_ref_tab_2_tab. + + TYPES ty_t_ref TYPE STANDARD TABLE OF REF TO data. + + FIELD-SYMBOLS TYPE ty_t_ref. + ASSIGN ir_tab_from->* TO . + raise( when = xsdbool( sy-subrc <> 0 ) ). + + CLEAR t_result. + + DATA(lo_tab) = CAST cl_abap_tabledescr( cl_abap_datadescr=>describe_by_data( t_result ) ). + DATA(lo_struc) = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ). + DATA(lt_components) = lo_struc->get_components( ). + + LOOP AT INTO DATA(lr_from). + + DATA lr_row TYPE REF TO data. + CREATE DATA lr_row LIKE LINE OF t_result. + ASSIGN lr_row->* TO FIELD-SYMBOL(). + + ASSIGN lr_from->* TO FIELD-SYMBOL(). + raise( when = xsdbool( sy-subrc <> 0 ) ). + + LOOP AT lt_components INTO DATA(ls_comp). + + FIELD-SYMBOLS TYPE data. + ASSIGN COMPONENT ls_comp-name OF STRUCTURE TO . + IF sy-subrc <> 0. + EXIT. + ENDIF. + + FIELD-SYMBOLS TYPE data. + ASSIGN COMPONENT ls_comp-name OF STRUCTURE TO . + IF sy-subrc <> 0. + EXIT. + ENDIF. + + ASSIGN ->* TO FIELD-SYMBOL(). + IF sy-subrc = 0. + = . + ENDIF. + ENDLOOP. + + INSERT INTO TABLE t_result. + ENDLOOP. + + ENDMETHOD. + + METHOD trans_xml_2_object. + + CALL TRANSFORMATION id + SOURCE XML xml + RESULT data = data. + + ENDMETHOD. + + METHOD get_text. + + IF ms_error-x_root IS NOT INITIAL. + result = ms_error-x_root->get_text( ). + DATA(error) = abap_true. + ELSEIF ms_error-s_msg-message IS NOT INITIAL. + result = ms_error-s_msg-message. + error = abap_true. + ENDIF. + + IF error = abap_true AND result IS INITIAL. + result = `unknown error`. + ENDIF. + + ENDMETHOD. + + METHOD raise. + + IF when = abap_false. + RETURN. + ENDIF. + RAISE EXCEPTION TYPE z2ui5_lcl_utility EXPORTING val = v. + + ENDMETHOD. +ENDCLASS. diff --git a/src/z2ui5_cl_http_handler.clas.locals_imp.abap b/src/z2ui5_cl_http_handler.clas.locals_imp.abap index c2a94152..7e184034 100644 --- a/src/z2ui5_cl_http_handler.clas.locals_imp.abap +++ b/src/z2ui5_cl_http_handler.clas.locals_imp.abap @@ -678,6 +678,7 @@ CLASS z2ui5_lcl_utility_tree_json IMPLEMENTATION. FIELD-SYMBOLS TYPE any. DATA(lv_name) = c_prefix && replace( val = name sub = `-` with = `_` occ = 0 ). + " DATA(lv_name) = c_prefix && replace( val = name sub = `-` with = `_` occ = 0 ). ASSIGN (lv_name) TO . z2ui5_lcl_utility=>raise( when = xsdbool( sy-subrc <> 0 ) ).