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
This commit is contained in:
oblomov 2024-01-24 16:57:38 +01:00 committed by GitHub
parent 88b425bf8c
commit a6be1a95d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 1041 additions and 116 deletions

View File

@ -152,7 +152,7 @@
"msag_consistency": true, "msag_consistency": true,
"names_no_dash": true, "names_no_dash": true,
"nesting": { "nesting": {
"depth": 5 "depth": 7
}, },
"newline_between_methods": false, "newline_between_methods": false,
"no_aliases": true, "no_aliases": true,

View File

@ -17,6 +17,38 @@ CLASS z2ui5_cl_util_func DEFINITION
TYPES ty_t_range TYPE RANGE OF string. TYPES ty_t_range TYPE RANGE OF string.
TYPES ty_s_range TYPE LINE OF ty_t_range. 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 CLASS-METHODS js_load_ext_lib
RETURNING RETURNING
VALUE(result) TYPE string. VALUE(result) TYPE string.
@ -64,7 +96,7 @@ CLASS z2ui5_cl_util_func DEFINITION
CLASS-METHODS x_check_raise CLASS-METHODS x_check_raise
IMPORTING IMPORTING
!v TYPE clike DEFAULT `CX_SY_SUBRC` !v TYPE clike DEFAULT `CX_SY_SUBRC`
!when TYPE abap_bool. !when TYPE xfeld.
CLASS-METHODS x_raise CLASS-METHODS x_raise
IMPORTING IMPORTING
@ -260,6 +292,48 @@ CLASS z2ui5_cl_util_func DEFINITION
CHANGING CHANGING
tab TYPE STANDARD TABLE. 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. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
@ -268,6 +342,133 @@ ENDCLASS.
CLASS z2ui5_cl_util_func IMPLEMENTATION. 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. METHOD app_get_url.
@ -324,7 +525,8 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
WHEN 'ABAP_BOOL' WHEN 'ABAP_BOOL'
OR 'XSDBOOLEAN' OR 'XSDBOOLEAN'
OR 'FLAG' OR 'FLAG'
* OR 'XFELD' OR 'XFLAG'
OR 'XFELD'
OR 'ABAP_BOOLEAN' OR 'ABAP_BOOLEAN'
OR 'WDY_BOOLEAN' OR 'WDY_BOOLEAN'
OR 'OS_BOOLEAN'. OR 'OS_BOOLEAN'.
@ -442,6 +644,80 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_source_code_method.
DATA object TYPE REF TO object.
FIELD-SYMBOLS <any> 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 <any>.
object = <any>.
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. METHOD get_range_by_token.
DATA(lv_length) = strlen( value ) - 1. DATA(lv_length) = strlen( value ) - 1.
@ -696,12 +972,22 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
METHOD rtti_get_t_comp_by_data. METHOD rtti_get_t_comp_by_data.
DATA(lo_type) = cl_abap_structdescr=>describe_by_data( val ). TRY.
DATA(lo_type) = cl_abap_typedescr=>describe_by_data( val ).
DATA(lo_struct) = CAST cl_abap_structdescr( lo_type ).
CATCH cx_root.
TRY. TRY.
DATA(lo_tab) = CAST cl_abap_tabledescr( lo_type ). DATA(lo_tab) = CAST cl_abap_tabledescr( lo_type ).
DATA(lo_struct) = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ). lo_struct = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ).
CATCH cx_root. CATCH cx_root.
lo_struct = CAST cl_abap_structdescr( lo_type ). 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. ENDTRY.
result = lo_struct->get_components( ). result = lo_struct->get_components( ).
@ -726,7 +1012,7 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
CATCH cx_root. CATCH cx_root.
DATA(lv_link) = `https://github.com/sandraros/S-RTTI`. DATA(lv_link) = `https://github.com/sandraros/S-RTTI`.
DATA(lv_text) = `<p>Please install the open-source project S-RTTI by sandraros and try again: <a href="` && DATA(lv_text) = `<p>Please install the open-source project S-RTTI by sandraros and try again: <a href="` &&
lv_link && `" style="color:blue; font-weight:600;">(link)</a></p>`. lv_link && `" style="color:blue; font-weight:600;" target="_blank">(link)</a></p>`.
RAISE EXCEPTION TYPE z2ui5_cx_util_error RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING EXPORTING
@ -966,6 +1252,25 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
pretty_name = pretty_name pretty_name = pretty_name
IMPORTING IMPORTING
r_result = <comp> ). r_result = <comp> ).
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 <ls_data_ui5> WITH `$1$2$3`
REPLACEMENT LENGTH match. "#EC NOTEXT
<comp> = <ls_data_ui5>.
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 <ls_data_ui5> WITH `$1$2$3`
REPLACEMENT LENGTH match. "#EC NOTEXT
<comp> = <ls_data_ui5>.
WHEN OTHERS.
<comp> = <ls_data_ui5>.
ENDCASE.
WHEN OTHERS. WHEN OTHERS.
<comp> = <ls_data_ui5>. <comp> = <ls_data_ui5>.
ENDCASE. ENDCASE.
@ -1076,4 +1381,39 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
RAISE EXCEPTION TYPE z2ui5_cx_util_error EXPORTING val = v. RAISE EXCEPTION TYPE z2ui5_cx_util_error EXPORTING val = v.
ENDMETHOD. 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 <from> TYPE data.
FIELD-SYMBOLS <result> TYPE data.
ASSIGN from->* TO <from>.
CREATE DATA result LIKE <from>.
ASSIGN result->* TO <result>.
<result> = <from>.
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. ENDCLASS.

