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,
"names_no_dash": true,
"nesting": {
"depth": 5
"depth": 7
},
"newline_between_methods": false,
"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_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 <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.
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) = `<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
EXPORTING
@ -966,6 +1252,25 @@ CLASS z2ui5_cl_util_func IMPLEMENTATION.
pretty_name = pretty_name
IMPORTING
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.
<comp> = <ls_data_ui5>.
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 <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.

View File

@ -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 <ele> TYPE any.
FIELD-SYMBOLS <row> 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 <row>.
DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( <row> ).
@ -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 ) ) && '/' && <comp>-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.

View File

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

View File

@ -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 <ref> TYPE any.
DATA(lv_assign) = 'LO_APP->' && lr_attri->name.
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(
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( <deref_attri> ).
lr_attri->data_rtti = z2ui5_cl_util_func=>rtti_xml_get_by_data( <deref_attri> ).
CLEAR <deref_attri>.
CLEAR <attri>.
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( ) && `<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.

View File

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

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`,
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.

View File

@ -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 <class> TYPE string.
ASSIGN ls_result-row->* TO <class>.
ms_home-classname = <class>.
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.

View File

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

View File

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

View File

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

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

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

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

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

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

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

View File

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

View File

@ -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 <tab> TYPE any.
ASSIGN r_result->mr_tab->* TO <tab>.
<tab> = 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 <tab_out>.
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>.
<field> = <row>.
ELSE.
@ -182,17 +183,30 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION.
METHOD on_event_confirm.
FIELD-SYMBOLS <tab> TYPE STANDARD TABLE.
FIELD-SYMBOLS <row> TYPE any.
FIELD-SYMBOLS <field> TYPE any.
FIELD-SYMBOLS <row_selected> TYPE any.
FIELD-SYMBOLS <selkz> TYPE any.
ASSIGN mr_tab_popup->* TO <tab>.
LOOP AT <tab> ASSIGNING <row>.
DATA(lv_tabix) = sy-tabix.
ASSIGN ('<row>-ZZSELKZ') TO <field>.
IF <field> = abap_true.
ms_result-index = lv_tabix.
EXIT.
LOOP AT <tab> ASSIGNING <row_selected>.
ASSIGN ('<ROW_SELECTED>-ZZSELKZ') TO <selkz>.
IF <selkz> = abap_false.
CONTINUE.
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.
client->popup_destroy( ).
client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ).

View File

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

View File

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