From 5521615b01d569a57dfed6d31c312280e74c1a59 Mon Sep 17 00:00:00 2001 From: choper725 <129428114+choper725@users.noreply.github.com> Date: Fri, 1 Sep 2023 10:28:59 +0300 Subject: [PATCH] dynamic generate shlp dialog (#520) * dynamic generate shlp dialog a first take on dynamic generate shlp dialog * Update src/z2ui5_cl_xml_view.clas.abap Co-authored-by: Lars Hvam * abaplint fixes * abaplint fixes --------- Co-authored-by: Lars Hvam Co-authored-by: oblomov <102328295+oblomov-dev@users.noreply.github.com> --- src/z2ui5_cl_xml_view.clas.abap | 294 ++++++++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) diff --git a/src/z2ui5_cl_xml_view.clas.abap b/src/z2ui5_cl_xml_view.clas.abap index e7a90a23..51aede0e 100644 --- a/src/z2ui5_cl_xml_view.clas.abap +++ b/src/z2ui5_cl_xml_view.clas.abap @@ -1914,6 +1914,21 @@ RETURNING VALUE(result) TYPE REF TO z2ui5_cl_xml_view. + + METHODS generate_ddic_shlp + IMPORTING + !irparent TYPE REF TO Z2UI5_CL_XML_VIEW + !resultitabname TYPE clike OPTIONAL + !shlpfieldsstrucname TYPE clike OPTIONAL + !irclient TYPE REF TO z2ui5_if_client OPTIONAL + !resultitabevent TYPE clike OPTIONAL + !closebuttontext TYPE clike OPTIONAL + !searchbuttontext TYPE clike OPTIONAL + !searchevent TYPE clike OPTIONAL + !isshlp TYPE any OPTIONAL + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_xml_view. + PROTECTED SECTION. DATA mv_name TYPE string. @@ -2822,6 +2837,285 @@ CLASS Z2UI5_CL_XML_VIEW IMPLEMENTATION. ENDMETHOD. + METHOD generate_ddic_shlp. + + TYPES: + BEGIN OF ty_ddshfprop, + fieldname(30) TYPE c, + shlpinput(1) TYPE c, + shlpoutput(1) TYPE c, + shlpselpos(2) TYPE n, + shlplispos(2) TYPE n, + shlpseldis(1) TYPE c, + defaultval(21) TYPE c, + END OF ty_ddshfprop. + + TYPES: + BEGIN OF ty_ddfields, + tabname(30) TYPE c, + fieldname(30) TYPE c, + langu(1) TYPE c, + position(4) TYPE n, + offset(6) TYPE n, + domname(30) TYPE c, + rollname(30) TYPE c, + checktable(30) TYPE c, + leng(6) TYPE n, + intlen(6) TYPE n, + outputlen(6) TYPE n, + decimals(6) TYPE n, + datatype(4) TYPE c, + inttype(1) TYPE c, + reftable(30) TYPE c, + reffield(30) TYPE c, + precfield(30) TYPE c, + authorid(3) TYPE c, + memoryid(20) TYPE c, + logflag(1) TYPE c, + mask(20) TYPE c, + masklen(4) TYPE n, + convexit(5) TYPE c, + headlen(2) TYPE n, + scrlen1(2) TYPE n, + scrlen2(2) TYPE n, + scrlen3(2) TYPE n, + fieldtext(60) TYPE c, + reptext(55) TYPE c, + scrtext_s(10) TYPE c, + scrtext_m(20) TYPE c, + scrtext_l(40) TYPE c, + keyflag(1) TYPE c, + lowercase(1) TYPE c, + mac(1) TYPE c, + genkey(1) TYPE c, + noforkey(1) TYPE c, + valexi(1) TYPE c, + noauthch(1) TYPE c, + sign(1) TYPE c, + dynpfld(1) TYPE c, + f4availabl(1) TYPE c, + comptype(1) TYPE c, + lfieldname(132) TYPE c, + ltrflddis(1) TYPE c, + bidictrlc(1) TYPE c, + outputstyle(2) TYPE n, + nohistory(1) TYPE c, + ampmformat(1) TYPE c, + END OF ty_ddfields. + + DATA: lv_grid_form_no TYPE i, + lt_arg TYPE STANDARD TABLE OF string WITH EMPTY KEY, + lv_arg_fieldname TYPE string, + lv_cell_fieldname TYPE string, + lv_path_result_itab TYPE string, + lv_path_shlp_fields TYPE string, + lt_fieldprop_sel TYPE STANDARD TABLE OF ty_ddshfprop WITH EMPTY KEY, + lt_fieldprop_lis TYPE STANDARD TABLE OF ty_ddshfprop WITH EMPTY KEY, + lt_ddffields TYPE STANDARD TABLE OF ty_ddfields WITH EMPTY KEY. + + FIELD-SYMBOLS: + TYPE ANY TABLE, + TYPE any, + TYPE any. + +* ---------- Get result itab reference ------------------------------------------------------------ + lv_path_result_itab = 'IRCONTROLLER->' && resultitabname. + ASSIGN (lv_path_result_itab) TO . +* ---------- Get searchhelp input fields structure reference -------------------------------------- + lv_path_shlp_fields = 'IRCONTROLLER->' && shlpfieldsstrucname. + ASSIGN (lv_path_shlp_fields) TO . + + IF IS NOT ASSIGNED OR + IS NOT ASSIGNED. + RETURN. + ENDIF. + + IF isshlp IS INITIAL. + RETURN. + ELSE. + ASSIGN COMPONENT 'FIELDPROP' OF STRUCTURE isshlp TO FIELD-SYMBOL(). + IF IS NOT ASSIGNED. + RETURN. + ENDIF. + ENDIF. + +* ---------- Set Selection and List properties ---------------------------------------------------- + lt_fieldprop_sel = . + lt_fieldprop_lis = . + DELETE lt_fieldprop_sel WHERE shlpselpos IS INITIAL. + DELETE lt_fieldprop_lis WHERE shlplispos IS INITIAL. + SORT lt_fieldprop_sel BY shlpselpos. + SORT lt_fieldprop_lis BY shlplispos. + + ASSIGN COMPONENT 'FIELDDESCR' OF STRUCTURE isshlp TO FIELD-SYMBOL(). + IF IS NOT ASSIGNED. + RETURN. + ENDIF. + lt_ddffields = . + +* ------------------------------------------------------------------------------------------------- +*Searchfield Grid +* ------------------------------------------------------------------------------------------------- + DATA(lr_grid_shlp) = irparent->content( )->toolbar( )->toolbar_spacer( + )->button( text = searchbuttontext + type = 'Emphasized' + press = irclient->_event( searchevent ) )->get_parent( + )->grid( 'L3 M3 S3' )->content( 'layout' ). + +* ---------- Create 4 forms (grid columns) -------------------------------------------------------- + DATA(lr_form_shlp_1) = lr_grid_shlp->simple_form( )->content( 'form' ). + DATA(lr_form_shlp_2) = lr_grid_shlp->simple_form( )->content( 'form' ). + DATA(lr_form_shlp_3) = lr_grid_shlp->simple_form( )->content( 'form' ). + DATA(lr_form_shlp_4) = lr_grid_shlp->simple_form( )->content( 'form' ). + + LOOP AT lt_fieldprop_sel ASSIGNING FIELD-SYMBOL(). +* ---------- Init loop data ----------------------------------------------------------------------- + UNASSIGN: . +* ---------- Get corresponding field description -------------------------------------------------- + ASSIGN lt_ddffields[ fieldname = -fieldname ] TO FIELD-SYMBOL(). + + IF IS NOT ASSIGNED. + CONTINUE. + ENDIF. + +* ---------- Get field reference ------------------------------------------------------------------ + ASSIGN COMPONENT -fieldname OF STRUCTURE TO . + IF IS NOT ASSIGNED. + CONTINUE. + ENDIF. + +* ---------- Determine grid form number ----------------------------------------------------------- + IF lv_grid_form_no IS INITIAL. + lv_grid_form_no = 1. + ELSEIF lv_grid_form_no = 4. + lv_grid_form_no = 1. + ELSE. + lv_grid_form_no = lv_grid_form_no + 1. + ENDIF. + + CASE lv_grid_form_no. + WHEN 1. +* ---------- Grid 1-------------------------------------------------------------------------------- +* ---------- Set field label ---------------------------------------------------------------------- + lr_form_shlp_1->label( -scrtext_l ). + +* ---------- Set input field ---------------------------------------------------------------------- + CASE -datatype. + WHEN 'DATS'. + lr_form_shlp_1->date_picker( value = irclient->_bind_edit( ) ). + WHEN 'TIMS'. + lr_form_shlp_1->time_picker( value = irclient->_bind_edit( ) ). + WHEN OTHERS. + lr_form_shlp_1->input( value = irclient->_bind_edit( ) ). + ENDCASE. + + WHEN 2. +* ---------- Grid 2-------------------------------------------------------------------------------- +* ---------- Set field label ---------------------------------------------------------------------- + lr_form_shlp_2->label( -rollname ). + +* ---------- Set input field ---------------------------------------------------------------------- + CASE -datatype. + WHEN 'DATS'. + lr_form_shlp_2->date_picker( value = irclient->_bind_edit( ) ). + WHEN 'TIMS'. + lr_form_shlp_2->time_picker( value = irclient->_bind_edit( ) ). + WHEN OTHERS. + lr_form_shlp_2->input( value = irclient->_bind_edit( ) ). + ENDCASE. + + WHEN 3. +* ---------- Grid 3-------------------------------------------------------------------------------- +* ---------- Set field label ---------------------------------------------------------------------- + lr_form_shlp_3->label( -rollname ). + +* ---------- Set input field ---------------------------------------------------------------------- + CASE -datatype. + WHEN 'DATS'. + lr_form_shlp_3->date_picker( value = irclient->_bind_edit( ) ). + WHEN 'TIMS'. + lr_form_shlp_3->time_picker( value = irclient->_bind_edit( ) ). + WHEN OTHERS. + lr_form_shlp_3->input( value = irclient->_bind_edit( ) ). + ENDCASE. + + WHEN 4. +* ---------- Grid 4-------------------------------------------------------------------------------- +* ---------- Set field label ---------------------------------------------------------------------- + lr_form_shlp_4->label( -rollname ). + +* ---------- Set input field ---------------------------------------------------------------------- + CASE -datatype. + WHEN 'DATS'. + lr_form_shlp_4->date_picker( value = irclient->_bind_edit( ) ). + WHEN 'TIMS'. + lr_form_shlp_4->time_picker( value = irclient->_bind_edit( ) ). + WHEN OTHERS. + lr_form_shlp_4->input( value = irclient->_bind_edit( ) ). + ENDCASE. + + ENDCASE. + + UNASSIGN . + + ENDLOOP. + +* ---------- Create table ------------------------------------------------------------------------- + DATA(lr_table) = irparent->table( items = irclient->_bind_edit( ) ). +* ---------- Create Columns ----------------------------------------------------------------------- + DATA(lr_columns) = lr_table->columns( ). + +* ---------- Set column --------------------------------------------------------------------------- + LOOP AT lt_fieldprop_lis ASSIGNING FIELD-SYMBOL(). +* ---------- Init loop data ----------------------------------------------------------------------- + UNASSIGN: . + +* ---------- Get corresponding field description -------------------------------------------------- + ASSIGN lt_ddffields[ fieldname = -fieldname ] TO . + IF IS NOT ASSIGNED. + CONTINUE. + ENDIF. + + lr_columns->column( )->text( -rollname ). + ENDLOOP. + +* ---------- Build export parameter list ---------------------------------------------------------- + LOOP AT lt_fieldprop_lis ASSIGNING WHERE shlpoutput = abap_true. +* ---------- Init loop data ----------------------------------------------------------------------- + CLEAR: lv_arg_fieldname. + +* ---------- Build parameter name ----------------------------------------------------------------- + lv_arg_fieldname = `${` && -fieldname && `}`. + +* ---------- Collect output fields ---------------------------------------------------------------- + APPEND lv_arg_fieldname TO lt_arg. + ENDLOOP. + + DATA(lr_item) = lr_table->items( + )->column_list_item( type = 'Navigation' press = irclient->_event( val = resultitabevent + t_arg = lt_arg ) ). + +* ---------- Set cell content --------------------------------------------------------------------- + LOOP AT lt_fieldprop_lis ASSIGNING . +* ---------- Init loop data ----------------------------------------------------------------------- + CLEAR: lv_cell_fieldname. + +* ---------- Build cell name ---------------------------------------------------------------------- + lv_cell_fieldname = `{` && -fieldname && `}`. + lr_item->cells( )->text( lv_cell_fieldname ). + + ENDLOOP. + + lr_grid_shlp = irparent->buttons( )->button( + text = closebuttontext + press = irclient->_event_client( irclient->cs_event-popup_close ) ). + + + result = lr_grid_shlp. + + ENDMETHOD. + + METHOD generic_tag. result = _generic( name = `GenericTag`