View File

@ -29,20 +29,20 @@ CLASS z2ui5_cl_fw_client DEFINITION
RETURNING RETURNING
VALUE(r_result) TYPE string. VALUE(r_result) TYPE string.
private section. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION. CLASS z2ui5_cl_fw_client IMPLEMENTATION.
METHOD bind_tab_cell. METHOD bind_tab_cell.
FIELD-SYMBOLS <ele> TYPE any. FIELD-SYMBOLS <ele> TYPE any.
FIELD-SYMBOLS <row> TYPE any. FIELD-SYMBOLS <row> TYPE any.
data lr_ref_in type ref to data. DATA lr_ref_in TYPE REF TO data.
data lr_ref type ref to data. DATA lr_ref TYPE REF TO data.
ASSIGN i_tab[ i_tab_index ] TO <row>. ASSIGN i_tab[ i_tab_index ] TO <row>.
DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <row> ). DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <row> ).
@ -130,11 +130,19 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION.
METHOD z2ui5_if_client~nav_app_call. METHOD z2ui5_if_client~nav_app_call.
mo_handler->ms_next-o_app_call = app. 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. ENDMETHOD.
METHOD z2ui5_if_client~nav_app_leave. METHOD z2ui5_if_client~nav_app_leave.
mo_handler->ms_next-o_app_leave = app. 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. ENDMETHOD.
@ -211,7 +219,7 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION.
METHOD z2ui5_if_client~popup_destroy. 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. ENDMETHOD.
@ -299,6 +307,14 @@ CLASS Z2UI5_CL_FW_CLIENT IMPLEMENTATION.
ENDMETHOD. 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. METHOD z2ui5_if_client~_bind_edit.

View File

