From a6be1a95d275e9eaf2102e9fdb13e2dd5f20bffa Mon Sep 17 00:00:00 2001 From: oblomov <102328295+oblomov-dev@users.noreply.github.com> Date: Wed, 24 Jan 2024 16:57:38 +0100 Subject: [PATCH] Popups draft handling utility (#802) * lint check * lint check * Update abaplint.jsonc * Update abaplint.jsonc * Update abaplint.jsonc * Update abaplint.jsonc * popups - draft handling - utility * lint fix * downport test * update * fix popup select * utility extensions * lint fix test * update lint * update * update * update * update * update * Delete src/03/01/z2ui5_cl_popup_to_select.clas.abap * Delete src/03/01/z2ui5_cl_popup_to_select.clas.xml * added class again * popups * popup get range multi + clear function * fix date in table * fix popup model update * update * update * popups * Update abaplint.jsonc * update lint fixes * extended error message by serialization error * update downport fix * update --- abaplint.jsonc | 2 +- src/00/z2ui5_cl_util_func.clas.abap | 354 +++++++++++++++++- src/01/01/z2ui5_cl_fw_client.clas.abap | 34 +- src/01/01/z2ui5_cl_fw_controller.clas.abap | 10 +- src/01/01/z2ui5_cl_fw_db.clas.abap | 23 +- src/01/01/z2ui5_cl_fw_http_handler.clas.abap | 4 +- src/01/01/z2ui5_if_client.intf.abap | 17 +- src/01/02/z2ui5_cl_fw_app_startup.clas.abap | 55 ++- src/03/01/z2ui5_cl_popup_error.clas.abap | 13 +- .../01/z2ui5_cl_popup_file_upload.clas.abap | 38 +- src/03/01/z2ui5_cl_popup_get_range.clas.abap | 35 +- .../z2ui5_cl_popup_get_range_multi.clas.abap | 149 ++++++++ .../z2ui5_cl_popup_get_range_multi.clas.xml | 16 + .../01/z2ui5_cl_popup_input_value.clas.abap | 4 +- src/03/01/z2ui5_cl_popup_layout.clas.abap | 158 ++++++++ src/03/01/z2ui5_cl_popup_layout.clas.xml | 16 + src/03/01/z2ui5_cl_popup_pdf.clas.abap | 4 +- src/03/01/z2ui5_cl_popup_table.clas.abap | 151 ++++++++ src/03/01/z2ui5_cl_popup_table.clas.xml | 16 + src/03/01/z2ui5_cl_popup_textedit.clas.abap | 6 +- src/03/01/z2ui5_cl_popup_to_confirm.clas.abap | 1 + src/03/01/z2ui5_cl_popup_to_select.clas.abap | 46 ++- src/10/01/z2ui5_cl_xml_view.clas.abap | 2 + src/z2ui5_if_app.intf.abap | 3 +- 24 files changed, 1041 insertions(+), 116 deletions(-) create mode 100644 src/03/01/z2ui5_cl_popup_get_range_multi.clas.abap create mode 100644 src/03/01/z2ui5_cl_popup_get_range_multi.clas.xml create mode 100644 src/03/01/z2ui5_cl_popup_layout.clas.abap create mode 100644 src/03/01/z2ui5_cl_popup_layout.clas.xml create mode 100644 src/03/01/z2ui5_cl_popup_table.clas.abap create mode 100644 src/03/01/z2ui5_cl_popup_table.clas.xml diff --git a/abaplint.jsonc b/abaplint.jsonc index 03eab418..481d4de0 100644 --- a/abaplint.jsonc +++ b/abaplint.jsonc @@ -152,7 +152,7 @@ "msag_consistency": true, "names_no_dash": true, "nesting": { - "depth": 5 + "depth": 7 }, "newline_between_methods": false, "no_aliases": true, diff --git a/src/00/z2ui5_cl_util_func.clas.abap b/src/00/z2ui5_cl_util_func.clas.abap index 78e9cf2f..9d8efb08 100644 --- a/src/00/z2ui5_cl_util_func.clas.abap +++ b/src/00/z2ui5_cl_util_func.clas.abap @@ -17,6 +17,38 @@ CLASS z2ui5_cl_util_func DEFINITION TYPES ty_t_range TYPE RANGE OF string. TYPES ty_s_range TYPE LINE OF ty_t_range. + TYPES: + BEGIN OF ty_s_sql_multi, + name TYPE string, + t_range TYPE ty_t_range, + t_token TYPE ty_t_token, + END OF ty_s_sql_multi. + TYPES ty_t_sql_multi TYPE STANDARD TABLE OF ty_s_sql_multi WITH EMPTY KEY. + + TYPES: + BEGIN OF ty_s_sql_result, + table TYPE string, + END OF ty_s_sql_result. + + CLASS-METHODS get_source_code_method + IMPORTING + iv_classname TYPE clike + iv_methodname TYPE clike + RETURNING + VALUE(result) TYPE string_table. + + CLASS-METHODS get_sql_multi_by_data + IMPORTING + val TYPE data + RETURNING + VALUE(result) TYPE ty_t_sql_multi. + + CLASS-METHODS get_sql_by_string + IMPORTING + val TYPE clike + RETURNING + VALUE(result) TYPE ty_s_sql_result. + CLASS-METHODS js_load_ext_lib RETURNING VALUE(result) TYPE string. @@ -64,7 +96,7 @@ CLASS z2ui5_cl_util_func DEFINITION CLASS-METHODS x_check_raise IMPORTING !v TYPE clike DEFAULT `CX_SY_SUBRC` - !when TYPE abap_bool. + !when TYPE xfeld. CLASS-METHODS x_raise IMPORTING @@ -260,6 +292,48 @@ CLASS z2ui5_cl_util_func DEFINITION CHANGING tab TYPE STANDARD TABLE. + CLASS-METHODS decode_x_base64 + IMPORTING + val TYPE string + RETURNING + VALUE(result) TYPE xstring. + + CLASS-METHODS encode_x_base64 + IMPORTING + val TYPE xstring + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS get_string_by_xstring + IMPORTING + val TYPE xstring + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS get_xstring_by_string + IMPORTING + val TYPE string + RETURNING + VALUE(result) TYPE xstring. + + CLASS-METHODS time_get_time_by_stampl + IMPORTING + val TYPE timestampl + RETURNING + VALUE(result) TYPE t. + + CLASS-METHODS time_get_date_by_stampl + IMPORTING + val TYPE timestampl + RETURNING + VALUE(result) TYPE d. + + CLASS-METHODS copy_ref_data_to_ref_data + IMPORTING + from TYPE REF TO data + RETURNING + VALUE(result) TYPE REF TO data. + PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. @@ -268,6 +342,133 @@ ENDCLASS. CLASS z2ui5_cl_util_func IMPLEMENTATION. + METHOD decode_x_base64. + + TRY. + + CALL METHOD ('CL_WEB_HTTP_UTILITY')=>('DECODE_X_BASE64') + EXPORTING + encoded = val + RECEIVING + decoded = result. + + CATCH cx_sy_dyn_call_illegal_class. + + DATA(classname) = 'CL_HTTP_UTILITY'. + CALL METHOD (classname)=>('DECODE_X_BASE64') + EXPORTING + encoded = val + RECEIVING + decoded = result. + + ENDTRY. + + ENDMETHOD. + + + + METHOD get_xstring_by_string. + + DATA conv TYPE REF TO object. + + TRY. + CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_out + RECEIVING + instance = conv. + + CALL METHOD conv->('IF_ABAP_CONV_OUT~CONVERT') + EXPORTING + source = val + RECEIVING + result = result. + CATCH cx_sy_dyn_call_illegal_class. + + DATA(conv_out_class) = 'CL_ABAP_CONV_OUT_CE'. + CALL METHOD (conv_out_class)=>create + EXPORTING + encoding = 'UTF-8' + RECEIVING + conv = conv. + + CALL METHOD conv->('CONVERT') + EXPORTING + data = val + IMPORTING + buffer = result. + ENDTRY. + + + +* result = cl_abap_conv_codepage=>create_out( )->convert( val ). + + ENDMETHOD. + + METHOD get_string_by_xstring. + + DATA conv TYPE REF TO object. + + TRY. + CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in + RECEIVING + instance = conv. + + CALL METHOD conv->('IF_ABAP_CONV_IN~CONVERT') + EXPORTING + source = val + RECEIVING + result = result. + CATCH cx_sy_dyn_call_illegal_class. + + DATA(conv_in_class) = 'CL_ABAP_CONV_IN_CE'. + CALL METHOD (conv_in_class)=>create + EXPORTING + encoding = 'UTF-8' + RECEIVING + conv = conv. + + CALL METHOD conv->('CONVERT') + EXPORTING + input = val + IMPORTING + data = result. + ENDTRY. + + ENDMETHOD. + + METHOD encode_x_base64. + + TRY. + + CALL METHOD ('CL_WEB_HTTP_UTILITY')=>('ENCODE_X_BASE64') + EXPORTING + unencoded = val + RECEIVING + encoded = result. + + CATCH cx_sy_dyn_call_illegal_class. + + DATA(classname) = 'CL_HTTP_UTILITY'. + CALL METHOD (classname)=>('ENCODE_X_BASE64') + EXPORTING + unencoded = val + RECEIVING + encoded = result. + + ENDTRY. + + ENDMETHOD. + + METHOD get_sql_by_string. + + DATA(lv_sql) = conv string( val ). + REPLACE ALL OCCURRENCES OF ` ` IN lv_sql WITH ``. + lv_sql = to_upper( lv_sql ). + SPLIT lv_sql AT 'SELECTFROM' INTO DATA(lv_dummy) DATA(lv_tab). + SPLIT lv_tab AT `FIELDS` INTO lv_tab lv_dummy. + + result-table = lv_tab. + + ENDMETHOD. METHOD app_get_url. @@ -324,7 +525,8 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION. WHEN 'ABAP_BOOL' OR 'XSDBOOLEAN' OR 'FLAG' -* OR 'XFELD' + OR 'XFLAG' + OR 'XFELD' OR 'ABAP_BOOLEAN' OR 'WDY_BOOLEAN' OR 'OS_BOOLEAN'. @@ -442,6 +644,80 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION. ENDMETHOD. + METHOD get_source_code_method. + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + DATA lt_source TYPE string_table. + + TRY. + DATA lv_class TYPE c LENGTH 30. + DATA lv_method TYPE c LENGTH 61. + lv_class = iv_classname. + lv_method = iv_methodname. + + CALL METHOD ('XCO_CP_ABAP')=>('CLASS') + EXPORTING + iv_name = lv_class + RECEIVING + ro_class = object. + + ASSIGN ('OBJECT->IF_XCO_AO_CLASS~IMPLEMENTATION') TO . + object = . + + CALL METHOD object->('IF_XCO_CLAS_IMPLEMENTATION~METHOD') + EXPORTING + iv_name = lv_method + RECEIVING + ro_method = object. + + CALL METHOD object->('IF_XCO_CLAS_I_METHOD~CONTENT') + RECEIVING + ro_content = object. + + CALL METHOD object->('IF_XCO_CLAS_I_METHOD_CONTENT~GET_SOURCE') + RECEIVING + rt_source = result. + + CATCH cx_sy_dyn_call_error. + + DATA(lv_name) = 'CL_OO_FACTORY'. + CALL METHOD (lv_name)=>('CREATE_INSTANCE') + RECEIVING + result = object. + + CALL METHOD object->('IF_OO_CLIF_SOURCE_FACTORY~CREATE_CLIF_SOURCE') + EXPORTING + clif_name = iv_classname + RECEIVING + result = object. + + CALL METHOD object->('IF_OO_CLIF_SOURCE~GET_SOURCE') + IMPORTING + source = lt_source. + + DATA(lv_check_method) = abap_false. + LOOP AT lt_source INTO DATA(lv_source). + DATA(lv_source_upper) = to_upper( lv_source ). + + IF lv_source_upper CS `ENDMETHOD`. + lv_check_method = abap_false. + ENDIF. + + IF lv_source_upper CS to_upper( |{ iv_methodname }| ). + lv_check_method = abap_true. + CONTINUE. + ENDIF. + + IF lv_check_method = abap_true. + INSERT lv_source INTO TABLE result. + ENDIF. + + ENDLOOP. + + ENDTRY. + + ENDMETHOD. + METHOD get_range_by_token. DATA(lv_length) = strlen( value ) - 1. @@ -696,12 +972,22 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION. METHOD rtti_get_t_comp_by_data. - DATA(lo_type) = cl_abap_structdescr=>describe_by_data( val ). TRY. - DATA(lo_tab) = CAST cl_abap_tabledescr( lo_type ). - DATA(lo_struct) = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ). + DATA(lo_type) = cl_abap_typedescr=>describe_by_data( val ). + DATA(lo_struct) = CAST cl_abap_structdescr( lo_type ). CATCH cx_root. - lo_struct = CAST cl_abap_structdescr( lo_type ). + TRY. + DATA(lo_tab) = CAST cl_abap_tabledescr( lo_type ). + lo_struct = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ). + CATCH cx_root. + TRY. + DATA(lo_ref) = cl_abap_typedescr=>describe_by_data_ref( val ). + lo_struct = CAST cl_abap_structdescr( lo_ref ). + CATCH cx_root. + lo_tab = CAST cl_abap_tabledescr( lo_ref ). + lo_struct = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ). + ENDTRY. + ENDTRY. ENDTRY. result = lo_struct->get_components( ). @@ -726,7 +1012,7 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION. CATCH cx_root. DATA(lv_link) = `https://github.com/sandraros/S-RTTI`. DATA(lv_text) = `

Please install the open-source project S-RTTI by sandraros and try again: (link)

`. + lv_link && `" style="color:blue; font-weight:600;" target="_blank">(link)

`. RAISE EXCEPTION TYPE z2ui5_cx_util_error EXPORTING @@ -966,6 +1252,25 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION. pretty_name = pretty_name IMPORTING r_result = ). + WHEN cl_abap_typedescr=>kind_elem. + CASE ls_comp-type->absolute_name. + WHEN `\TYPE=D`. + DATA match TYPE i. + " support for ISO8601 => https://en.wikipedia.org/wiki/ISO_8601 + REPLACE FIRST OCCURRENCE OF REGEX `^(\d{4})-(\d{2})-(\d{2})` IN WITH `$1$2$3` + REPLACEMENT LENGTH match. "#EC NOTEXT + = . + + WHEN `\TYPE=T`. + + " support for ISO8601 => https://en.wikipedia.org/wiki/ISO_8601 + REPLACE FIRST OCCURRENCE OF REGEX `^(\d{2}):(\d{2}):(\d{2})` IN WITH `$1$2$3` + REPLACEMENT LENGTH match. "#EC NOTEXT + = . + + WHEN OTHERS. + = . + ENDCASE. WHEN OTHERS. = . ENDCASE. @@ -1076,4 +1381,39 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION. RAISE EXCEPTION TYPE z2ui5_cx_util_error EXPORTING val = v. ENDMETHOD. + + METHOD time_get_date_by_stampl. + + CONVERT TIME STAMP val TIME ZONE sy-zonlo INTO DATE result TIME DATA(lv_dummy). + + ENDMETHOD. + + METHOD time_get_time_by_stampl. + + CONVERT TIME STAMP val TIME ZONE sy-zonlo INTO DATE DATA(lv_dummy) TIME result. + + ENDMETHOD. + + + METHOD copy_ref_data_to_ref_data. + + FIELD-SYMBOLS TYPE data. + FIELD-SYMBOLS TYPE data. + + ASSIGN from->* TO . + CREATE DATA result LIKE . + ASSIGN result->* TO . + + = . + + ENDMETHOD. + + METHOD get_sql_multi_by_data. + + LOOP AT rtti_get_t_comp_by_data( val ) REFERENCE INTO DATA(lr_comp). + INSERT VALUE #( name = lr_comp->name ) INTO TABLE result. + ENDLOOP. + + ENDMETHOD. + ENDCLASS. diff --git a/src/01/01/z2ui5_cl_fw_client.clas.abap b/src/01/01/z2ui5_cl_fw_client.clas.abap index 63ec5a93..453648eb 100644 --- a/src/01/01/z2ui5_cl_fw_client.clas.abap +++ b/src/01/01/z2ui5_cl_fw_client.clas.abap @@ -29,20 +29,20 @@ CLASS z2ui5_cl_fw_client DEFINITION RETURNING VALUE(r_result) TYPE string. -private section. + PRIVATE SECTION. ENDCLASS. -CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION. +CLASS z2ui5_cl_fw_client IMPLEMENTATION. METHOD bind_tab_cell. FIELD-SYMBOLS TYPE any. FIELD-SYMBOLS TYPE any. - data lr_ref_in type ref to data. - data lr_ref type ref to data. + DATA lr_ref_in TYPE REF TO data. + DATA lr_ref TYPE REF TO data. ASSIGN i_tab[ i_tab_index ] TO . DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( ). @@ -55,14 +55,14 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION. lr_ref = REF #( i_val ). IF lr_ref = lr_ref_in. r_result = `{` && iv_name && '/' && shift_right( CONV string( i_tab_index - 1 ) ) && '/' && -name && `}`. - RETURN. + 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`. + 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. @@ -130,11 +130,19 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION. METHOD z2ui5_if_client~nav_app_call. mo_handler->ms_next-o_app_call = app. + IF app->id_draft IS INITIAL. + app->id_app = z2ui5_cl_util_func=>func_get_uuid_32( ). + ENDIF. + result = app->id_app. ENDMETHOD. METHOD z2ui5_if_client~nav_app_leave. mo_handler->ms_next-o_app_leave = app. + IF app->id_draft IS INITIAL. + app->id_app = z2ui5_cl_util_func=>func_get_uuid_32( ). + ENDIF. + result = app->id_app. ENDMETHOD. @@ -211,7 +219,7 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION. METHOD z2ui5_if_client~popup_destroy. - mo_handler->ms_next-s_set-s_popup-check_destroy = abap_true. + mo_handler->ms_next-s_set-s_popup = value #( check_destroy = abap_true ). ENDMETHOD. @@ -299,6 +307,14 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION. ENDMETHOD. + METHOD z2ui5_if_client~clear. + + CASE val. + WHEN z2ui5_if_client~cs_clear-view. + CLEAR mo_handler->ms_next-s_set-s_view. + ENDCASE. + + ENDMETHOD. METHOD z2ui5_if_client~_bind_edit. diff --git a/src/01/01/z2ui5_cl_fw_controller.clas.abap b/src/01/01/z2ui5_cl_fw_controller.clas.abap index b6f3c643..a3774136 100644 --- a/src/01/01/z2ui5_cl_fw_controller.clas.abap +++ b/src/01/01/z2ui5_cl_fw_controller.clas.abap @@ -142,11 +142,11 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION. METHOD app_next_factory. - app->id = COND #( WHEN app->id IS INITIAL THEN z2ui5_cl_util_func=>func_get_uuid_32( ) ELSE app->id ). + app->id_draft = COND #( WHEN app->id_draft IS INITIAL THEN z2ui5_cl_util_func=>func_get_uuid_32( ) ELSE app->id_draft ). r_result = NEW #( ). r_result->ms_db-app = app. - r_result->ms_db-id = app->id. + r_result->ms_db-id = app->id_draft. r_result->ms_db-id_prev = ms_db-id. r_result->ms_db-id_prev_app = ms_db-id. r_result->ms_actual-check_launchpad_active = ms_actual-check_launchpad_active. @@ -154,7 +154,7 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION. r_result->ms_next-s_set = ms_next-s_set. TRY. - DATA(ls_db_next) = z2ui5_cl_fw_db=>load_app( id = app->id ). + DATA(ls_db_next) = z2ui5_cl_fw_db=>load_app( id = app->id_draft ). r_result->ms_db-t_attri = ls_db_next-t_attri. CATCH cx_root. ENDTRY. @@ -370,7 +370,7 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION. lv_classname = z2ui5_cl_util_func=>c_trim_upper( lv_classname ). CREATE OBJECT result->ms_db-app TYPE (lv_classname). - result->ms_db-app->id = result->ms_db-id. + result->ms_db-app->id_draft = result->ms_db-id. CATCH cx_root. result = app_system_factory( error_text = `App with name ` && lv_classname && ` not found...` ). @@ -395,7 +395,7 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION. ENDIF. result->ms_db-app = z2ui5_cl_fw_app_startup=>factory( ). - result->ms_db-app->id = result->ms_db-id. + result->ms_db-app->id_draft = result->ms_db-id. ENDMETHOD. diff --git a/src/01/01/z2ui5_cl_fw_db.clas.abap b/src/01/01/z2ui5_cl_fw_db.clas.abap index 29eaf474..42202c7e 100644 --- a/src/01/01/z2ui5_cl_fw_db.clas.abap +++ b/src/01/01/z2ui5_cl_fw_db.clas.abap @@ -6,9 +6,9 @@ CLASS z2ui5_cl_fw_db DEFINITION PUBLIC SECTION. - types ty_S_db2 type z2ui5_t_fw_01. + TYPES ty_s_db2 TYPE z2ui5_t_fw_01. - TYPES: + TYPES: BEGIN OF ty_s_db, id TYPE string, id_prev TYPE string, @@ -35,7 +35,7 @@ CLASS z2ui5_cl_fw_db DEFINITION !id TYPE clike !check_load_app TYPE abap_bool DEFAULT abap_true RETURNING - VALUE(result) TYPE ty_S_db2. + VALUE(result) TYPE ty_s_db2. CLASS-METHODS cleanup. @@ -51,7 +51,7 @@ ENDCLASS. -CLASS Z2UI5_CL_FW_DB IMPLEMENTATION. +CLASS z2ui5_cl_fw_db IMPLEMENTATION. METHOD cleanup. @@ -72,7 +72,7 @@ CLASS Z2UI5_CL_FW_DB IMPLEMENTATION. METHOD create. - db-app->id = id. + db-app->id_draft = id. DATA(lv_xml) = trans_any_2_xml( db ). DATA(ls_draft) = VALUE ty_s_db2( id = id @@ -112,6 +112,11 @@ CLASS Z2UI5_CL_FW_DB IMPLEMENTATION. FIELD-SYMBOLS TYPE any. DATA(lv_assign) = 'LO_APP->' && lr_attri->name. ASSIGN (lv_assign) TO . + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `LOAD_DRAFT_FROM_DATABASE_FAILED / ATTRI_NOT_FOUND ` && lr_attri->name. + ENDIF. z2ui5_cl_util_func=>rtti_xml_set_to_data( EXPORTING @@ -184,18 +189,22 @@ CLASS Z2UI5_CL_FW_DB IMPLEMENTATION. IF sy-subrc <> 0. CONTINUE. ENDIF. - lr_attri->data_rtti = z2ui5_cl_util_func=>rtti_xml_get_by_data( ). + lr_attri->data_rtti = z2ui5_cl_util_func=>rtti_xml_get_by_data( ). CLEAR . CLEAR . ENDLOOP. result = z2ui5_cl_util_func=>trans_xml_any_2( ls_db ). + CATCH z2ui5_cx_util_error INTO DATA(x_util). + RAISE EXCEPTION x_util. + CATCH cx_root INTO DATA(x2). RAISE EXCEPTION TYPE z2ui5_cx_util_error EXPORTING - val = x->get_text( ) && `

` && x->previous->get_text( ) && `

` && x2->get_text( ). +* val = x->get_text( ) && `

` && x->previous->get_text( ) && `

` && x2->get_text( ) && `

Please check if all generic data references are public attribtues of your class`. + val = `

` && x->previous->get_text( ) && `

` && x2->get_text( ) && `

Please check if all generic data references are public attributes of your class`. ENDTRY. ENDTRY. diff --git a/src/01/01/z2ui5_cl_fw_http_handler.clas.abap b/src/01/01/z2ui5_cl_fw_http_handler.clas.abap index 1e70d519..1b8173ca 100644 --- a/src/01/01/z2ui5_cl_fw_http_handler.clas.abap +++ b/src/01/01/z2ui5_cl_fw_http_handler.clas.abap @@ -257,11 +257,11 @@ CLASS Z2UI5_CL_FW_HTTP_HANDLER IMPLEMENTATION. ` sap.z2ui5.oBody = {};` && |\n| && ` let isUpdated = false;` && |\n| && ` if (sap.z2ui5.oViewPopup) {` && |\n| && - ` if (!sap.z2ui5.oViewPopup.isOpen || sap.z2ui5.oViewPopup.isOpen() == true) {` && |\n| && + ` if (sap.z2ui5.oViewPopup.isOpen ) { if( sap.z2ui5.oViewPopup.isOpen() == true ) {` && |\n| && ` sap.z2ui5.oBody.EDIT = sap.z2ui5.oViewPopup.getModel().getData().EDIT;` && |\n| && ` isUpdated = true;` && |\n| && ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && - ` }` && |\n| && + ` } }` && |\n| && ` }` && |\n| && ` if (isUpdated == false) {` && |\n| && ` if (sap.z2ui5.oViewPopover) {` && |\n| && diff --git a/src/01/01/z2ui5_if_client.intf.abap b/src/01/01/z2ui5_if_client.intf.abap index 1db720cc..783ab7fb 100644 --- a/src/01/01/z2ui5_if_client.intf.abap +++ b/src/01/01/z2ui5_if_client.intf.abap @@ -14,6 +14,11 @@ INTERFACE z2ui5_if_client cross_app_nav_to_prev_app TYPE string VALUE `CROSS_APP_NAV_TO_PREV_APP`, END OF cs_event. + CONSTANTS: + BEGIN OF cs_clear, + view TYPE string VALUE `VIEW`, + END OF cs_clear. + CONSTANTS: BEGIN OF cs_view, main TYPE string VALUE `MAIN`, @@ -133,11 +138,15 @@ INTERFACE z2ui5_if_client METHODS nav_app_leave IMPORTING - app TYPE REF TO z2ui5_if_app. + app TYPE REF TO z2ui5_if_app + RETURNING + VALUE(result) TYPE string. METHODS nav_app_call IMPORTING - app TYPE REF TO z2ui5_if_app. + app TYPE REF TO z2ui5_if_app + RETURNING + VALUE(result) TYPE string. METHODS message_box_display IMPORTING @@ -200,4 +209,8 @@ INTERFACE z2ui5_if_client IMPORTING val TYPE data. + METHODS clear + IMPORTING + val TYPE data. + ENDINTERFACE. diff --git a/src/01/02/z2ui5_cl_fw_app_startup.clas.abap b/src/01/02/z2ui5_cl_fw_app_startup.clas.abap index f04c1936..76241400 100644 --- a/src/01/02/z2ui5_cl_fw_app_startup.clas.abap +++ b/src/01/02/z2ui5_cl_fw_app_startup.clas.abap @@ -28,6 +28,7 @@ CLASS z2ui5_cl_fw_app_startup DEFINITION METHODS z2ui5_on_init. METHODS z2ui5_on_event. METHODS view_display_start. + METHODS on_event_check. PROTECTED SECTION. DATA mt_classes TYPE string_table. PRIVATE SECTION. @@ -142,14 +143,20 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION. IF mv_check_initialized = abap_false. mv_check_initialized = abap_true. z2ui5_on_init( ). + view_display_start( ). + return. ENDIF. IF client->get( )-check_on_navigated = abap_true. TRY. DATA(lo_f4) = CAST z2ui5_cl_popup_to_select( client->get_app( client->get( )-s_draft-id_prev_app ) ). DATA(ls_result) = lo_f4->result( ). - IF ls_result-check_cancel = abap_false. - ms_home-classname = mt_classes[ ls_result-index ]. + IF ls_result-check_confirmed = abap_true. + FIELD-SYMBOLS TYPE string. + ASSIGN ls_result-row->* TO . + ms_home-classname = . + view_display_start( ). + return. ENDIF. CATCH cx_root. ENDTRY. @@ -170,26 +177,10 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION. ms_home-btn_event_id = `BUTTON_CHECK`. ms_home-btn_icon = `sap-icon://validate`. ms_home-class_editable = abap_true. + client->view_model_update( ). WHEN `BUTTON_CHECK`. - TRY. - DATA li_app_test TYPE REF TO z2ui5_if_app. - ms_home-classname = z2ui5_cl_util_func=>c_trim_upper( ms_home-classname ). - CREATE OBJECT li_app_test TYPE (ms_home-classname). - - client->message_toast_display( `App is ready to start!` ). - ms_home-btn_text = `edit`. - ms_home-btn_event_id = `BUTTON_CHANGE`. - ms_home-btn_icon = `sap-icon://edit`. - ms_home-class_value_state = `Success`. - ms_home-class_editable = abap_false. - - CATCH cx_root INTO DATA(lx) ##CATCH_ALL. - ms_home-class_value_state_text = lx->get_text( ). - ms_home-class_value_state = `Warning`. - client->message_box_display( text = ms_home-class_value_state_text - type = `error` ). - ENDTRY. + on_event_check( ). WHEN 'VALUE_HELP'. mt_classes = z2ui5_cl_util_func=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` ). @@ -221,4 +212,28 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION. mv_check_demo = abap_true. ENDMETHOD. + + METHOD on_event_check. + + TRY. + DATA li_app_test TYPE REF TO z2ui5_if_app. + ms_home-classname = z2ui5_cl_util_func=>c_trim_upper( ms_home-classname ). + CREATE OBJECT li_app_test TYPE (ms_home-classname). + + client->message_toast_display( `App is ready to start!` ). + ms_home-btn_text = `edit`. + ms_home-btn_event_id = `BUTTON_CHANGE`. + ms_home-btn_icon = `sap-icon://edit`. + ms_home-class_value_state = `Success`. + ms_home-class_editable = abap_false. + + CATCH cx_root INTO DATA(lx) ##CATCH_ALL. + ms_home-class_value_state_text = lx->get_text( ). + ms_home-class_value_state = `Warning`. + client->message_box_display( text = ms_home-class_value_state_text + type = `error` ). + ENDTRY. + + ENDMETHOD. + ENDCLASS. diff --git a/src/03/01/z2ui5_cl_popup_error.clas.abap b/src/03/01/z2ui5_cl_popup_error.clas.abap index 72672758..44f14abc 100644 --- a/src/03/01/z2ui5_cl_popup_error.clas.abap +++ b/src/03/01/z2ui5_cl_popup_error.clas.abap @@ -9,7 +9,7 @@ CLASS z2ui5_cl_popup_error DEFINITION CLASS-METHODS factory IMPORTING - error TYPE ref to cx_root + error TYPE REF TO cx_root i_title TYPE string DEFAULT `Error View` i_icon TYPE string DEFAULT 'sap-icon://question-mark' i_button_text TYPE string DEFAULT `OK` @@ -36,7 +36,10 @@ CLASS z2ui5_cl_popup_error IMPLEMENTATION. r_result = NEW #( ). r_result->title = i_title. r_result->icon = i_icon. - r_result->question_text = error->get_text( ). + if error->previous is bound. + r_result->question_text = error->previous->get_text( ). + endif. + r_result->question_text = r_result->question_text && ` ` && error->get_text( ). r_result->button_text_confirm = i_button_text. ENDMETHOD. @@ -50,8 +53,9 @@ CLASS z2ui5_cl_popup_error IMPLEMENTATION. afterclose = client->_event( 'BUTTON_CONFIRM' ) )->content( )->vbox( 'sapUiMediumMargin' - )->text( question_text - )->get_parent( )->get_parent( +* )->text( question_text + )->html( question_text + )->get_parent( )->get_parent( )->get_parent( )->footer( )->overflow_toolbar( )->toolbar_spacer( )->button( @@ -59,6 +63,7 @@ CLASS z2ui5_cl_popup_error IMPLEMENTATION. press = client->_event( 'BUTTON_CONFIRM' ) type = 'Emphasized' ). + client->clear( client->cs_clear-view ). client->popup_display( popup->stringify( ) ). ENDMETHOD. diff --git a/src/03/01/z2ui5_cl_popup_file_upload.clas.abap b/src/03/01/z2ui5_cl_popup_file_upload.clas.abap index d2287890..ca57db12 100644 --- a/src/03/01/z2ui5_cl_popup_file_upload.clas.abap +++ b/src/03/01/z2ui5_cl_popup_file_upload.clas.abap @@ -9,22 +9,23 @@ CLASS z2ui5_cl_popup_file_upload DEFINITION CLASS-METHODS factory IMPORTING - i_text TYPE string default `Choose the file to upload:` + i_text TYPE string DEFAULT `Choose the file to upload:` i_title TYPE string DEFAULT `File Upload` i_button_text_confirm TYPE string DEFAULT `OK` i_button_text_cancel TYPE string DEFAULT `Cancel` - i_path type string optional + i_path TYPE string OPTIONAL RETURNING VALUE(r_result) TYPE REF TO z2ui5_cl_popup_file_upload. TYPES: BEGIN OF ty_s_result, - text TYPE string, - check_cancel TYPE abap_bool, + value TYPE string, + check_confirmed TYPE abap_bool, END OF ty_s_result. DATA ms_result TYPE ty_s_result. - data mv_path type string. - data mv_value type string. + DATA mv_path TYPE string. + DATA mv_value TYPE string. + DATA check_confirm_enabled TYPE abap_bool. METHODS result RETURNING @@ -38,14 +39,13 @@ CLASS z2ui5_cl_popup_file_upload DEFINITION DATA button_text_confirm TYPE string. DATA button_text_cancel TYPE string. DATA check_initialized TYPE abap_bool. - DATA check_result_confirmed TYPE abap_bool. METHODS view_display. PRIVATE SECTION. ENDCLASS. -CLASS Z2UI5_CL_POPUP_FILE_UPLOAD IMPLEMENTATION. +CLASS z2ui5_cl_popup_file_upload IMPLEMENTATION. METHOD factory. @@ -91,6 +91,7 @@ CLASS Z2UI5_CL_POPUP_FILE_UPLOAD IMPLEMENTATION. )->button( text = button_text_confirm press = client->_event( 'BUTTON_CONFIRM' ) + enabled = client->_bind( check_confirm_enabled ) type = 'Emphasized' ). client->popup_display( popup->stringify( ) ). @@ -109,26 +110,27 @@ CLASS Z2UI5_CL_POPUP_FILE_UPLOAD IMPLEMENTATION. ENDIF. CASE client->get( )-event. - when `UPLOAD`. - SPLIT mv_value AT `;` INTO DATA(lv_dummy) DATA(lv_data). - SPLIT lv_data AT `,` INTO lv_dummy lv_data. + WHEN `UPLOAD`. - DATA(lv_data2) = lcl_utility=>decode_x_base64( lv_data ). - ms_result-text = lcl_utility=>get_string_by_xstring( lv_data2 ). + SPLIT mv_value AT `;` INTO DATA(lv_dummy) DATA(lv_data). + SPLIT lv_data AT `,` INTO lv_dummy lv_data. - client->message_box_display( `file uploaded` ). + DATA(lv_data2) = lcl_utility=>decode_x_base64( lv_data ). + ms_result-value = lcl_utility=>get_string_by_xstring( lv_data2 ). - CLEAR mv_value. - CLEAR mv_path. + check_confirm_enabled = abap_true. +* client->message_box_display( `file uploaded` ). + CLEAR mv_value. + CLEAR mv_path. + client->popup_model_update( ). WHEN `BUTTON_CONFIRM`. - check_result_confirmed = abap_true. + ms_result-check_confirmed = abap_true. client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). WHEN `BUTTON_CANCEL`. - check_result_confirmed = abap_false. client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). ENDCASE. diff --git a/src/03/01/z2ui5_cl_popup_get_range.clas.abap b/src/03/01/z2ui5_cl_popup_get_range.clas.abap index 3929bf89..20537d7f 100644 --- a/src/03/01/z2ui5_cl_popup_get_range.clas.abap +++ b/src/03/01/z2ui5_cl_popup_get_range.clas.abap @@ -24,8 +24,8 @@ CLASS z2ui5_cl_popup_get_range DEFINITION TYPES: BEGIN OF ty_s_result, - t_range TYPE z2ui5_cl_util_func=>ty_t_range, - check_cancel TYPE abap_bool, + t_range TYPE z2ui5_cl_util_func=>ty_t_range, + check_confirmed TYPE abap_bool, END OF ty_s_result. DATA ms_result TYPE ty_s_result. @@ -37,7 +37,6 @@ CLASS z2ui5_cl_popup_get_range DEFINITION DATA client TYPE REF TO z2ui5_if_client. DATA check_initialized TYPE abap_bool. - DATA check_result_confirmed TYPE abap_bool. METHODS view_display. PRIVATE SECTION. ENDCLASS. @@ -50,6 +49,7 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION. r_result = NEW #( ). r_result->ms_result-t_range = t_range. + INSERT VALUE #( ) INTO TABLE r_result->ms_result-t_range. ENDMETHOD. @@ -89,8 +89,8 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION. key = '{N}' text = '{N}' )->get_parent( - )->input( value = `{LOW}` - )->input( value = `{HIGH}` visible = `{= ${OPTION} === 'BT' }` + )->input( value = `{LOW}` submit = client->_event( 'BUTTON_CONFIRM' ) + )->input( value = `{HIGH}` visible = `{= ${OPTION} === 'BT' }` submit = client->_event( 'BUTTON_CONFIRM' ) )->button( icon = 'sap-icon://decline' type = `Transparent` press = client->_event( val = `POPUP_DELETE` t_arg = VALUE #( ( `${KEY}` ) ) ) ). @@ -119,15 +119,15 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION. IF check_initialized = abap_false. check_initialized = abap_true. - CLEAR mt_filter. - LOOP AT ms_result-t_range REFERENCE INTO DATA(lr_product). - INSERT VALUE #( - low = lr_product->low - high = lr_product->high - option = lr_product->option - key = z2ui5_cl_util_func=>func_get_uuid_32( ) - ) INTO TABLE mt_filter. - ENDLOOP. + CLEAR mt_filter. + LOOP AT ms_result-t_range REFERENCE INTO DATA(lr_product). + INSERT VALUE #( + low = lr_product->low + high = lr_product->high + option = lr_product->option + key = z2ui5_cl_util_func=>func_get_uuid_32( ) + ) INTO TABLE mt_filter. + ENDLOOP. view_display( ). RETURN. @@ -138,6 +138,9 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION. CLEAR ms_result-t_range. LOOP AT mt_filter REFERENCE INTO DATA(lr_filter). + IF lr_filter->low IS INITIAL AND lr_filter->high IS INITIAL. + CONTINUE. + ENDIF. INSERT VALUE #( sign = `I` option = lr_filter->option @@ -146,13 +149,11 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION. ) INTO TABLE ms_result-t_range. ENDLOOP. - check_result_confirmed = abap_true. + ms_result-check_confirmed = abap_true. client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). WHEN `BUTTON_CANCEL`. - - check_result_confirmed = abap_false. client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). diff --git a/src/03/01/z2ui5_cl_popup_get_range_multi.clas.abap b/src/03/01/z2ui5_cl_popup_get_range_multi.clas.abap new file mode 100644 index 00000000..759e2129 --- /dev/null +++ b/src/03/01/z2ui5_cl_popup_get_range_multi.clas.abap @@ -0,0 +1,149 @@ +CLASS z2ui5_cl_popup_get_range_multi DEFINITION + PUBLIC FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + CLASS-METHODS factory + IMPORTING + val TYPE z2ui5_cl_util_func=>ty_t_sql_multi + RETURNING + VALUE(r_result) TYPE REF TO z2ui5_cl_popup_get_range_multi. + + TYPES: + BEGIN OF ty_s_result, + t_sql TYPE z2ui5_cl_util_func=>ty_t_sql_multi, + check_confirmed TYPE abap_bool, + END OF ty_s_result. + + DATA ms_result TYPE ty_s_result. + + METHODS result + RETURNING VALUE(result) TYPE ty_s_result. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + DATA mv_popup_name TYPE LINE OF string_table. + METHODS popup_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_popup_get_range_multi IMPLEMENTATION. + + METHOD factory. + + r_result = NEW #( ). + r_result->ms_result-t_sql = val. + + ENDMETHOD. + + METHOD result. + result = ms_result. + ENDMETHOD. + + METHOD popup_display. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( client ). + lo_popup = lo_popup->dialog( afterclose = client->_event( 'BUTTON_CANCEL' ) + contentheight = `50%` + contentwidth = `50%` + title = 'Define Filter Conditons' ). + + DATA(vbox) = lo_popup->vbox( height = `100%` + justifycontent = 'SpaceBetween' ). + + DATA(item) = vbox->list( nodata = `no conditions defined` + items = client->_bind( ms_result-t_sql ) + selectionchange = client->_event( 'SELCHANGE' ) + )->custom_list_item( ). + + DATA(grid) = item->grid( ). + grid->label( `{NAME}` ). + + grid->multi_input( tokens = `{T_TOKEN}` + enabled = abap_false + valuehelprequest = client->_event( val = `LIST_OPEN` t_arg = VALUE #( ( `${NAME}` ) ) ) + )->tokens( + )->token( key = `{KEY}` + text = `{TEXT}` + visible = `{VISIBLE}` + selected = `{SELKZ}` + editable = `{EDITABLE}` ). + + grid->button( text = `Select` press = client->_event( val = `LIST_OPEN` t_arg = VALUE #( ( `${NAME}` ) ) ) ). + grid->button( icon = 'sap-icon://delete' type = `Transparent` text = `Clear` press = client->_event( val = `LIST_DELETE` t_arg = VALUE #( ( `${NAME}` ) ) ) ). + + lo_popup->footer( )->overflow_toolbar( + )->button( text = `Clear All` + icon = 'sap-icon://delete' + type = `Transparent` + press = client->_event( val = `POPUP_DELETE_ALL` ) + )->toolbar_spacer( + )->button( text = 'Cancel' + press = client->_event( 'BUTTON_CANCEL' ) + )->button( text = 'OK' + press = client->_event( 'BUTTON_CONFIRM' ) + type = 'Emphasized' ). + + client->popup_display( lo_popup->stringify( ) ). + ENDMETHOD. + + METHOD z2ui5_if_app~main. + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + popup_display( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + + DATA(lo_popup) = CAST z2ui5_cl_popup_get_range( client->get_app( client->get( )-s_draft-id_prev_app ) ). + IF lo_popup->result( )-check_confirmed = abap_true. + ASSIGN ms_result-t_sql[ name = mv_popup_name ] TO FIELD-SYMBOL(). + -t_range = lo_popup->result( )-t_range. + -t_token = z2ui5_cl_util_func=>get_token_t_by_range_t( -t_range ). + ENDIF. + popup_display( ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'LIST_DELETE'. + DATA(lt_event) = client->get( )-t_event_arg. + ASSIGN ms_result-t_sql[ name = lt_event[ 1 ] ] TO . + CLEAR -t_token. + CLEAR -t_range. + client->popup_model_update( ). + + WHEN 'LIST_OPEN'. + lt_event = client->get( )-t_event_arg. + mv_popup_name = lt_event[ 1 ]. + DATA(ls_sql) = ms_result-t_sql[ name = mv_popup_name ]. + client->nav_app_call( z2ui5_cl_popup_get_range=>factory( ls_sql-t_range ) ). + + WHEN `BUTTON_CONFIRM`. + ms_result-check_confirmed = abap_true. + client->popup_destroy( ). + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN `BUTTON_CANCEL`. + client->popup_destroy( ). + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN `POPUP_DELETE_ALL`. + LOOP AT ms_result-t_sql REFERENCE INTO DATA(lr_sql). + CLEAR lr_sql->t_range. + CLEAR lr_sql->t_token. + ENDLOOP. + client->popup_model_update( ). + + ENDCASE. + ENDMETHOD. +ENDCLASS. diff --git a/src/03/01/z2ui5_cl_popup_get_range_multi.clas.xml b/src/03/01/z2ui5_cl_popup_get_range_multi.clas.xml new file mode 100644 index 00000000..2351546e --- /dev/null +++ b/src/03/01/z2ui5_cl_popup_get_range_multi.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_POPUP_GET_RANGE_MULTI + E + ui - popup get range multi + 1 + X + X + X + + + + diff --git a/src/03/01/z2ui5_cl_popup_input_value.clas.abap b/src/03/01/z2ui5_cl_popup_input_value.clas.abap index 5a512755..02923e0e 100644 --- a/src/03/01/z2ui5_cl_popup_input_value.clas.abap +++ b/src/03/01/z2ui5_cl_popup_input_value.clas.abap @@ -20,8 +20,8 @@ CLASS z2ui5_cl_popup_input_value DEFINITION TYPES: BEGIN OF ty_s_result, - value TYPE string, - check_cancel TYPE abap_bool, + value TYPE string, + check_confirmed TYPE abap_bool, END OF ty_s_result. DATA ms_result TYPE ty_s_result. diff --git a/src/03/01/z2ui5_cl_popup_layout.clas.abap b/src/03/01/z2ui5_cl_popup_layout.clas.abap new file mode 100644 index 00000000..26499454 --- /dev/null +++ b/src/03/01/z2ui5_cl_popup_layout.clas.abap @@ -0,0 +1,158 @@ +CLASS z2ui5_cl_popup_layout DEFINITION + PUBLIC + FINAL + CREATE PROTECTED. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_layout, + name TYPE string, + visible TYPE abap_bool, + length TYPE string, + mergeduplicates TYPE abap_bool, + END OF ty_s_layout. + TYPES ty_t_layout TYPE STANDARD TABLE OF ty_s_layout WITH EMPTY KEY. + + CLASS-METHODS factory + IMPORTING + t_layout TYPE ty_t_layout OPTIONAL + i_tab TYPE STANDARD TABLE OPTIONAL + RETURNING + VALUE(r_result) TYPE REF TO z2ui5_cl_popup_layout. + + TYPES: + BEGIN OF ty_s_result, + t_layout TYPE ty_t_layout, + check_confirmed TYPE abap_bool, + END OF ty_s_result. + DATA ms_result TYPE ty_s_result. + + METHODS result + RETURNING + VALUE(result) TYPE ty_s_result. + + PROTECTED SECTION. + DATA check_initialized TYPE abap_bool. + DATA client TYPE REF TO z2ui5_if_client. + METHODS on_event. + METHODS display. + METHODS on_event_confirm. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_POPUP_LAYOUT IMPLEMENTATION. + + + METHOD display. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( client )->dialog( + afterclose = client->_event( 'BUTTON_CONFIRM' ) + stretch = abap_true + title = 'Layout View' + )->content( ). + + DATA(tab) = popup->table( + items = client->_bind_edit( ms_result-t_layout ) ). + + DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( ms_result-t_layout ). + + DATA(list) = tab->column_list_item( valign = `Top` ). + DATA(cells) = list->cells( ). + + DATA(columns) = tab->columns( ). + LOOP AT lt_comp INTO DATA(ls_comp2). + DATA(col) = columns->column( width = '8rem' )->header( ns = `` ). + col->text( text = ls_comp2-name ). + ENDLOOP. + + LOOP AT lt_comp INTO DATA(ls_comp). + IF ls_comp-name = 'NAME'. + cells->text( `{` && ls_comp-name && `}` ). + ELSE. + cells->checkbox( `{` && ls_comp-name && `}` ). + ENDIF. + ENDLOOP. + + popup->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'OK' + press = client->_event( 'BUTTON_CONFIRM' ) + type = 'Emphasized' ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD factory. + + r_result = NEW #( ). + + IF t_layout IS INITIAL. + + DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( i_tab ). + LOOP AT lt_comp REFERENCE INTO DATA(lr_comp). + INSERT VALUE #( name = lr_comp->name visible = abap_true mergeduplicates = abap_false ) INTO TABLE r_result->ms_result-t_layout. + ENDLOOP. + + ELSE. + r_result->ms_result-t_layout = t_layout. + ENDIF. + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN 'BUTTON_CONFIRM'. + + ms_result-check_confirmed = abap_true. + on_event_confirm( ). + + WHEN 'CANCEL'. + client->popup_destroy( ). + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD on_event_confirm. + + client->popup_destroy( ). + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDMETHOD. + + + METHOD result. + + result = ms_result. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + display( ). + RETURN. + ENDIF. + + on_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/03/01/z2ui5_cl_popup_layout.clas.xml b/src/03/01/z2ui5_cl_popup_layout.clas.xml new file mode 100644 index 00000000..acc8163f --- /dev/null +++ b/src/03/01/z2ui5_cl_popup_layout.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_POPUP_LAYOUT + E + ui - popup layout + 1 + X + X + X + + + + diff --git a/src/03/01/z2ui5_cl_popup_pdf.clas.abap b/src/03/01/z2ui5_cl_popup_pdf.clas.abap index d0b0a01c..9b12e842 100644 --- a/src/03/01/z2ui5_cl_popup_pdf.clas.abap +++ b/src/03/01/z2ui5_cl_popup_pdf.clas.abap @@ -18,8 +18,8 @@ CLASS z2ui5_cl_popup_pdf DEFINITION TYPES: BEGIN OF ty_s_result, - text TYPE string, - check_cancel TYPE abap_bool, + text TYPE string, + check_confirmed TYPE abap_bool, END OF ty_s_result. DATA ms_result TYPE ty_s_result. diff --git a/src/03/01/z2ui5_cl_popup_table.clas.abap b/src/03/01/z2ui5_cl_popup_table.clas.abap new file mode 100644 index 00000000..767a3c74 --- /dev/null +++ b/src/03/01/z2ui5_cl_popup_table.clas.abap @@ -0,0 +1,151 @@ +CLASS z2ui5_cl_popup_table DEFINITION + PUBLIC + FINAL + CREATE PROTECTED. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + CLASS-METHODS factory + IMPORTING + i_tab TYPE STANDARD TABLE + RETURNING + VALUE(r_result) TYPE REF TO z2ui5_cl_popup_table. + + TYPES: + BEGIN OF ty_s_result, + row TYPE REF TO data, + check_confirmed TYPE abap_bool, + END OF ty_s_result. + DATA ms_result TYPE ty_s_result. + + METHODS result + RETURNING + VALUE(result) TYPE ty_s_result. + + DATA mr_tab TYPE REF TO data. + + PROTECTED SECTION. + DATA check_initialized TYPE abap_bool. + DATA client TYPE REF TO z2ui5_if_client. + METHODS on_event. + METHODS display. + METHODS on_event_confirm. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_popup_table IMPLEMENTATION. + + + METHOD display. + + FIELD-SYMBOLS TYPE STANDARD TABLE. + ASSIGN mr_tab->* TO . + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( client )->dialog( + afterclose = client->_event( 'BUTTON_CONFIRM' ) + stretch = abap_true + title = 'Table View' +* icon = 'sap-icon://edit' + )->content( ). + + DATA(tab) = popup->table( + items = client->_bind( ) ). +* )->header_toolbar( +* )->overflow_toolbar( +* )->toolbar_spacer( +* )->button( text = `Filter` press = client->_event( `PREVIEW_FILTER` ) icon = `sap-icon://filter` +* )->button( text = `Display Popup` press = client->_event( `BUTTON_START` ) type = `Emphasized` +* )->get_parent( )->get_parent( ). + + DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( ). + + DATA(list) = tab->column_list_item( valign = `Top` ). + DATA(cells) = list->cells( ). + + LOOP AT lt_comp INTO DATA(ls_comp). + cells->text( text = `{` && ls_comp-name && `}` ). + ENDLOOP. + + DATA(columns) = tab->columns( ). + LOOP AT lt_comp INTO ls_comp. + columns->column( width = '8rem' )->header( ns = `` )->text( text = ls_comp-name ). + ENDLOOP. + + popup->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( +* )->button( +* text = 'Cancel' +* press = client->_event( 'BUTTON_TEXTAREA_CANCEL' ) + )->button( + text = 'OK' + press = client->_event( 'BUTTON_CONFIRM' ) + type = 'Emphasized' ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD factory. + + r_result = NEW #( ). + CREATE DATA r_result->mr_tab LIKE i_tab. + CREATE DATA r_result->ms_result-row LIKE LINE OF i_tab. + FIELD-SYMBOLS TYPE any. + ASSIGN r_result->mr_tab->* TO . + = i_tab. + + ENDMETHOD. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN 'BUTTON_CONFIRM'. + ms_result-check_confirmed = abap_true. + on_event_confirm( ). + + WHEN 'CANCEL'. + client->popup_destroy( ). + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + + ENDCASE. + + ENDMETHOD. + + + METHOD on_event_confirm. + + client->popup_destroy( ). + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDMETHOD. + + + METHOD result. + + result = ms_result. + + ENDMETHOD. + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + display( ). + RETURN. + ENDIF. + + on_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/03/01/z2ui5_cl_popup_table.clas.xml b/src/03/01/z2ui5_cl_popup_table.clas.xml new file mode 100644 index 00000000..65dde79b --- /dev/null +++ b/src/03/01/z2ui5_cl_popup_table.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_POPUP_TABLE + E + ui - popup table + 1 + X + X + X + + + + diff --git a/src/03/01/z2ui5_cl_popup_textedit.clas.abap b/src/03/01/z2ui5_cl_popup_textedit.clas.abap index 9ddf273d..a3badd4d 100644 --- a/src/03/01/z2ui5_cl_popup_textedit.clas.abap +++ b/src/03/01/z2ui5_cl_popup_textedit.clas.abap @@ -19,8 +19,8 @@ CLASS z2ui5_cl_popup_textedit DEFINITION DATA check_initialized TYPE abap_bool. TYPES: BEGIN OF ty_s_result, - text TYPE string, - check_cancel TYPE abap_bool, + text TYPE string, + check_confirmed TYPE abap_bool, END OF ty_s_result. DATA ms_result TYPE ty_s_result. @@ -87,11 +87,11 @@ CLASS z2ui5_cl_popup_textedit IMPLEMENTATION. CASE client->get( )-event. WHEN `BUTTON_TEXTAREA_CONFIRM`. + ms_result-check_confirmed = abap_true. client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). WHEN `BUTTON_TEXTAREA_CANCEL`. - ms_result-check_cancel = abap_true. client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). diff --git a/src/03/01/z2ui5_cl_popup_to_confirm.clas.abap b/src/03/01/z2ui5_cl_popup_to_confirm.clas.abap index e4f21206..91a64c06 100644 --- a/src/03/01/z2ui5_cl_popup_to_confirm.clas.abap +++ b/src/03/01/z2ui5_cl_popup_to_confirm.clas.abap @@ -50,6 +50,7 @@ CLASS Z2UI5_CL_POPUP_TO_CONFIRM IMPLEMENTATION. METHOD factory. r_result = new #( ). +* r_result->z2ui5_if_app~id = z2ui5_cl_util_func=>func_get_uuid_22( ). r_result->title = i_title. r_result->icon = i_icon. r_result->question_text = i_question_text. diff --git a/src/03/01/z2ui5_cl_popup_to_select.clas.abap b/src/03/01/z2ui5_cl_popup_to_select.clas.abap index fe11dbd7..0975b1e3 100644 --- a/src/03/01/z2ui5_cl_popup_to_select.clas.abap +++ b/src/03/01/z2ui5_cl_popup_to_select.clas.abap @@ -8,14 +8,14 @@ CLASS z2ui5_cl_popup_to_select DEFINITION CLASS-METHODS factory IMPORTING - i_tab TYPE data + i_tab TYPE STANDARD TABLE RETURNING VALUE(r_result) TYPE REF TO z2ui5_cl_popup_to_select. TYPES: BEGIN OF ty_s_result, - index TYPE i, - check_cancel TYPE abap_bool, + row TYPE REF TO data, + check_confirmed TYPE abap_bool, END OF ty_s_result. DATA ms_result TYPE ty_s_result. @@ -29,6 +29,7 @@ CLASS z2ui5_cl_popup_to_select DEFINITION PROTECTED SECTION. DATA check_initialized TYPE abap_bool. + DATA check_table_line TYPE abap_bool. DATA client TYPE REF TO z2ui5_if_client. METHODS on_event. METHODS display. @@ -37,7 +38,6 @@ CLASS z2ui5_cl_popup_to_select DEFINITION METHODS on_event_search. PRIVATE SECTION. - DATA lv_check_table_line TYPE abap_bool. ENDCLASS. @@ -48,6 +48,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION. r_result = NEW #( ). CREATE DATA r_result->mr_tab LIKE i_tab. + CREATE DATA r_result->ms_result-row LIKE LINE OF i_tab. FIELD-SYMBOLS TYPE any. ASSIGN r_result->mr_tab->* TO . = i_tab. @@ -90,7 +91,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION. METHOD z2ui5_if_app~main. - me->client = client. + me->client = client. IF check_initialized = abap_false. check_initialized = abap_true. @@ -108,10 +109,10 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION. CASE client->get( )-event. WHEN 'CONFIRM'. + ms_result-check_confirmed = abap_true. on_event_confirm( ). WHEN 'CANCEL'. - ms_result-check_cancel = abap_true. client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). @@ -142,7 +143,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION. DATA(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ). DATA(lt_comp) = lo_struct->get_components( ). CATCH cx_root. - lv_check_table_line = abap_true. + check_table_line = abap_true. DATA(lo_elem) = CAST cl_abap_elemdescr( lo_table->get_table_line_type( ) ). INSERT VALUE #( name = 'TAB_LINE' type = CAST #( lo_elem ) ) INTO TABLE lt_comp. ENDTRY. @@ -164,7 +165,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION. DATA lr_row TYPE REF TO data. CREATE DATA lr_row LIKE LINE OF . ASSIGN lr_row->* TO . - IF lv_check_table_line = abap_true. + IF check_table_line = abap_true. ASSIGN lr_row->('TAB_LINE') TO . = . ELSE. @@ -182,17 +183,30 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION. METHOD on_event_confirm. FIELD-SYMBOLS TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE any. - FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE any. ASSIGN mr_tab_popup->* TO . - LOOP AT ASSIGNING . - DATA(lv_tabix) = sy-tabix. - ASSIGN ('-ZZSELKZ') TO . - IF = abap_true. - ms_result-index = lv_tabix. - EXIT. + + LOOP AT ASSIGNING . + + ASSIGN ('-ZZSELKZ') TO . + IF = abap_false. + CONTINUE. ENDIF. + + FIELD-SYMBOLS TYPE any. + ASSIGN ms_result-row->* TO . + + IF check_table_line = abap_true. + FIELD-SYMBOLS TYPE any. + ASSIGN ('-TAB_LINE') TO . + = . + ELSE. + = CORRESPONDING #( ). + ENDIF. + EXIT. ENDLOOP. + client->popup_destroy( ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). diff --git a/src/10/01/z2ui5_cl_xml_view.clas.abap b/src/10/01/z2ui5_cl_xml_view.clas.abap index 127e932e..46d1efb8 100644 --- a/src/10/01/z2ui5_cl_xml_view.clas.abap +++ b/src/10/01/z2ui5_cl_xml_view.clas.abap @@ -264,6 +264,7 @@ public section. importing !UNIT type CLIKE optional !FOOTERCOLOR type CLIKE optional + !blocked type CLIKE optional !FRAMETYPE type CLIKE optional !PRIORITY type CLIKE optional !PRIORITYTEXT type CLIKE optional @@ -6757,6 +6758,7 @@ ENDMETHOD. t_prop = VALUE #( ( n = `unit` v = unit ) ( n = `footerColor` v = footerColor ) + ( n = `blocked` v = z2ui5_cl_util_func=>boolean_abap_2_json( blocked ) ) ( n = `frameType` v = frameType ) ( n = `priority` v = priority ) ( n = `priorityText` v = priorityText ) diff --git a/src/z2ui5_if_app.intf.abap b/src/z2ui5_if_app.intf.abap index 8f186dbb..6e597820 100644 --- a/src/z2ui5_if_app.intf.abap +++ b/src/z2ui5_if_app.intf.abap @@ -1,7 +1,8 @@ INTERFACE z2ui5_if_app PUBLIC. INTERFACES if_serializable_object. - DATA id TYPE string. + DATA id_draft TYPE string. + DATA id_app TYPE string. METHODS main IMPORTING