Dynamic Search Help from Internal Table Data
Aug 11, 2014
While SAP has created most of the Search Helps that we will ever need, we still face situations
where a Search Help has to be shown dynamically from data that we have in the an internal
table. SAP has provided us a powerful Function Module to acheive this, and that is
F4IF_INT_TABLE_VALUE_REQUEST
.
This Function Module gets an internal table, list of fields that should be shown in the Search Help and mapping of other screen fields to the internal table fields (to fill those fields automatically based on selection) as input, though the last two are optional.
Now we are going to develop a program which has two fields in the Selection Screen which are Sales Document Number and Sold To Party. On pressing F4 in Sales Document Number we will be displaying the Search Help with three fields(Sales Document Number, Created Date, Sold To Party) and on selecting a particular record, we will fill the two fields in the Selection Screen correspondingly.
And on selecting a particular record, it fill both the fields.
The program for this example follows,
report z_f4_internal_table.
parameters:
p_vbeln type c length 20,
p_kunnr type c length 10.
at selection-screen on value-request for p_vbeln.
data:
lt_vbak type standard table of vbak,
lt_fields type standard table of dfies,
lt_mapping type standard table of dselc.
"Fetching only 100 sales documents
select * from vbak
into table lt_vbak
up to 100 rows.
"Adding the fields we need to be shown in the
"search help
perform add_field
tables lt_fields
using 'VBAK'
'VBELN'.
perform add_field
tables lt_fields
using 'VBAK'
'ERDAT'.
perform add_field
tables lt_fields
using 'VBAK'
'KUNNR'.
"Adding fields that has to be mapped to
"selection screen fields
perform append_mapping
tables lt_mapping
using 'KUNNR' 'P_KUNNR'.
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
exporting
retfield = 'VBELN'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_VBELN'
value_org = 'S'
tables
value_tab = lt_vbak
field_tab = lt_fields
dynpfld_mapping = lt_mapping
exceptions
parameter_error = 1
no_values_found = 2
others = 3
.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
*&------------------------------------------------------*
*& Form add_field
*&------------------------------------------------------*
* Add field info to fieldtab given its table name and
* field name
*-------------------------------------------------------*
* -->TABNAME text
* -->FIELDNAME text
*-------------------------------------------------------*
form add_field
tables p_fields
using tabname type tabname
fieldname type fieldname.
data: ls_field type dfies,
lt_fields type standard table of dfies.
call function 'DDIF_FIELDINFO_GET'
exporting
tabname = tabname
fieldname = fieldname
tables
dfies_tab = lt_fields
exceptions
not_found = 1
internal_error = 2
others = 3
.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
append lines of lt_fields to p_fields.
endform. "add_field
*&------------------------------------------------------*
*& Form append_mapping
*&------------------------------------------------------*
* Append field mapping to mapping table
*-------------------------------------------------------*
* -->P_MAPPING Mapping table
* -->P_FIELD Field in Itab
* -->P_DYNPRO_FIELD Field in screen
*-------------------------------------------------------*
form append_mapping
tables p_mapping
using p_field
p_dynpro_field.
data:
ls_mapping type dselc.
ls_mapping-fldname = p_field.
ls_mapping-dyfldname = p_dynpro_field.
append ls_mapping to p_mapping.
endform. "append_mapping
As the program is very much self-explanatory, I would like to point out only the inputs
given to F4IF_INT_TABLE_VALUE_REQUEST
and its purpose.
retfield
is the field name in the internal table which should be returned as the value to Selection Screen fielddynprog
anddynpnr
takes the report id and screen number respectivelydynprofield
is the Selection Screen field name for which the search help is bound with and result of the selection will be filled in this fieldvalue_org
is the field which defines how the data should be displayed from the internal table in the Search Help. It takes'C'
and'S'
as input.'S'
is to display the data according to the structure of the internal table and'C'
is for cell by cell rendering which is least useful. For showing multiple columns of data in a Search Help you will mostly need'S'
value_tab
is the internal table which contains data for selectionfield_tab
is the list of fields you would like the Search Help to display. It is optional. When it is not given, all fields will be displayed (value_org
must be'S'
). For Data Dictionary objects, you can fetch the field details using the function moduleDDIF_FIELDINFO_GET
dynpfld_mapping
gets the dynpro field to internal table field mapping, for filling multiple fields based on the selection in the Search Help. It is also optional
Though the Function Module contains more fields, I have chosen minimal fields that will be used for most cases just to avoid confusion.