@ -142,11 +142,11 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
METHOD app_next_factory. 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 = NEW #( ).
r_result->ms_db-app = app. 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 = ms_db-id.
r_result->ms_db-id_prev_app = 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. 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. r_result->ms_next-s_set = ms_next-s_set.
TRY. 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. r_result->ms_db-t_attri = ls_db_next-t_attri.
CATCH cx_root. CATCH cx_root.
ENDTRY. ENDTRY.
@ -370,7 +370,7 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
lv_classname = z2ui5_cl_util_func=>c_trim_upper( lv_classname ). lv_classname = z2ui5_cl_util_func=>c_trim_upper( lv_classname ).
CREATE OBJECT result->ms_db-app TYPE (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. CATCH cx_root.
result = app_system_factory( error_text = `App with name ` && lv_classname && ` not found...` ). result = app_system_factory( error_text = `App with name ` && lv_classname && ` not found...` ).
@ -395,7 +395,7 @@ CLASS z2ui5_cl_fw_controller IMPLEMENTATION.
ENDIF. ENDIF.
result->ms_db-app = z2ui5_cl_fw_app_startup=>factory( ). 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. ENDMETHOD.

View File

@ -6,7 +6,7 @@ CLASS z2ui5_cl_fw_db DEFINITION
PUBLIC SECTION. 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, BEGIN OF ty_s_db,
@ -35,7 +35,7 @@ CLASS z2ui5_cl_fw_db DEFINITION
!id TYPE clike !id TYPE clike
!check_load_app TYPE abap_bool DEFAULT abap_true !check_load_app TYPE abap_bool DEFAULT abap_true
RETURNING RETURNING
VALUE(result) TYPE ty_S_db2. VALUE(result) TYPE ty_s_db2.
CLASS-METHODS cleanup. CLASS-METHODS cleanup.
@ -51,7 +51,7 @@ ENDCLASS.
CLASS Z2UI5_CL_FW_DB IMPLEMENTATION. CLASS z2ui5_cl_fw_db IMPLEMENTATION.
METHOD cleanup. METHOD cleanup.
@ -72,7 +72,7 @@ CLASS Z2UI5_CL_FW_DB IMPLEMENTATION.
METHOD create. METHOD create.
db-app->id = id. db-app->id_draft = id.
DATA(lv_xml) = trans_any_2_xml( db ). DATA(lv_xml) = trans_any_2_xml( db ).
DATA(ls_draft) = VALUE ty_s_db2( id = id DATA(ls_draft) = VALUE ty_s_db2( id = id
@ -112,6 +112,11 @@ CLASS Z2UI5_CL_FW_DB IMPLEMENTATION.
FIELD-SYMBOLS <ref> TYPE any. FIELD-SYMBOLS <ref> TYPE any.
DATA(lv_assign) = 'LO_APP->' && lr_attri->name. DATA(lv_assign) = 'LO_APP->' && lr_attri->name.
ASSIGN (lv_assign) TO <ref>. ASSIGN (lv_assign) TO <ref>.
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( z2ui5_cl_util_func=>rtti_xml_set_to_data(
EXPORTING EXPORTING
@ -191,11 +196,15 @@ CLASS Z2UI5_CL_FW_DB IMPLEMENTATION.
result = z2ui5_cl_util_func=>trans_xml_any_2( ls_db ). 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). CATCH cx_root INTO DATA(x2).
RAISE EXCEPTION TYPE z2ui5_cx_util_error RAISE EXCEPTION TYPE z2ui5_cx_util_error
EXPORTING EXPORTING
val = x->get_text( ) && `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ). * val = x->get_text( ) && `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attribtues of your class`.
val = `<p>` && x->previous->get_text( ) && `<p>` && x2->get_text( ) && `<p> Please check if all generic data references are public attributes of your class`.
ENDTRY. ENDTRY.
ENDTRY. ENDTRY.

View File

@ -257,11 +257,11 @@ CLASS Z2UI5_CL_FW_HTTP_HANDLER IMPLEMENTATION.
` sap.z2ui5.oBody = {};` && |\n| && ` sap.z2ui5.oBody = {};` && |\n| &&
` let isUpdated = false;` && |\n| && ` let isUpdated = false;` && |\n| &&
` if (sap.z2ui5.oViewPopup) {` && |\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| && ` sap.z2ui5.oBody.EDIT = sap.z2ui5.oViewPopup.getModel().getData().EDIT;` && |\n| &&
` isUpdated = true;` && |\n| && ` isUpdated = true;` && |\n| &&
` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| &&
` }` && |\n| && ` } }` && |\n| &&
` }` && |\n| && ` }` && |\n| &&
` if (isUpdated == false) {` && |\n| && ` if (isUpdated == false) {` && |\n| &&
` if (sap.z2ui5.oViewPopover) {` && |\n| && ` if (sap.z2ui5.oViewPopover) {` && |\n| &&

View File

@ -14,6 +14,11 @@ INTERFACE z2ui5_if_client
cross_app_nav_to_prev_app TYPE string VALUE `CROSS_APP_NAV_TO_PREV_APP`, cross_app_nav_to_prev_app TYPE string VALUE `CROSS_APP_NAV_TO_PREV_APP`,
END OF cs_event. END OF cs_event.
CONSTANTS:
BEGIN OF cs_clear,
view TYPE string VALUE `VIEW`,
END OF cs_clear.
CONSTANTS: CONSTANTS:
BEGIN OF cs_view, BEGIN OF cs_view,
main TYPE string VALUE `MAIN`, main TYPE string VALUE `MAIN`,
@ -133,11 +138,15 @@ INTERFACE z2ui5_if_client
METHODS nav_app_leave METHODS nav_app_leave
IMPORTING IMPORTING
app TYPE REF TO z2ui5_if_app. app TYPE REF TO z2ui5_if_app
RETURNING
VALUE(result) TYPE string.
METHODS nav_app_call METHODS nav_app_call
IMPORTING IMPORTING
app TYPE REF TO z2ui5_if_app. app TYPE REF TO z2ui5_if_app
RETURNING
VALUE(result) TYPE string.
METHODS message_box_display METHODS message_box_display
IMPORTING IMPORTING
@ -200,4 +209,8 @@ INTERFACE z2ui5_if_client
IMPORTING IMPORTING
val TYPE data. val TYPE data.
METHODS clear
IMPORTING
val TYPE data.
ENDINTERFACE. ENDINTERFACE.

View File

@ -28,6 +28,7 @@ CLASS z2ui5_cl_fw_app_startup DEFINITION
METHODS z2ui5_on_init. METHODS z2ui5_on_init.
METHODS z2ui5_on_event. METHODS z2ui5_on_event.
METHODS view_display_start. METHODS view_display_start.
METHODS on_event_check.
PROTECTED SECTION. PROTECTED SECTION.
DATA mt_classes TYPE string_table. DATA mt_classes TYPE string_table.
PRIVATE SECTION. PRIVATE SECTION.
@ -142,14 +143,20 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION.
IF mv_check_initialized = abap_false. IF mv_check_initialized = abap_false.
mv_check_initialized = abap_true. mv_check_initialized = abap_true.
z2ui5_on_init( ). z2ui5_on_init( ).
view_display_start( ).
return.
ENDIF. ENDIF.
IF client->get( )-check_on_navigated = abap_true. IF client->get( )-check_on_navigated = abap_true.
TRY. TRY.
DATA(lo_f4) = CAST z2ui5_cl_popup_to_select( client->get_app( client->get( )-s_draft-id_prev_app ) ). 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( ). DATA(ls_result) = lo_f4->result( ).
IF ls_result-check_cancel = abap_false. IF ls_result-check_confirmed = abap_true.
ms_home-classname = mt_classes[ ls_result-index ]. FIELD-SYMBOLS <class> TYPE string.
ASSIGN ls_result-row->* TO <class>.
ms_home-classname = <class>.
view_display_start( ).
return.
ENDIF. ENDIF.
CATCH cx_root. CATCH cx_root.
ENDTRY. ENDTRY.
@ -170,26 +177,10 @@ CLASS z2ui5_cl_fw_app_startup IMPLEMENTATION.
ms_home-btn_event_id = `BUTTON_CHECK`. ms_home-btn_event_id = `BUTTON_CHECK`.
ms_home-btn_icon = `sap-icon://validate`. ms_home-btn_icon = `sap-icon://validate`.
ms_home-class_editable = abap_true. ms_home-class_editable = abap_true.
client->view_model_update( ).
WHEN `BUTTON_CHECK`. WHEN `BUTTON_CHECK`.
TRY. on_event_check( ).
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.
WHEN 'VALUE_HELP'. WHEN 'VALUE_HELP'.
mt_classes = z2ui5_cl_util_func=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` ). 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. mv_check_demo = abap_true.
ENDMETHOD. 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. ENDCLASS.

View File

@ -9,7 +9,7 @@ CLASS z2ui5_cl_popup_error DEFINITION
CLASS-METHODS factory CLASS-METHODS factory
IMPORTING IMPORTING
error TYPE ref to cx_root error TYPE REF TO cx_root
i_title TYPE string DEFAULT `Error View` i_title TYPE string DEFAULT `Error View`
i_icon TYPE string DEFAULT 'sap-icon://question-mark' i_icon TYPE string DEFAULT 'sap-icon://question-mark'
i_button_text TYPE string DEFAULT `OK` i_button_text TYPE string DEFAULT `OK`
@ -36,7 +36,10 @@ CLASS z2ui5_cl_popup_error IMPLEMENTATION.
r_result = NEW #( ). r_result = NEW #( ).
r_result->title = i_title. r_result->title = i_title.
r_result->icon = i_icon. 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. r_result->button_text_confirm = i_button_text.
ENDMETHOD. ENDMETHOD.
@ -50,8 +53,9 @@ CLASS z2ui5_cl_popup_error IMPLEMENTATION.
afterclose = client->_event( 'BUTTON_CONFIRM' ) afterclose = client->_event( 'BUTTON_CONFIRM' )
)->content( )->content(
)->vbox( 'sapUiMediumMargin' )->vbox( 'sapUiMediumMargin'
)->text( question_text * )->text( question_text
)->get_parent( )->get_parent( )->html( question_text
)->get_parent( )->get_parent( )->get_parent(
)->footer( )->overflow_toolbar( )->footer( )->overflow_toolbar(
)->toolbar_spacer( )->toolbar_spacer(
)->button( )->button(
@ -59,6 +63,7 @@ CLASS z2ui5_cl_popup_error IMPLEMENTATION.
press = client->_event( 'BUTTON_CONFIRM' ) press = client->_event( 'BUTTON_CONFIRM' )
type = 'Emphasized' ). type = 'Emphasized' ).
client->clear( client->cs_clear-view ).
client->popup_display( popup->stringify( ) ). client->popup_display( popup->stringify( ) ).
ENDMETHOD. ENDMETHOD.

View File

@ -9,22 +9,23 @@ CLASS z2ui5_cl_popup_file_upload DEFINITION
CLASS-METHODS factory CLASS-METHODS factory
IMPORTING 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_title TYPE string DEFAULT `File Upload`
i_button_text_confirm TYPE string DEFAULT `OK` i_button_text_confirm TYPE string DEFAULT `OK`
i_button_text_cancel TYPE string DEFAULT `Cancel` i_button_text_cancel TYPE string DEFAULT `Cancel`
i_path type string optional i_path TYPE string OPTIONAL
RETURNING RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_file_upload. VALUE(r_result) TYPE REF TO z2ui5_cl_popup_file_upload.
TYPES: TYPES:
BEGIN OF ty_s_result, BEGIN OF ty_s_result,
text TYPE string, value TYPE string,
check_cancel TYPE abap_bool, check_confirmed TYPE abap_bool,
END OF ty_s_result. END OF ty_s_result.
DATA ms_result TYPE ty_s_result. DATA ms_result TYPE ty_s_result.
data mv_path type string. DATA mv_path TYPE string.
data mv_value type string. DATA mv_value TYPE string.
DATA check_confirm_enabled TYPE abap_bool.
METHODS result METHODS result
RETURNING RETURNING
@ -38,14 +39,13 @@ CLASS z2ui5_cl_popup_file_upload DEFINITION
DATA button_text_confirm TYPE string. DATA button_text_confirm TYPE string.
DATA button_text_cancel TYPE string. DATA button_text_cancel TYPE string.
DATA check_initialized TYPE abap_bool. DATA check_initialized TYPE abap_bool.
DATA check_result_confirmed TYPE abap_bool.
METHODS view_display. METHODS view_display.
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
CLASS Z2UI5_CL_POPUP_FILE_UPLOAD IMPLEMENTATION. CLASS z2ui5_cl_popup_file_upload IMPLEMENTATION.
METHOD factory. METHOD factory.
@ -91,6 +91,7 @@ CLASS Z2UI5_CL_POPUP_FILE_UPLOAD IMPLEMENTATION.
)->button( )->button(
text = button_text_confirm text = button_text_confirm
press = client->_event( 'BUTTON_CONFIRM' ) press = client->_event( 'BUTTON_CONFIRM' )
enabled = client->_bind( check_confirm_enabled )
type = 'Emphasized' ). type = 'Emphasized' ).
client->popup_display( popup->stringify( ) ). client->popup_display( popup->stringify( ) ).
@ -109,26 +110,27 @@ CLASS Z2UI5_CL_POPUP_FILE_UPLOAD IMPLEMENTATION.
ENDIF. ENDIF.
CASE client->get( )-event. CASE client->get( )-event.
when `UPLOAD`.
WHEN `UPLOAD`.
SPLIT mv_value AT `;` INTO DATA(lv_dummy) DATA(lv_data). SPLIT mv_value AT `;` INTO DATA(lv_dummy) DATA(lv_data).
SPLIT lv_data AT `,` INTO lv_dummy lv_data. SPLIT lv_data AT `,` INTO lv_dummy lv_data.
DATA(lv_data2) = lcl_utility=>decode_x_base64( lv_data ). DATA(lv_data2) = lcl_utility=>decode_x_base64( lv_data ).
ms_result-text = lcl_utility=>get_string_by_xstring( lv_data2 ). ms_result-value = lcl_utility=>get_string_by_xstring( lv_data2 ).
client->message_box_display( `file uploaded` ). check_confirm_enabled = abap_true.
* client->message_box_display( `file uploaded` ).
CLEAR mv_value. CLEAR mv_value.
CLEAR mv_path. CLEAR mv_path.
client->popup_model_update( ).
WHEN `BUTTON_CONFIRM`. WHEN `BUTTON_CONFIRM`.
check_result_confirmed = abap_true. ms_result-check_confirmed = abap_true.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN `BUTTON_CANCEL`. WHEN `BUTTON_CANCEL`.
check_result_confirmed = abap_false.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
ENDCASE. ENDCASE.

View File

@ -25,7 +25,7 @@ CLASS z2ui5_cl_popup_get_range DEFINITION
TYPES: TYPES:
BEGIN OF ty_s_result, BEGIN OF ty_s_result,
t_range TYPE z2ui5_cl_util_func=>ty_t_range, t_range TYPE z2ui5_cl_util_func=>ty_t_range,
check_cancel TYPE abap_bool, check_confirmed TYPE abap_bool,
END OF ty_s_result. END OF ty_s_result.
DATA ms_result TYPE 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 client TYPE REF TO z2ui5_if_client.
DATA check_initialized TYPE abap_bool. DATA check_initialized TYPE abap_bool.
DATA check_result_confirmed TYPE abap_bool.
METHODS view_display. METHODS view_display.
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
@ -50,6 +49,7 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION.
r_result = NEW #( ). r_result = NEW #( ).
r_result->ms_result-t_range = t_range. r_result->ms_result-t_range = t_range.
INSERT VALUE #( ) INTO TABLE r_result->ms_result-t_range.
ENDMETHOD. ENDMETHOD.
@ -89,8 +89,8 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION.
key = '{N}' key = '{N}'
text = '{N}' text = '{N}'
)->get_parent( )->get_parent(
)->input( value = `{LOW}` )->input( value = `{LOW}` submit = client->_event( 'BUTTON_CONFIRM' )
)->input( value = `{HIGH}` visible = `{= ${OPTION} === 'BT' }` )->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}` ) ) ) )->button( icon = 'sap-icon://decline' type = `Transparent` press = client->_event( val = `POPUP_DELETE` t_arg = VALUE #( ( `${KEY}` ) ) )
). ).
@ -138,6 +138,9 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION.
CLEAR ms_result-t_range. CLEAR ms_result-t_range.
LOOP AT mt_filter REFERENCE INTO DATA(lr_filter). 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 #( INSERT VALUE #(
sign = `I` sign = `I`
option = lr_filter->option option = lr_filter->option
@ -146,13 +149,11 @@ CLASS z2ui5_cl_popup_get_range IMPLEMENTATION.
) INTO TABLE ms_result-t_range. ) INTO TABLE ms_result-t_range.
ENDLOOP. ENDLOOP.
check_result_confirmed = abap_true. ms_result-check_confirmed = abap_true.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN `BUTTON_CANCEL`. WHEN `BUTTON_CANCEL`.
check_result_confirmed = abap_false.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).

