From 2f2816e2387b3f5b47784df93c95d39b5dc94fbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCnter?= Date: Wed, 31 Jan 2024 17:16:42 +0100 Subject: [PATCH] improve POPUP_TO_SELECT (#825) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * improve POPUP_TO_SELECT * add-search-app (#824) * add-search-app * Update src/02/02/z2ui5_cl_app_search_apps.clas.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> * update abaplint fixes * update startup app * update * update * update * update * update --------- Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> * Popup json download (#828) * popup json download * lint fixes * update * update startup app * lint fixes * steampunk compatibility * Steampunkify * fixup * fixup * Update src/01/01/z2ui5_cl_util_func.clas.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> * fixup --------- Co-authored-by: Christian Günter Co-authored-by: oblomov <102328295+oblomov-dev@users.noreply.github.com> Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> --- src/01/01/z2ui5_cl_util_func.clas.abap | 99 ++++++++++++++++++++ src/02/03/z2ui5_cl_popup_to_select.clas.abap | 12 ++- 2 files changed, 110 insertions(+), 1 deletion(-) diff --git a/src/01/01/z2ui5_cl_util_func.clas.abap b/src/01/01/z2ui5_cl_util_func.clas.abap index 3360bccf..74596414 100644 --- a/src/01/01/z2ui5_cl_util_func.clas.abap +++ b/src/01/01/z2ui5_cl_util_func.clas.abap @@ -30,6 +30,14 @@ CLASS z2ui5_cl_util_func DEFINITION table TYPE string, END OF ty_s_sql_result. + TYPES: + BEGIN OF ty_data_element_texts, + header TYPE string, + short TYPE string, + medium TYPE string, + long TYPE string, + END OF ty_data_element_texts. + CLASS-METHODS itab_get_itab_by_csv IMPORTING val TYPE string @@ -394,6 +402,12 @@ CLASS z2ui5_cl_util_func DEFINITION RETURNING VALUE(result) TYPE string. + CLASS-METHODS rtti_get_data_element_texts + IMPORTING + i_data_element_name TYPE string + RETURNING + VALUE(result) TYPE ty_data_element_texts. + PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. @@ -1680,4 +1694,89 @@ CLASS Z2UI5_CL_UTIL_FUNC IMPLEMENTATION. RAISE EXCEPTION TYPE z2ui5_cx_util_error EXPORTING val = v. ENDMETHOD. + + + METHOD rtti_get_data_element_texts. + + DATA: + data_element_name TYPE c LENGTH 30, + ddic_ref TYPE REF TO data, + data_element TYPE REF TO object, + content TYPE REF TO object, + BEGIN OF ddic, + reptext TYPE string, + scrtext_s TYPE string, + scrtext_m TYPE string, + scrtext_l TYPE string, + END OF ddic, + exists TYPE abap_bool. + + data_element_name = i_data_element_name. + + TRY. + cl_abap_typedescr=>describe_by_name( 'T100' ). + + DATA(struct_desrc) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_name( 'DFIES' ) ). + + CREATE DATA ddic_ref TYPE HANDLE struct_desrc. + ASSIGN ddic_ref->* TO FIELD-SYMBOL(). + ASSERT sy-subrc = 0. + + DATA(data_descr) = CAST cl_abap_datadescr( cl_abap_elemdescr=>describe_by_name( data_element_name ) ). + + CALL METHOD data_descr->('GET_DDIC_FIELD') + RECEIVING + p_flddescr = + EXCEPTIONS + not_found = 1 + no_ddic_type = 2 + OTHERS = 3. + IF sy-subrc <> 0. + RETURN. + ENDIF. + + ddic = CORRESPONDING #( ). + result-header = ddic-reptext. + result-short = ddic-scrtext_s. + result-medium = ddic-scrtext_m. + result-long = ddic-scrtext_l. + + CATCH cx_root. + CALL METHOD ('XCO_CP_ABAP_DICTIONARY')=>('DATA_ELEMENT') + EXPORTING + iv_name = data_element_name + RECEIVING + ro_data_element = data_element. + + CALL METHOD data_element->('IF_XCO_AD_DATA_ELEMENT~EXISTS') + RECEIVING + rv_exists = exists. + + IF exists = abap_false. + RETURN. + ENDIF. + + CALL METHOD data_element->('IF_XCO_AD_DATA_ELEMENT~CONTENT') + RECEIVING + ro_content = content. + + CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_HEADING_FIELD_LABEL') + RECEIVING + rs_heading_field_label = result-header. + + CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_SHORT_FIELD_LABEL') + RECEIVING + rs_short_field_label = result-short. + + CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_MEDIUM_FIELD_LABEL') + RECEIVING + rs_medium_field_label = result-medium. + + CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_LONG_FIELD_LABEL') + RECEIVING + rs_long_field_label = result-long. + + ENDTRY. + + ENDMETHOD. ENDCLASS. diff --git a/src/02/03/z2ui5_cl_popup_to_select.clas.abap b/src/02/03/z2ui5_cl_popup_to_select.clas.abap index 0975b1e3..6879f595 100644 --- a/src/02/03/z2ui5_cl_popup_to_select.clas.abap +++ b/src/02/03/z2ui5_cl_popup_to_select.clas.abap @@ -9,6 +9,7 @@ CLASS z2ui5_cl_popup_to_select DEFINITION CLASS-METHODS factory IMPORTING i_tab TYPE STANDARD TABLE + i_title TYPE clike OPTIONAL RETURNING VALUE(r_result) TYPE REF TO z2ui5_cl_popup_to_select. @@ -31,6 +32,7 @@ CLASS z2ui5_cl_popup_to_select DEFINITION DATA check_initialized TYPE abap_bool. DATA check_table_line TYPE abap_bool. DATA client TYPE REF TO z2ui5_if_client. + DATA title TYPE string. METHODS on_event. METHODS display. METHODS set_output_table. @@ -47,6 +49,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION. METHOD factory. r_result = NEW #( ). + r_result->title = i_title. CREATE DATA r_result->mr_tab LIKE i_tab. CREATE DATA r_result->ms_result-row LIKE LINE OF i_tab. FIELD-SYMBOLS TYPE any. @@ -67,6 +70,7 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION. search = client->_event( val = 'SEARCH' t_arg = VALUE #( ( `${$parameters>/value}` ) ( `${$parameters>/clearButtonPressed}` ) ) ) confirm = client->_event( val = 'CONFIRM' t_arg = VALUE #( ( `${$parameters>/selectedContexts[0]/sPath}` ) ) ) growing = abap_true + title = title ). DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_data( ). @@ -81,7 +85,13 @@ CLASS z2ui5_cl_popup_to_select IMPLEMENTATION. DATA(columns) = tab->columns( ). LOOP AT lt_comp INTO ls_comp. - columns->column( width = '8rem' )->header( ns = `` )->text( text = ls_comp-name ). + DATA(text) = COND #( + LET data_element_name = substring_after( val = CAST cl_abap_elemdescr( ls_comp-type )->absolute_name sub = '\TYPE=' ) + medium_label = z2ui5_cl_util_func=>rtti_get_data_element_texts( data_element_name )-medium IN + WHEN medium_label IS NOT INITIAL + THEN medium_label + ELSE ls_comp-name ). + columns->column( width = '8rem' )->header( ns = `` )->text( text = text ). ENDLOOP. client->popup_display( popup->stringify( ) ).