mirror of
https://github.com/abap2UI5/abap2UI5.git
synced 2025-04-30 11:19:15 +08:00
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 <larshp@hotmail.com> * abaplint fixes * abaplint fixes --------- Co-authored-by: Lars Hvam <larshp@hotmail.com> Co-authored-by: oblomov <102328295+oblomov-dev@users.noreply.github.com>
This commit is contained in:
parent
6951a7fe5f
commit
5521615b01
|
@ -1914,6 +1914,21 @@
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(result) TYPE REF TO z2ui5_cl_xml_view.
|
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.
|
PROTECTED SECTION.
|
||||||
|
|
||||||
DATA mv_name TYPE string.
|
DATA mv_name TYPE string.
|
||||||
|
@ -2822,6 +2837,285 @@ CLASS Z2UI5_CL_XML_VIEW IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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:
|
||||||
|
<lt_result_itab> TYPE ANY TABLE,
|
||||||
|
<ls_shlp_fields> TYPE any,
|
||||||
|
<lv_field> TYPE any.
|
||||||
|
|
||||||
|
* ---------- Get result itab reference ------------------------------------------------------------
|
||||||
|
lv_path_result_itab = 'IRCONTROLLER->' && resultitabname.
|
||||||
|
ASSIGN (lv_path_result_itab) TO <lt_result_itab>.
|
||||||
|
* ---------- Get searchhelp input fields structure reference --------------------------------------
|
||||||
|
lv_path_shlp_fields = 'IRCONTROLLER->' && shlpfieldsstrucname.
|
||||||
|
ASSIGN (lv_path_shlp_fields) TO <ls_shlp_fields>.
|
||||||
|
|
||||||
|
IF <lt_result_itab> IS NOT ASSIGNED OR
|
||||||
|
<ls_shlp_fields> IS NOT ASSIGNED.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF isshlp IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ELSE.
|
||||||
|
ASSIGN COMPONENT 'FIELDPROP' OF STRUCTURE isshlp TO FIELD-SYMBOL(<fs_fieldprop>).
|
||||||
|
IF <fs_fieldprop> IS NOT ASSIGNED.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
* ---------- Set Selection and List properties ----------------------------------------------------
|
||||||
|
lt_fieldprop_sel = <fs_fieldprop>.
|
||||||
|
lt_fieldprop_lis = <fs_fieldprop>.
|
||||||
|
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(<fs_isshlp_fielddescr>).
|
||||||
|
IF <fs_isshlp_fielddescr> IS NOT ASSIGNED.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
lt_ddffields = <fs_isshlp_fielddescr>.
|
||||||
|
|
||||||
|
* -------------------------------------------------------------------------------------------------
|
||||||
|
*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(<ls_fieldprop_sel>).
|
||||||
|
* ---------- Init loop data -----------------------------------------------------------------------
|
||||||
|
UNASSIGN: <lv_field>.
|
||||||
|
* ---------- Get corresponding field description --------------------------------------------------
|
||||||
|
ASSIGN lt_ddffields[ fieldname = <ls_fieldprop_sel>-fieldname ] TO FIELD-SYMBOL(<ls_fielddescr>).
|
||||||
|
|
||||||
|
IF <ls_fielddescr> IS NOT ASSIGNED.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
* ---------- Get field reference ------------------------------------------------------------------
|
||||||
|
ASSIGN COMPONENT <ls_fielddescr>-fieldname OF STRUCTURE <ls_shlp_fields> TO <lv_field>.
|
||||||
|
IF <lv_field> 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( <ls_fielddescr>-scrtext_l ).
|
||||||
|
|
||||||
|
* ---------- Set input field ----------------------------------------------------------------------
|
||||||
|
CASE <ls_fielddescr>-datatype.
|
||||||
|
WHEN 'DATS'.
|
||||||
|
lr_form_shlp_1->date_picker( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
WHEN 'TIMS'.
|
||||||
|
lr_form_shlp_1->time_picker( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
lr_form_shlp_1->input( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
WHEN 2.
|
||||||
|
* ---------- Grid 2--------------------------------------------------------------------------------
|
||||||
|
* ---------- Set field label ----------------------------------------------------------------------
|
||||||
|
lr_form_shlp_2->label( <ls_fielddescr>-rollname ).
|
||||||
|
|
||||||
|
* ---------- Set input field ----------------------------------------------------------------------
|
||||||
|
CASE <ls_fielddescr>-datatype.
|
||||||
|
WHEN 'DATS'.
|
||||||
|
lr_form_shlp_2->date_picker( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
WHEN 'TIMS'.
|
||||||
|
lr_form_shlp_2->time_picker( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
lr_form_shlp_2->input( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
WHEN 3.
|
||||||
|
* ---------- Grid 3--------------------------------------------------------------------------------
|
||||||
|
* ---------- Set field label ----------------------------------------------------------------------
|
||||||
|
lr_form_shlp_3->label( <ls_fielddescr>-rollname ).
|
||||||
|
|
||||||
|
* ---------- Set input field ----------------------------------------------------------------------
|
||||||
|
CASE <ls_fielddescr>-datatype.
|
||||||
|
WHEN 'DATS'.
|
||||||
|
lr_form_shlp_3->date_picker( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
WHEN 'TIMS'.
|
||||||
|
lr_form_shlp_3->time_picker( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
lr_form_shlp_3->input( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
WHEN 4.
|
||||||
|
* ---------- Grid 4--------------------------------------------------------------------------------
|
||||||
|
* ---------- Set field label ----------------------------------------------------------------------
|
||||||
|
lr_form_shlp_4->label( <ls_fielddescr>-rollname ).
|
||||||
|
|
||||||
|
* ---------- Set input field ----------------------------------------------------------------------
|
||||||
|
CASE <ls_fielddescr>-datatype.
|
||||||
|
WHEN 'DATS'.
|
||||||
|
lr_form_shlp_4->date_picker( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
WHEN 'TIMS'.
|
||||||
|
lr_form_shlp_4->time_picker( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
lr_form_shlp_4->input( value = irclient->_bind_edit( <lv_field> ) ).
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
UNASSIGN <ls_fielddescr>.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
* ---------- Create table -------------------------------------------------------------------------
|
||||||
|
DATA(lr_table) = irparent->table( items = irclient->_bind_edit( <lt_result_itab> ) ).
|
||||||
|
* ---------- Create Columns -----------------------------------------------------------------------
|
||||||
|
DATA(lr_columns) = lr_table->columns( ).
|
||||||
|
|
||||||
|
* ---------- Set column ---------------------------------------------------------------------------
|
||||||
|
LOOP AT lt_fieldprop_lis ASSIGNING FIELD-SYMBOL(<ls_fieldprop_lis>).
|
||||||
|
* ---------- Init loop data -----------------------------------------------------------------------
|
||||||
|
UNASSIGN: <ls_fielddescr>.
|
||||||
|
|
||||||
|
* ---------- Get corresponding field description --------------------------------------------------
|
||||||
|
ASSIGN lt_ddffields[ fieldname = <ls_fieldprop_lis>-fieldname ] TO <ls_fielddescr>.
|
||||||
|
IF <ls_fielddescr> IS NOT ASSIGNED.
|
||||||
|
CONTINUE.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lr_columns->column( )->text( <ls_fielddescr>-rollname ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
* ---------- Build export parameter list ----------------------------------------------------------
|
||||||
|
LOOP AT lt_fieldprop_lis ASSIGNING <ls_fieldprop_lis> WHERE shlpoutput = abap_true.
|
||||||
|
* ---------- Init loop data -----------------------------------------------------------------------
|
||||||
|
CLEAR: lv_arg_fieldname.
|
||||||
|
|
||||||
|
* ---------- Build parameter name -----------------------------------------------------------------
|
||||||
|
lv_arg_fieldname = `${` && <ls_fieldprop_lis>-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 <ls_fieldprop_lis>.
|
||||||
|
* ---------- Init loop data -----------------------------------------------------------------------
|
||||||
|
CLEAR: lv_cell_fieldname.
|
||||||
|
|
||||||
|
* ---------- Build cell name ----------------------------------------------------------------------
|
||||||
|
lv_cell_fieldname = `{` && <ls_fieldprop_lis>-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.
|
METHOD generic_tag.
|
||||||
|
|
||||||
result = _generic( name = `GenericTag`
|
result = _generic( name = `GenericTag`
|
||||||
|
|
Loading…
Reference in New Issue
Block a user