View File

@ -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(<tab>).
<tab>-t_range = lo_popup->result( )-t_range.
<tab>-t_token = z2ui5_cl_util_func=>get_token_t_by_range_t( <tab>-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 <tab>.
CLEAR <tab>-t_token.
CLEAR <tab>-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.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_POPUP_GET_RANGE_MULTI</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>ui - popup get range multi</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -21,7 +21,7 @@ CLASS z2ui5_cl_popup_input_value DEFINITION
TYPES: TYPES:
BEGIN OF ty_s_result, BEGIN OF ty_s_result,
value TYPE string, value TYPE string,
check_cancel TYPE abap_bool, check_confirmed TYPE abap_bool,
END OF ty_s_result. END OF ty_s_result.
DATA ms_result TYPE ty_s_result. DATA ms_result TYPE ty_s_result.

View File

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

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_POPUP_LAYOUT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>ui - popup layout</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -19,7 +19,7 @@ CLASS z2ui5_cl_popup_pdf DEFINITION
TYPES: TYPES:
BEGIN OF ty_s_result, BEGIN OF ty_s_result,
text TYPE string, text TYPE string,
check_cancel TYPE abap_bool, check_confirmed TYPE abap_bool,
END OF ty_s_result. END OF ty_s_result.
DATA ms_result TYPE ty_s_result. DATA ms_result TYPE ty_s_result.

View File

@ -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 <tab_out> TYPE STANDARD TABLE.
ASSIGN mr_tab->* TO <tab_out>.
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( <tab_out> ) ).
* )->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( <tab_out> ).
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 <tab> TYPE any.
ASSIGN r_result->mr_tab->* TO <tab>.
<tab> = 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.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_POPUP_TABLE</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>ui - popup table</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -20,7 +20,7 @@ CLASS z2ui5_cl_popup_textedit DEFINITION
TYPES: TYPES:
BEGIN OF ty_s_result, BEGIN OF ty_s_result,
text TYPE string, text TYPE string,
check_cancel TYPE abap_bool, check_confirmed TYPE abap_bool,
END OF ty_s_result. END OF ty_s_result.
DATA ms_result TYPE ty_s_result. DATA ms_result TYPE ty_s_result.
@ -87,11 +87,11 @@ CLASS z2ui5_cl_popup_textedit IMPLEMENTATION.
CASE client->get( )-event. CASE client->get( )-event.
WHEN `BUTTON_TEXTAREA_CONFIRM`. WHEN `BUTTON_TEXTAREA_CONFIRM`.
ms_result-check_confirmed = abap_true.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).
WHEN `BUTTON_TEXTAREA_CANCEL`. WHEN `BUTTON_TEXTAREA_CANCEL`.
ms_result-check_cancel = abap_true.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).

View File

@ -50,6 +50,7 @@ CLASS Z2UI5_CL_POPUP_TO_CONFIRM IMPLEMENTATION.
METHOD factory. METHOD factory.
r_result = new #( ). r_result = new #( ).
* r_result->z2ui5_if_app~id = z2ui5_cl_util_func=>func_get_uuid_22( ).
r_result->title = i_title. r_result->title = i_title.
r_result->icon = i_icon. r_result->icon = i_icon.
r_result->question_text = i_question_text. r_result->question_text = i_question_text.

View File

@ -8,14 +8,14 @@ CLASS z2ui5_cl_popup_to_select DEFINITION
CLASS-METHODS factory CLASS-METHODS factory
IMPORTING IMPORTING
i_tab TYPE data i_tab TYPE STANDARD TABLE
RETURNING RETURNING
VALUE(r_result) TYPE REF TO z2ui5_cl_popup_to_select. VALUE(r_result) TYPE REF TO z2ui5_cl_popup_to_select.
TYPES: TYPES:
BEGIN OF ty_s_result, BEGIN OF ty_s_result,
index TYPE i, row TYPE REF TO data,
check_cancel TYPE abap_bool, check_confirmed TYPE abap_bool,
END OF ty_s_result. END OF ty_s_result.
DATA ms_result TYPE ty_s_result. DATA ms_result TYPE ty_s_result.
@ -29,6 +29,7 @@ CLASS z2ui5_cl_popup_to_select DEFINITION
PROTECTED SECTION. PROTECTED SECTION.
DATA check_initialized TYPE abap_bool. DATA check_initialized TYPE abap_bool.
DATA check_table_line TYPE abap_bool.
DATA client TYPE REF TO z2ui5_if_client. DATA client TYPE REF TO z2ui5_if_client.
METHODS on_event. METHODS on_event.
METHODS display. METHODS display.
@ -37,7 +38,6 @@ CLASS z2ui5_cl_popup_to_select DEFINITION
METHODS on_event_search. METHODS on_event_search.
PRIVATE SECTION. PRIVATE SECTION.
DATA lv_check_table_line TYPE abap_bool.
ENDCLASS. ENDCLASS.
@ -48,6 +48,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
r_result = NEW #( ). r_result = NEW #( ).
CREATE DATA r_result->mr_tab LIKE i_tab. CREATE DATA r_result->mr_tab LIKE i_tab.
CREATE DATA r_result->ms_result-row LIKE LINE OF i_tab.
FIELD-SYMBOLS <tab> TYPE any. FIELD-SYMBOLS <tab> TYPE any.
ASSIGN r_result->mr_tab->* TO <tab>. ASSIGN r_result->mr_tab->* TO <tab>.
<tab> = i_tab. <tab> = i_tab.
@ -108,10 +109,10 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
CASE client->get( )-event. CASE client->get( )-event.
WHEN 'CONFIRM'. WHEN 'CONFIRM'.
ms_result-check_confirmed = abap_true.
on_event_confirm( ). on_event_confirm( ).
WHEN 'CANCEL'. WHEN 'CANCEL'.
ms_result-check_cancel = abap_true.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). 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(lo_struct) = CAST cl_abap_structdescr( lo_table->get_table_line_type( ) ).
DATA(lt_comp) = lo_struct->get_components( ). DATA(lt_comp) = lo_struct->get_components( ).
CATCH cx_root. 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( ) ). 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. INSERT VALUE #( name = 'TAB_LINE' type = CAST #( lo_elem ) ) INTO TABLE lt_comp.
ENDTRY. ENDTRY.
@ -164,7 +165,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
DATA lr_row TYPE REF TO data. DATA lr_row TYPE REF TO data.
CREATE DATA lr_row LIKE LINE OF <tab_out>. CREATE DATA lr_row LIKE LINE OF <tab_out>.
ASSIGN lr_row->* TO <row2>. ASSIGN lr_row->* TO <row2>.
IF lv_check_table_line = abap_true. IF check_table_line = abap_true.
ASSIGN lr_row->('TAB_LINE') TO <field>. ASSIGN lr_row->('TAB_LINE') TO <field>.
<field> = <row>. <field> = <row>.
ELSE. ELSE.
@ -182,17 +183,30 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
METHOD on_event_confirm. METHOD on_event_confirm.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE. FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
FIELD-SYMBOLS <row> TYPE any. FIELD-SYMBOLS <row_selected> TYPE any.
FIELD-SYMBOLS <field> TYPE any. FIELD-SYMBOLS <selkz> TYPE any.
ASSIGN mr_tab_popup->* TO <tab>. ASSIGN mr_tab_popup->* TO <tab>.
LOOP AT <tab> ASSIGNING <row>.
DATA(lv_tabix) = sy-tabix. LOOP AT <tab> ASSIGNING <row_selected>.
ASSIGN ('<row>-ZZSELKZ') TO <field>.
IF <field> = abap_true. ASSIGN ('<ROW_SELECTED>-ZZSELKZ') TO <selkz>.
ms_result-index = lv_tabix. IF <selkz> = abap_false.
EXIT. CONTINUE.
ENDIF. ENDIF.
FIELD-SYMBOLS <row_result> TYPE any.
ASSIGN ms_result-row->* TO <row_result>.
IF check_table_line = abap_true.
FIELD-SYMBOLS <table_line_selected> TYPE any.
ASSIGN ('<ROW_SELECTED>-TAB_LINE') TO <table_line_selected>.
<row_result> = <table_line_selected>.
ELSE.
<row_result> = CORRESPONDING #( <row_selected> ).
ENDIF.
EXIT.
ENDLOOP. ENDLOOP.
client->popup_destroy( ). client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).

View File

@ -264,6 +264,7 @@ public section.
importing importing
!UNIT type CLIKE optional !UNIT type CLIKE optional
!FOOTERCOLOR type CLIKE optional !FOOTERCOLOR type CLIKE optional
!blocked type CLIKE optional
!FRAMETYPE type CLIKE optional !FRAMETYPE type CLIKE optional
!PRIORITY type CLIKE optional !PRIORITY type CLIKE optional
!PRIORITYTEXT type CLIKE optional !PRIORITYTEXT type CLIKE optional
@ -6757,6 +6758,7 @@ ENDMETHOD.
t_prop = VALUE #( t_prop = VALUE #(
( n = `unit` v = unit ) ( n = `unit` v = unit )
( n = `footerColor` v = footerColor ) ( n = `footerColor` v = footerColor )
( n = `blocked` v = z2ui5_cl_util_func=>boolean_abap_2_json( blocked ) )
( n = `frameType` v = frameType ) ( n = `frameType` v = frameType )
( n = `priority` v = priority ) ( n = `priority` v = priority )
( n = `priorityText` v = priorityText ) ( n = `priorityText` v = priorityText )

View File

@ -1,7 +1,8 @@
INTERFACE z2ui5_if_app PUBLIC. INTERFACE z2ui5_if_app PUBLIC.
INTERFACES if_serializable_object. INTERFACES if_serializable_object.
DATA id TYPE string. DATA id_draft TYPE string.
DATA id_app TYPE string.
METHODS main METHODS main
IMPORTING IMPORTING