F4IF_INT_TABLE_VALUE_REQUEST value_tab cleared
Hi all,
i'm using the bapi in object.
I use it in a table control.
It runs well when i start it for the first time.
If i open the match code for the second field the value_tab is displayed with initial values:
1st time: SRVPOS KTEXT1
1 descr1
2 descr2... ecc
2nd time KTEXT1 KTEXT1
0000000 descr1
0000000 descr2... ecc
The header too is not correct.
Anybody can help me?
Thanks.
MY CODE----
DATA: field_tab LIKE dfies OCCURS 0 WITH HEADER LINE.
DATA: return_tab TYPE ddshretval OCCURS 0 WITH HEADER LINE.
* DATA: BEGIN OF value_tab OCCURS 0,
* srvpos like esll-srvpos,
* ktext1 like esll-ktext1,
* END OF value_tab.
DATA: value_tab LIKE esll OCCURS 0 WITH HEADER LINE.
CLEAR: value_tab, return_tab.
REFRESH value_tab[].
REFRESH field_tab[].
REFRESH return_tab[].
field_tab-fieldname = 'SRVPOS'.
field_tab-tabname = 'ESLL'.
field_tab-offset = '18'.
field_tab-position = '1'.
field_tab-keyflag = 'X'.
field_tab-intlen = 15.
field_tab-leng = 15.
field_tab-outputlen = 15.
field_tab-scrtext_m = 'Prestazione'.
APPEND field_tab.
CLEAR field_tab.
field_tab-fieldname = 'KTEXT1'.
field_tab-tabname = 'ESLL'.
field_tab-position = '2'.
field_tab-offset = '40'.
field_tab-intlen = 15.
field_tab-leng = 15.
field_tab-outputlen = 15.
field_tab-scrtext_m = 'Descrizione'.
APPEND field_tab.
CLEAR field_tab.
DATA: check_fieldval LIKE return_tab-fieldval.
LOOP AT tadd.
MOVE-CORRESPONDING tadd TO value_tab.
APPEND value_tab.
CLEAR value_tab.
ENDLOOP.
CLEAR tadd.
SORT value_tab.
DELETE ADJACENT DUPLICATES FROM value_tab.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'SRVPOS'
value_org = 'S'
dynpprog = sy-repid
dynpnr = sy-dynnr
TABLES
value_tab = value_tab
field_tab = field_tab
return_tab = return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
wins-srvpos = return_tab-fieldval.
ENDIF.
Edited by: SAPDUMMY on Feb 9, 2011 12:38 PM
Hi,
Declare another value tab for the second field ...
DATA: value_tab1 LIKE esll OCCURS 0 WITH HEADER LINE.
DATA: value_tab2 LIKE esll OCCURS 0 WITH HEADER LINE.
Also both the times the return field is SRVPOS ... for the second change the return field ....
Regards,
Srini.
Similar Messages
-
Hi,
I'm using FM F4IF_INT_TABLE_VALUE_REQUEST to show a pop-up with my internal table values. The internal table has 3 fields, ATINN, ATZHL and a description field ATWTB. ATINN and ATZHL are needed to complete the unique table key, however this FM will only return the value of one field in any line I select.
How can I see all the values in the line I select in the return table?
My code is as follows:
DATA: tbl_cawnt LIKE cawnt OCCURS 0,
wa_cawnt LIKE cawnt,
BEGIN OF tbl_list OCCURS 0,
atinn LIKE cawnt-atinn,
atzhl LIKE cawnt-atzhl,
atwtb LIKE cawnt-atwtb,
END OF tbl_list,
wa_list LIKE tbl_list,
tbl_return LIKE ddshretval OCCURS 0,
wa_return LIKE ddshretval,
tbl_fields LIKE dfies OCCURS 0,
tbl_dynp LIKE dselc OCCURS 0.
REFRESH: tbl_list, tbl_cawnt.
SELECT atinn atzhl atwtb
FROM cawnt
INTO CORRESPONDING FIELDS OF TABLE tbl_cawnt
WHERE spras EQ sy-langu.
LOOP AT tbl_cawnt INTO wa_cawnt.
CLEAR wa_list.
MOVE: wa_cawnt-atwtb TO wa_list-atwtb,
wa_cawnt-atinn TO wa_list-atinn,
wa_cawnt-atzhl TO wa_list-atzhl.
APPEND wa_list TO tbl_list.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ATWTB'
dynpprog = sy-repid
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = tbl_list
return_tab = tbl_return
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.
Thanks!Hi,
Use the structure DYNPFLD_MAPPING
With this internal table you can easily define that you want to return
other columns of the hit list in addition to field RETFIELD to the
screen.
In this IT you can MAP the screen fields to the serch help screen fields this has three fields
FLDNAME this is the field anme from the search help
FLDINH This has to be blank which would be field with the field value that you want to map
DYFLDNAME THis is the screen field name.
So here you can get the values for the other fields that you want which are on the search help just populate the name of the fields in FLDNAME.
Regards,
Himanshu -
F4IF_INT_TABLE_VALUE_REQUEST help
hi,
I have a table of 2 values ( WBS and project definition code ) , I used this function F4IF_INT_TABLE_VALUE_REQUEST for F4 on the project definition field. After that I want to return both Project definition and WBS that I've selected . I used value_org = 'S" but I can get only 1 record in the return_table ? Could you please help me?
Thanks in advanceHi,
Check this Code..
F4 help is povided on the P_PLNNR field and if any data is selected then P_PLNNR and P_PLNAL is updated in the screen. Both values are shown in the F4 help(P_PLNNR and P_PLNAL ).
PARAMETES : p_werks type ...
PARAMETES : p_plnnr type ....
PARAMETES : p_plnal type....
AT SELECTION-SCREEN ON P_PLNNR.
data:
lg_condition type string.
data:
lwa_ddshretval type ddshretval,
lwa_dselc type dselc,
lwa_dynpread type dynpread.
data:
li_f4_insp type standard table of t_f4_insp,
li_ddshretval type standard table of ddshretval,
li_dselc type standard table of dselc,
li_dynpread type standard table of dynpread.
lwa_dynpread-fieldname = 'P_WERKS'.
append lwa_dynpread to li_dynpread.
clear lwa_dynpread.
* Read Screen Field Values.
call function 'DYNP_VALUES_READ'
exporting
dyname = sy-repid
dynumb = sy-dynnr
tables
dynpfields = li_dynpread.
* Read the first record as only one record will be present
read table li_dynpread into lwa_dynpread index 1.
p_werks = lwa_dynpread-fieldvalue.
if p_werks is initial.
move 'PLNTY EQ ''Q''' to lg_condition.
else.
move 'WERKS EQ P_WERKS AND PLNTY EQ ''Q''' to lg_condition.
endif.
* Fetch Data
select werks
plnnr
plnal
plnty
ktext
into table li_f4_insp
from plko
where (lg_condition).
lwa_dselc-fldname = 'F0002'.
lwa_dselc-dyfldname = 'PLNNR'.
append lwa_dselc to li_dselc.
clear lwa_dselc.
lwa_dselc-fldname = 'F0003'.
lwa_dselc-dyfldname = 'PLNAL'.
append lwa_dselc to li_dselc.
clear lwa_dselc.
* FM For F4 Help
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
exporting
retfield = 'PLNNR'
dynpprog = sy-cprog
dynpnr = sy-dynnr
dynprofield = 'PLNNR'
value_org = 'S'
tables
value_tab = li_f4_insp
return_tab = li_ddshretval
dynpfld_mapping = li_dselc
exceptions
parameter_error = 1
no_values_found = 2
others = 3.
if sy-subrc eq 0.
refresh li_dynpread.
read table li_ddshretval into lwa_ddshretval index 1.
if sy-subrc eq 0.
move lwa_ddshretval-fieldval to p_plnnr.
lwa_dynpread-fieldname = 'P_PLNNR'.
lwa_dynpread-fieldvalue = lwa_ddshretval-fieldval.
append lwa_dynpread to li_dynpread.
clear lwa_dynpread.
endif. " IF sy-subrc EQ 0.
read table li_ddshretval into lwa_ddshretval index 2.
if sy-subrc eq 0.
move lwa_ddshretval-fieldval to p_plnal.
lwa_dynpread-fieldname = 'P_PLNAL'.
lwa_dynpread-fieldvalue = lwa_ddshretval-fieldval.
append lwa_dynpread to li_dynpread.
clear lwa_dynpread.
endif. " IF sy-subrc EQ 0.
endif. " IF sy-subrc EQ 0.
* Set Screen Field Values.
call function 'DYNP_VALUES_UPDATE'
exporting
dyname = sy-repid
dynumb = sy-dynnr
tables
dynpfields = li_dynpread
exceptions
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
others = 8.
check sy-subrc eq 0. -
F4IF_INT_TABLE_VALUE_REQUEST and search in fields
Hi Friends,
I want to make a search operation with F4IF_INT_TABLE_VALUE_REQUEST. My code is;
DATA:
BEGIN OF HELP_LIST OCCURS 0,
ID LIKE ZLIST-ID,
NAME LIKE ZLIST-NAME,
SNAME LIKE ZLIST-SNAME,
END OF HELP_LIST,
FIELD_TAB LIKE DFIES OCCURS 0 WITH HEADER LINE.
CLEAR FIELD_TAB.
FIELD_TAB-TABNAME = 'HELP_LIST'.
FIELD_TAB-FIELDNAME = 'ID'.
FIELD_TAB-POSITION = 0.
FIELD_TAB-OFFSET = 0.
FIELD_TAB-REPTEXT = 'ID'.
FIELD_TAB-INTLEN = 9.
FIELD_TAB-OUTPUTLEN = 9.
APPEND FIELD_TAB.
CLEAR FIELD_TAB.
FIELD_TAB-TABNAME = 'HELP_LIST'.
FIELD_TAB-FIELDNAME = 'NAME'.
FIELD_TAB-POSITION = 1.
FIELD_TAB-OFFSET = 9.
FIELD_TAB-REPTEXT = 'Name'.
FIELD_TAB-INTLEN = 50.
FIELD_TAB-OUTPUTLEN = 50.
APPEND FIELD_TAB.
CLEAR FIELD_TAB.
FIELD_TAB-TABNAME = 'HELP_LIST'.
FIELD_TAB-FIELDNAME = 'SNAME'.
FIELD_TAB-POSITION = 1.
FIELD_TAB-OFFSET = 9.
FIELD_TAB-REPTEXT = 'Surname'.
FIELD_TAB-INTLEN = 50.
FIELD_TAB-OUTPUTLEN = 50.
APPEND FIELD_TAB.
SELECT ID NAME SNAME
FROM ZLIST
INTO TABLE HELP_LIST.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'ID'
VALUE_ORG = 'S'
DYNPPROG = 'ZPROJECT'
DYNPNR = '0202'
DYNPROFIELD = 'TMP_ID'
WINDOW_TITLE = 'Search'
TABLES
VALUE_TAB = HELP_LIST
FIELD_TAB = FIELD_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
Respect to above code, I can list my values. And when I want to try 'H*' for Name field, I am getting error as : "Not possible to restrict with search pattern here"
But, If I don't pass FIELD_TAB table, I don't get error. I need to pass this table for another reason. But also I need to search for name and surname fields.
How can I do?
Thanks.Hi Uwe,
Thank you for your response. Yes, that is an option I was thinking of as an alternative.
I want to display to the user the User_Addrs selection-window, with the names. Once they choose the multiple-selection list of names, I want them to be able to save the user address and the associated first/last names in the variant.
The selection screen can be cut down to possibly one less selection-field: by combining the first/last name...but the update to screen-fields would likely still be a problem.
Still working on this one,
Dan Perecky -
F4IF_INT_TABLE_VALUE_REQUEST -Restrictions dialog box
Hi,
I am using the function module F4IF_INT_TABLE_VALUE_REQUEST in screens, to implement a search help in my program , but instead of directly displaying the hit list , i want the restrictions screen to be displayed first with some default values, and the list should be displayed only based on the valuies entered in thius restrictions screen. How can i do this using this function module.
To be more precise,
i need the restrictions dialog box to be displayed and this will have 6 fields. i have to pass values to 2 fields from my program, the first field need not be filled and teh remaining fields should be left for the user to enter.
how do i achieve this?
Please help.Check the sample code. Using the Event PROCEE ON VALUE-REQUEST we can get the F4 Help.
PROGRAM ztest_duplica.
DATA: kunnr1(10),
kunnr2(10).
*& Module USER_COMMAND_0100 INPUT
* text
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
*& Module get_help INPUT
* text
MODULE get_help INPUT.
DATA:i_retab TYPE TABLE OF ddshretval,
wa_ret TYPE ddshretval.
TYPES: BEGIN OF x_itab,
kunnr TYPE kunnr, "it should be type to some standard data element
END OF x_itab.
FIELD-SYMBOLS: <fs> TYPE ANY.
CLEAR : kunnr1, kunnr2.
DATA: dynfield TYPE help_info-dynprofld,
wa_itab TYPE x_itab,
i_tab LIKE TABLE OF wa_itab WITH HEADER LINE.
CLEAR dynfield.
IF sy-dynnr = '0100'.
dynfield = 'KUNNR1'.
ELSE.
dynfield = 'KUNNR2'.
ENDIF.
SELECT kunnr FROM kna1
INTO TABLE i_tab
UP TO 20 ROWS.
"retfield we will pass the column name we are going to get from f4
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'KUNNR' "<---Return field column name
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = dynfield
value_org = 'S'
TABLES
value_tab = i_tab
return_tab = i_retab.
IF sy-subrc EQ 0.
READ TABLE i_retab INTO wa_ret INDEX 1.
ASSIGN (dynfield) TO <fs> .
<fs> = wa_ret-fieldval .
UNASSIGN <fs>.
ENDIF.
ENDMODULE. " get_help INPUT
Flow logic for 100 screen
screen consists of Input field pointing to KUNNR1
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
process on value-request.
field kunnr1 module get_help.
Create a Tcode and Intitial screen 100. and check it .
Regards
Vijay Babu Dudla -
F4IF_INT_TABLE_VALUE_REQUEST not returning value with 2 decimals point
hi all,
i use function F4IF_INT_TABLE_VALUE_REQUEST to do search help, the master data in table ZINVEST has field ZNO, with field type CURR , 2 decimals point.
the return table shows 2 decimals point but in display screen it only shows 1 decimal point, pls advice
here's the coding:
DATA : BEGIN OF itab OCCURS 0,
e_value(20),
END OF itab.
DATA: BEGIN OF field_tab OCCURS 0.
INCLUDE STRUCTURE dfies.
DATA END OF field_tab.
DATA : return_tab LIKE ddshretval OCCURS 0 .
CLEAR field_tab.
field_tab-fieldname = 'E_VALUE'.
field_tab-intlen = 17.
field_tab-outputlen = 17.
field_tab-decimals = 2.
field_tab-inttype = 'C'.
field_tab-scrtext_m = 'Investment No'.
APPEND field_tab.
SELECT * FROM ZINVEST.
CLEAR: itab.
itab-e_value = ZINVEST-ZNO.
APPEND itab.
ENDSELECT.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'E_VALUE'
dynprofield = 'A'
dynpprog = sy-cprog
dynpnr = sy-dynnr
TABLES
value_tab = itab
field_tab = field_tab
return_tab = return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.Hi ester,
You shud try this way. Try to use this code.
DATA: BEGIN OF it_help OCCURS 0,
zuonr TYPE zvinvoice,
kunnr TYPE kunnr,
name TYPE zvcustname,
END OF it_help.
SELECT-OPTIONS: p_zuonr FOR bsid-zuonr.
SELECT DISTINCT
zuonr
kunnr
INTO CORRESPONDING FIELDS OF TABLE it_help
FROM bsid
WHERE zuonr <> space.
SORT it_help BY zuonr kunnr.
DELETE ADJACENT DUPLICATES FROM it_help
COMPARING zuonr kunnr.
IF it_help[] IS NOT INITIAL.
SELECT kunnr
name1
name2
INTO TABLE it_kna1
FROM kna1
FOR ALL ENTRIES IN it_help
WHERE kunnr = it_help-kunnr.
SORT it_kna1 BY kunnr.
CLEAR v_tabix.
SORT it_help BY kunnr.
LOOP AT it_help.
v_tabix = sy-tabix.
READ TABLE it_kna1 WITH KEY kunnr = it_help-kunnr
BINARY SEARCH.
IF sy-subrc EQ 0.
CONCATENATE it_kna1-name1 it_kna1-name2 INTO it_help-name
SEPARATED BY space.
MODIFY it_help FROM it_help INDEX v_tabix
TRANSPORTING name.
ENDIF.
ENDLOOP.
FORM event_selscr_valreq_for_pzuonr .
***Function module to display the search help for the assignment filed****
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZUONR'
dynpprog = sy-cprog
dynpnr = sy-dynnr
dynprofield = 'P_ZUONR'
window_title = text-029
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = it_help
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.
Reward if help ful.
Regards
Azad. -
F4IF_INT_TABLE_VALUE_REQUEST and first selection of mult
Hi All,
I am using F4IF_INT_TABLE_VALUE_REQUEST and it works well, except for the first time.This is a regular report type program.
o If one item/line is selected the first time, nothing is returned to the screen fields.
o If more than one item is selected, the first one is lost. The second and other lines make it back to the screen field.
o The actual values are not displayed until I right-click and select the 'multiple selection' option.
o The next multiple selects always returns correctly- Whatever is chosen makes it to the bottom of the screen field.
Using StepL or not does not seem to make a difference.
Call function 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = RtField
dynpprog = l_prog
dynpnr = l_screen
dynprofield = specifichlpfld
Value_org = 'C'
WINDOW_TITLE = WinTitle
MULTIPLE_CHOICE = 'X'
TABLES
field_Tab = OutField_Tab
value_tab = OutUsrAddrs
RETURN_TAB = RETURN_TAB.
Thanks for any help,
Dan P.Hi All,
This is the code that shows the problem. It can be cut/pasted into a program for demostration.
*& Report YDMP_TRY2F4IN_INT_TABLE_VAL_RE *
*& Author: Daniel Perecky *
*& Test prg for function module call F4IF_INT_TABLE_VALUE_REQUEST. *
*& Works, kind of. *
*& o If one item/line is selected the first time, nothing is *
*& returned to the screen fields. *
*& o If more than one item is selected, the first one is lost. The *
*& second and other lines make it back to the screen field. *
*& o The actual values are not displayed until I right-click *
*& and select the 'multiple selection' option. *
*& o The next multiple selects always returns correctly- Whatever is *
*& chosen makes it to the bottom of the screen field. *
REPORT YDMP_TRY3F4IN_INT_TABLE_VAL_RE .
Tables: User_Addrs.
Selection-Screen Begin of Block EMAILN.
Selection-Screen Skip.
Selection-screen Begin of Line.
Selection-Screen Comment 1(25) Text-013.
Selection-screen End of Line.
Selection-screen Begin of Line.
Selection-Screen Comment 1(12) Text-015.
Selection-Screen Position 10.
Select-Options: GnrlF for USER_ADDRS-Name_First.
Selection-Screen Position 63.
Select-Options: GnrlL for USER_ADDRS-NAME_Last.
Selection-screen End of Line.
Selection-screen Begin of Line.
Selection-Screen Position 68.
Select-Options: GnrlSpMl for User_Addrs-BName.
Selection-screen End of Line.
Selection-Screen Skip.
Selection-Screen End of Block EMAILN.
Include type pool SSCR
TYPE-POOLS SSCR.
Define the object to be passed to the RESTRICTION parameter
DATA RESTRICT TYPE SSCR_RESTRICT.
DATA OPT_LIST TYPE SSCR_OPT_LIST.
DATA ASSRTD TYPE SSCR_***.
CLASS CX_RPTERR_EXCEPTION DEFINITIO
CLASS CX_RPTERR_EXCEPTION DEFINITION
INHERITING FROM CX_STATIC_CHECK.
ENDCLASS. "CX_RPTERR_EXCEPTION DEFINITIO
Initialization.
Used for function module: 'SELECT_OPTIONS_RESTRICT'
Clear Opt_List.
Move 'JUST_EQ' to Opt_List-Name.
Move 'X' to Opt_List-Options-Eq.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.
Clear Opt_List.
Move 'NOINTERVLS' to Opt_List-Name.
Move 'X' to: Opt_List-Options-CP,
Opt_List-Options-EQ,
Opt_List-Options-GE,
Opt_List-Options-GT,
Opt_List-Options-LE,
Opt_List-Options-LT,
Opt_List-Options-NE,
Opt_List-Options-NP.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.
Clear Opt_List.
Clear Assrtd.
Move: 'B' to Assrtd-Kind,
'EMAILN' to Assrtd-Name,
'I' to Assrtd-SG_Main,
'N' to Assrtd-SG_Addy,
'JUST_EQ' to Assrtd-Op_Main,
'NOINTERVLS' TO Assrtd-OP_ADDY.
APPEND Assrtd TO RESTRICT-***_TAB.
Call function module
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
RESTRICTION = RESTRICT
DB = ' '
EXCEPTIONS
TOO_LATE = 1
REPEATED = 2
NOT_DURING_SUBMIT = 3
DB_CALL_AFTER_REPORT_CALL = 4
SELOPT_WITHOUT_OPTIONS = 5
SELOPT_WITHOUT_SIGNS = 6
INVALID_SIGN = 7
REPORT_CALL_AFTER_DB_ERROR = 8
EMPTY_OPTION_LIST = 9
INVALID_KIND = 10
REPEATED_KIND_A = 11
OTHERS = 12.
Exception handling
IF SY-SUBRC NE 0.
ENDIF.
Use same form for all three fields. Update all fields every time.
At Selection-Screen on Value-Request for GnrlF-Low.
Perform GetFillUserInfo Tables GnrlF GnrlL GnrlSpMl.
At Selection-Screen on Value-Request for GnrlL-Low.
Perform GetFillUserInfo Tables GnrlF GnrlL GnrlSpMl.
At Selection-Screen on Value-Request for GnrlSpMl-Low.
Perform GetFillUserInfo Tables GnrlF GnrlL GnrlSpMl.
Start-of-Selection.
Try.
Some regular report code goes here.
Catch CX_ROOT.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
Exit.
EndTry.
End-of-Selection.
*=============================================================================================
*| Form GetFillUserInfo |
*| Get all user information from SAP tables and fill out Selection-Screen tables. |
*| Fill in all fields for user. |
*=============================================================================================
Form GetFillUserInfo Tables NameF Type Standard Table NameL Type Standard Table
SAPIds Type Standard Table.
Data: NameFLoc Type Range of User_Addrs-Name_First with header line,
NameLLoc Type Range of User_Addrs-Name_Last with header line,
OutlookLoc Type Range of ZXX_Hrid-ZZ_EMail_Address with header line,
SAPIdLoc Type Range of User_Addrs-BName with header line.
data: step_line like sy-stepl.
Types: Begin of UsrAddrsT.
Types: BNAME Like User_Addrs-BName,
NAME_LAST Like User_Addrs-Name_Last,
NAME_FIRST Like User_Addrs-Name_First,
NAME_TEXT Like User_Addrs-Name_Text,
DEPARTMENT Like User_Addrs-Department.
Types: End of UsrAddrsT.
Data: UsrAddrsInt type standard table of UsrAddrsT with header line.
Types: Begin of UsrAddrsT2.
Types: Value(80) Type C.
Types: End of UsrAddrsT2.
Data: UsrAddrs type standard table of UsrAddrsT2 with header line.
Data: Field_Tab type standard table of DFIES with header line.
DATA: Return_Tab Type Standard table of ddshretval with HEADER LINE.
Data: RtField Like DFIES-FIELDNAME,
WinTitle(40) Type C.
Generic F4 tables
Data: OutField_Tab Type Standard table of DFIES with header line,
OutUsrAddrs Type Standard table of UsrAddrsT2 with header line.
Data: l_prog like syst-cprog,
l_screen like syst-dynnr,
specifichlpfld like Help_Info-Dynprofld.
Data: TblSz Type I.
l_prog = syst-cprog.
l_screen = syst-dynnr.
Select D2BName D2Name_First D2NAME_LAST D2Name_Text D2~Department
From ( Usr21 as D1
Inner Join User_Addrs as D2
On D1BName = D2BName )
Appending Corresponding fields of table UsrAddrsInt
Where D2~BName <> Space.
Sort UsrAddrsInt by Name_Last Name_First BName.
Delete UsrAddrsInt Where BName cs 'n/a' or ( BName = 'Z_USER' and Name_Text cs 'USER SAMPLE' ) or BName = 'SAMPLE'.
Fill value table- one column data per row.
Loop at UsrAddrsInt.
If UsrAddrsInt-BName <> Space.
Write UsrAddrsInt-BName to Usraddrs-Value.
Else.
Write space to UsrAddrs-Value.
Endif.
Append UsrAddrs.
If UsrAddrsInt-NAME_TEXT <> Space.
Write UsrAddrsInt-NAME_TEXT to Usraddrs-Value.
Else.
Write space to UsrAddrs-Value.
Endif.
Append UsrAddrs.
If UsrAddrsInt-DEPARTMENT <> Space.
Write UsrAddrsInt-DEPARTMENT to Usraddrs-Value.
Else.
Write space to UsrAddrs-Value.
Endif.
Append UsrAddrs.
EndLoop.
Select Distinct d1tabname D1fieldname D1Domname d1Datatype D1~position
D1rollname D1inttype D1intlen D1leng D1Decimals D1outputLen
From DD03M as D1
appending corresponding fields of table Field_tab
where
DDLanguage = Syst-Langu and
d1~tabname = 'USER_ADDRS' and
D1~fieldname in ('BNAME', 'NAME_TEXT', 'DEPARTMENT').
Sort Field_Tab by position.
Loop at Field_Tab.
Select Single DDText
Into Field_Tab-FieldText
From DD03M
Where Tabname = Field_Tab-Tabname and
FieldName = Field_Tab-fieldName and
DDLanguage = Syst-Langu.
If Syst-Subrc = 0.
Modify Field_Tab.
Endif.
EndLoop.
RtField = 'BNAME'.
WinTitle = 'Find Person(s) for SAP E-Mail'.
specifichlpfld = 'USR21-BNAME'.
Clear: OutField_Tab, OutUsrAddrs. Refresh: OutField_Tab, OutUsrAddrs.
OutField_Tab[] = Field_Tab[].
OutUsrAddrs[] = UsrAddrs[].
Call function 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = RtField
stepL = Step_Line
dynpprog = l_prog " sy-cprog
dynpnr = l_screen " sy-dynnr
dynprofield = specifichlpfld
Value_org = 'C' "'S'
WINDOW_TITLE = WinTitle
MULTIPLE_CHOICE = 'X'
TABLES
field_Tab = OutField_Tab
value_tab = OutUsrAddrs "SelFNames
RETURN_TAB = RETURN_TAB.
If SY-SUBRC <> 0.
If Syst-Batch = ' '. " Online
Sy-MsgTy = 'I'.
Else.
Sy-MsgTy = 'E'.
Endif.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
If Syst-Batch = ' '. " Online
Raise Exception Type CX_RPTERR_EXCEPTION.
Endif.
Endif.
CALL FUNCTION 'DYNP_GET_STEPL'
IMPORTING
POVSTEPL = Step_Line
EXCEPTIONS
STEPL_NOT_FOUND = 1
OTHERS = 2.
If SY-SUBRC <> 0.
If Syst-Batch = ' '. " Online
Sy-MsgTy = 'I'.
Else.
Sy-MsgTy = 'E'.
Endif.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
If Syst-Batch = ' '. " Online
Raise Exception Type CX_RPTERR_EXCEPTION.
Endif.
Endif.
Loop at Return_Tab.
Clear UsrAddrsInt.
Read table UsrAddrsInt with key BName = Return_Tab-FIELDVAL.
If Syst-Subrc = 0.
NameFLoc-Low = UsrAddrsInt-Name_First. " should be ok if blank- append anyway.
NameLLoc-Low = UsrAddrsInt-Name_Last.
sapIdLoc-Low = UsrAddrsInt-BName.
Append: NameFLoc, NameLLoc, SapIdLoc.
Clear: NameFLoc, NameLLoc, SapIdLoc.
Endif.
EndLoop.
Loop at NameFLoc.
NameFLoc-High = space. NameFLoc-Sign = 'I'. NameFLoc-Option = 'EQ'. Modify NameFLoc.
EndLoop.
Loop at NameLLoc.
NameLLoc-High = space. NameLLoc-Sign = 'I'. NameLLoc-Option = 'EQ'. Modify NameLLoc.
EndLoop.
Loop at SapIdLoc.
SapIdLoc-High = space. SapIdLoc-Sign = 'I'. SapIdLoc-Option = 'EQ'. Modify SapIdLoc.
EndLoop.
Loop at NameFLoc.
Move-Corresponding NameFLoc to NameF.
Append NameF.
Add 1 to TblSz.
EndLoop.
Refresh NameFLoc. Clear: NameF, NameFLoc.
Loop at NameLLoc.
Move-Corresponding NameLLoc to NameL.
Append NameL.
EndLoop.
Refresh NameLLoc. Clear: NameL, NameLLoc.
Loop at SapIdLoc.
Move-Corresponding SapIdLoc to SAPIds.
Append SapIds.
EndLoop.
Refresh SapIdLoc. Clear: SapIds, SapIdLoc.
EndForm. " GetFillUserInfo -
F4IF_INT_TABLE_VALUE_REQUEST doesn't work
I want to popup a F4 window for bank name accroding to vendor no.
*declare internal table for bank
data: begin of bk occurs 0,
no like lfbk-bankn,
curr like lfbk-bkref,
name like bnka-banka,
acct like lfbk-koinh,
end of bk.
data t_bk like bk occurs 0 with header line.
process on value-request.
field IO_BANKNM module BANKNAME_list.
*& Module BANKNAME_list INPUT
text
module bankname_list input.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = io_vendorno
importing
output = vendorno_long
exceptions
others = 1.
select abankn abkref bbanka akoinh
into bk
from lfbk as a inner join bnka as b
on abankl = bbankl
where a~lifnr = vendorno_long.
append bk to t_bk.
endselect.
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
exporting
DDIC_STRUCTURE = ' '
retfield = 'name'
PVALKEY = ' '
DYNPPROG = prog_name
DYNPNR = ' '
DYNPROFIELD = 'IO_BANKNM'
STEPL = 0
WINDOW_TITLE = 'bank name'
VALUE = ' '
VALUE_ORG = 'C'
MULTIPLE_CHOICE = ' '
DISPLAY = ' '
CALLBACK_PROGRAM = ' '
CALLBACK_FORM = ' '
tables
value_tab = t_bk
FIELD_TAB =
RETURN_TAB =
DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
endmodule. " BANKNAME_list INPUT
I use debug and find there are 3 records in internal table t_bk.
But there is no F4 window pop up when call 'F4IF_INT_TABLE_VALUE_REQUEST' and I was told ' No value is found'.
Can anyone kind to help? Does I use this function wrong?Hello Yimeng Cui
Call the FM in the event,
AT SELECTION-SCREEN FOR VALUE REQUEST FOR <field>.
e.g.:
PARAMETERS:
p_conn TYPE dfies-fieldname.
DATA:
BEGIN OF tab OCCURS 0,
carrid LIKE spfli-carrid,
connid LIKE spfli-connid,
END OF tab.
DATA:
w_tabix TYPE i,
w_repid LIKE sy-repid,
w_dnum LIKE sy-dynnr,
t_return LIKE TABLE OF ddshretval WITH HEADER LINE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_conn.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'P_CONN'
* PVALKEY = ' '
dynpprog = w_repid
dynpnr = w_dnum
* DYNPROFIELD = ' '
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = 'X'
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = tab
* FIELD_TAB = F_RETURN
return_tab = t_return
* DYNPFLD_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.
ELSE.
READ TABLE t_return INDEX 1 TRANSPORTING fieldval.
p_conn = t_return-fieldval.
CLEAR tab.
SELECT carrid
FROM spfli
INTO TABLE tab1
WHERE connid EQ t_return-fieldval.
ENDIF.
Regards
Indu. -
F4IF_INT_TABLE_VALUE_REQUEST Functionality
Hello all,
How can I return more then one value using the FM F4IF_INT_TABLE_VALUE_REQUEST.
Example:
Parameters:
pernr TYPE pa0001-pernr,
sname TYPE pa0001-sname.
When I click "F4" inside the field (parameter) pernr, the following list is showed...
Number - Name
===========
1234 - Roberto
5678 - Falk
When I select the first line, I need to receive both values (Number and Name), no just the Name.Hello Roberto
Yes, you can return multiple values using this function module. All you need to do is to define a <b>CALLBACK </b>routine for modifying the search help.
Have a look at the following sample report <b>ZUS_SDN_F4IF_INT_TAB_VAL_REQ</b>. If you define two columns on the search help that are return you retrieve two entries in the values itab for each selected F4 entry (in case of muliple select possible).
*& Report ZUS_SDN_F4IF_INT_TAB_VAL_REQ
REPORT zus_sdn_f4if_int_tab_val_req.
TYPE-POOLS: shlp.
DATA:
gd_repid TYPE syrepid,
gt_knb1 TYPE STANDARD TABLE OF knb1,
gt_values TYPE STANDARD TABLE OF ddshretval.
START-OF-SELECTION.
gd_repid = syst-repid.
SELECT * FROM knb1 INTO TABLE gt_knb1 UP TO 100 ROWS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
ddic_structure = 'KNB1'
retfield = 'KUNNR' " overwritten in callback !!!
* PVALKEY = ' '
* DYNPPROG = ' '
* DYNPNR = ' '
* DYNPROFIELD = ' '
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
value_org = 'S' " structure
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
callback_program = gd_repid
callback_form = 'CALLBACK_F4'
* MARK_TAB =
* IMPORTING
* USER_RESET =
TABLES
value_tab = gt_knb1
* FIELD_TAB =
return_tab = gt_values
* DYNPFLD_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.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_structure_name = 'DDSHRETVAL'
TABLES
t_outtab = gt_values
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
END-OF-SELECTION.
*& Form CALLBACK_F4
* text
* --> p1 text
* <-- p2 text
FORM callback_f4
TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr
callcontrol LIKE ddshf4ctrl.
* define local data
DATA:
ls_intf LIKE LINE OF shlp-interface,
ls_prop LIKE LINE OF shlp-fieldprop.
" Hide unwanted fields
CLEAR: ls_prop-shlpselpos,
ls_prop-shlplispos.
MODIFY shlp-fieldprop FROM ls_prop
TRANSPORTING shlpselpos shlplispos
WHERE ( fieldname NE 'BUKRS' AND
fieldname NE 'KUNNR' AND
fieldname NE 'PERNR' ).
" Overwrite selectable fields on search help
REFRESH: shlp-interface.
ls_intf-shlpfield = 'BUKRS'.
ls_intf-valfield = 'X'.
APPEND ls_intf TO shlp-interface.
ls_intf-shlpfield = 'KUNNR'.
APPEND ls_intf TO shlp-interface.
ENDFORM. " CALLBACK_F4
Regards
Uwe -
F4IF_INT_TABLE_VALUE_REQUEST , problem with return_tab
hi all,
i have coded the following:
CLEAR field_tab.
field_tab-fieldname = 'E_VALUE'.
field_tab-intlen = 20.
field_tab-outputlen = 20.
field_tab-inttype = 'C'.
field_tab-scrtext_m = 'Region'.
APPEND field_tab.
CLEAR field_tab.
field_tab-fieldname = 'Region'.
field_tab-intlen = 20.
field_tab-outputlen = 20.
field_tab-inttype = 'C'.
field_tab-scrtext_m = 'State No'.
APPEND field_tab.
itab contains value:
data Region State No
1 CR 1
2 CR 2
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'E_VALUE'
dynprofield = 'A'
dynpprog = sy-cprog
dynpnr = sy-dynnr
TABLES
value_tab = itab
field_tab = field_tab
return_tab = return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
if i choose data 2, return_tab will give value of
SHLPNAME ~
FIELDNAME E_VALUE
RECORDPOS 0001
FIELDVAL C CR
RETFIELD C PRPS-USR01
how can i know that from itab, the CR value i choose is from data 2 , because return_tab-recordpos returns value of 0001Hi,
check the following code.
data: lt_retval type standard table of ddshretval,
ls_retval like ddshretval,
lt_dynmap type standard table of dselc,
ls_dynmap type dselc,
dynp_values type standard table of dynpread ,
wa_dynp_values type dynpread,
lt_values type table of seahlpres,
lt_fields type table of dfies,
ls_field type dfies,
ls_return type ddshretval.
clear ls_field.
ls_field-fieldname = 'SKILLS'.
ls_field-intlen = 15.
ls_field-leng = 15.
ls_field-outputlen = 15.
ls_field-scrtext_m = 'SKILLS AVALIABLE'.
append ls_field to lt_fields.
clear ls_field.
ls_field-fieldname = 'DESCRIPTION'.
ls_field-intlen = 25.
ls_field-leng = 25.
ls_field-outputlen = 25.
ls_field-scrtext_m = 'DESCRIPTION'.
append ls_field to lt_fields.
perform fill_values using 'C' 'C programming'.
perform fill_values using 'C+' 'C+ Programming'.
perform fill_values using 'ABAP' 'ABAP Language'.
perform fill_values using 'JAVA' 'JAVA programming'.
perform fill_values using 'SAP SCRIPT' 'Working with SAP Scripts'.
perform fill_values using 'SMART FORMS' 'Smart forms'.
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
exporting
retfield = 'SKILLS'
dynpprog = sy-repid
tables
value_tab = gt_values
field_tab = lt_fields
return_tab = lt_retval
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.
clear ls_retval.
read table lt_retval into ls_retval index 1.
move ls_retval-fieldval to p_skills.
PS: p_skills is parameter @ selection screen.
Regards,
Niyaz -
How to retrieve the selected value in f4if_int_table_value_request
hi guys,
I have created a search help using fm f4if_int_table_value_request,my value table contains several fields including vbeln. When i am selecting a record the return table is capturing the last column of the record but i want to select the vbeln which is in the first column.
Plz help...MODULE F4_ON_VALUE_REQUEST INPUT.
TYPES : BEGIN OF TYP,
G_VBELN TYPE VBELN,
FKDAT TYPE ZCHEQUEIT-FKDAT,
BASEAMNT TYPE ZCHEQUEIT-AGRV,
SERVTAX TYPE ZCHEQUEIT-SERVT,
BALAMNT TYPE ZCHEQUEIT-BALA,
END OF TYP.
DATA : IT_VAL TYPE TABLE OF TYP,
WA_VAL TYPE TYP,
IT_RET TYPE TABLE OF DDSHRETVAL,
WA_RET TYPE DDSHRETVAL,
IT_DYN TYPE TABLE OF DYNPREAD,
WA_DYN TYPE DYNPREAD,
IT_FIELDTAB TYPE TABLE OF DSELC,
WA_FIELDTAB TYPE DSELC,
LV_VKORG TYPE VKORG,
LV_KUNNR TYPE KUNNR,
INDEX TYPE SY-INDEX.
TYPES : BEGIN OF TY_VBRK,
VBELN TYPE VBRK-VBELN,
KNUMV TYPE VBRK-KNUMV,
FKDAT TYPE VBRK-FKDAT,
NETWR TYPE VBRK-NETWR,
END OF TY_VBRK.
TYPES : BEGIN OF TY_KONV,
KNUMV TYPE KONV-KNUMV,
KSCHL TYPE KONV-KSCHL,
KWERT TYPE KONV-KWERT,
END OF TY_KONV.
DATA : IT_VBRK TYPE STANDARD TABLE OF TY_VBRK,
WA_VBRK TYPE TY_VBRK,
IT_KONV TYPE STANDARD TABLE OF TY_KONV,
WA_KONV TYPE TY_KONV,
G_BASEAMNT TYPE KWERT,
G_SERVTAX TYPE KWERT.
MOVE 'VKORG' TO WA_DYN-FIELDNAME.
APPEND WA_DYN TO IT_DYN.
MOVE 'KUNNR' TO WA_DYN-FIELDNAME.
APPEND WA_DYN TO IT_DYN.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-REPID
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = IT_DYN
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR WA_DYN.
READ TABLE IT_DYN INTO WA_DYN WITH KEY FIELDNAME = 'VKORG' .
LV_VKORG = WA_DYN-FIELDVALUE .
READ TABLE IT_DYN INTO WA_DYN WITH KEY FIELDNAME = 'KUNNR' .
LV_KUNNR = WA_DYN-FIELDVALUE.
SELECT XBLNR FROM BSID INTO TABLE IT_VAL WHERE
BUKRS = LV_VKORG AND KUNNR = LV_KUNNR AND BLART = 'RV'."
SELECT VBELN KNUMV FKDAT NETWR FROM VBRK INTO TABLE IT_VBRK
FOR ALL ENTRIES IN IT_VAL WHERE VBELN = IT_VAL-G_VBELN.
SELECT KNUMV KSCHL KWERT FROM KONV INTO TABLE IT_KONV
FOR ALL ENTRIES IN IT_VBRK WHERE KNUMV = IT_VBRK-KNUMV.
CLEAR : WA_KONV.
LOOP AT IT_VAL INTO WA_VAL.
READ TABLE IT_VBRK INTO WA_VBRK WITH KEY VBELN = WA_VAL-G_VBELN.
IF SY-SUBRC = 0.
WA_VAL-FKDAT = WA_VBRK-FKDAT.
WA_VAL-BALAMNT = WA_VBRK-NETWR.
ENDIF.
LOOP AT IT_KONV INTO WA_KONV WHERE KNUMV = WA_VBRK-KNUMV.
IF WA_KONV-KSCHL = 'ZAGV'.
WA_VAL-BASEAMNT = WA_VAL-BASEAMNT + WA_KONV-KWERT.
ELSEIF WA_KONV-KSCHL = 'JSRT' OR WA_KONV-KSCHL = 'JEC3' OR WA_KONV-KSCHL = 'JES3'.
WA_VAL-SERVTAX = WA_VAL-SERVTAX + WA_KONV-KWERT.
ENDIF.
ENDLOOP.
MODIFY IT_VAL FROM WA_VAL TRANSPORTING FKDAT BALAMNT. "BASEAMNT SERVTAX
CLEAR : WA_KONV,WA_VBRK,WA_VAL.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = 'TYP'
RETFIELD = 'VBELN'
* PVALKEY = ' '
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'Invoice No.'
* DYNPROFIELD = 'WA_ZCHEQUEIT-VBELN'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = IT_VAL
* FIELD_TAB = IT_FIELDTAB
RETURN_TAB = IT_RET
* DYNPFLD_MAPPING = it_fieldtab.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR : WA_DYN,LV_VKORG,LV_KUNNR.
REFRESH : IT_DYN,IT_VAL,IT_RET.
ENDMODULE. " F4_ON_VALUE_REQUEST INPUT -
In a dialog program I"m using the 'on value request' to call a routine that builds a dropdown on a field. It looks like this:
PROCESS ON VALUE-REQUEST.
FIELD ekpo_ci-zzlicnum module build_search.
Within build_search, I build itab_values with the dropdown values and the function module is called:
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING RETFIELD = 'ZZLICNUM'
DYNPPROG = w_progname
DYNPNR = w_scr_num
DYNPROFIELD = 'ZZLICNUM'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = ITAB_VALUES
RETURN_TAB = RETURN_VALUES
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
The routine calls F4IF_INT_TABLE_VALUE_REQUEST and in the dropdown, 5 fields are shown in each row (built in an internal table itab_values). When I select one of the rows, it returns the field value for zzlicnum in return_values. Is there a way to also return the other values I have in itab_values (other than just zzlicnum) - I need to use the other fields that are associated with zzlicnum in my program for some additional logic.
I appreciate any help!hi,
refer to these codes:
you can change something according to your requirement.
PARAMETERS:
a TYPE char10,
b TYPE char10,
c TYPE char10.
DATA:
BEGIN OF tab OCCURS 0,
field1 TYPE char10,
field2 TYPE char10,
field3 TYPE char10,
END OF tab,
wa LIKE LINE OF tab,
DYNPFLD_MAPPING TYPE STANDARD TABLE OF DSELC,
dyn_wa TYPE DSELC,
lt_return TYPE TABLE OF DDSHRETVAL,
lwa_return TYPE ddshretval.
INITIALIZATION.
wa-field1 = 'aaaaa'.
wa-field2 = 'bbbbb'.
wa-field3 = 'ccccc'.
APPEND wa to tab.
wa-field1 = 'aaaaa'.
wa-field2 = 'bbccc'.
wa-field3 = 'ddddd'.
APPEND wa to tab.
wa-field1 = 'aaaab'.
wa-field2 = 'bbccc'.
wa-field3 = 'eeeee'.
APPEND wa to tab.
dyn_wa-FLDNAME = 'FIELD1'.
dyn_wa-DYFLDNAME = 'A'.
APPEND dyn_wa to DYNPFLD_MAPPING.
dyn_wa-FLDNAME = 'FIELD2'.
dyn_wa-DYFLDNAME = 'B'.
APPEND dyn_wa to DYNPFLD_MAPPING.
dyn_wa-FLDNAME = 'FIELD3'.
dyn_wa-DYFLDNAME = 'C'.
APPEND dyn_wa to DYNPFLD_MAPPING.
AT SELECTION-SCREEN on VALUE-REQUEST FOR a.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'FIELD1'
* PVALKEY = ' '
DYNPPROG = sy-cprog
DYNPNR = '1000'
DYNPROFIELD = 'A'
* STEPL = 0
* WINDOW_TITLE = WINDOW_TITLE
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
CALLBACK_PROGRAM = sy-cprog
CALLBACK_FORM = 'CALLBACK_F4'
* MARK_TAB = MARK_TAB
* IMPORTING
* USER_RESET = USER_RESET
TABLES
value_tab = tab
* FIELD_TAB = FIELD_TAB
RETURN_TAB = lt_return
* DYNPFLD_MAPPING = DYNPFLD_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 callback_f4 TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr
callcontrol LIKE ddshf4ctrl.
DATA:
ls_intf LIKE LINE OF shlp-interface,
ls_prop LIKE LINE OF shlp-fieldprop.
*Hide unwanted fields
CLEAR: ls_prop-shlpselpos,
ls_prop-shlplispos.
* MODIFY shlp-fieldprop FROM ls_prop
* TRANSPORTING shlpselpos shlplispos
* WHERE ( fieldname NE 'F0001' AND
* fieldname NE 'F0002' AND
* fieldname NE 'F0003' ).
* " Overwrite selectable fields on search help
REFRESH: shlp-interface.
ls_intf-shlpfield = 'F0001'.
ls_intf-valfield = 'A'.
ls_intf-f4field = 'X'.
APPEND ls_intf TO shlp-interface.
ls_intf-shlpfield = 'F0002'.
ls_intf-valfield = 'B'.
ls_intf-f4field = 'X'.
APPEND ls_intf TO shlp-interface.
ls_intf-shlpfield = 'F0003'.
ls_intf-valfield = 'C'.
ls_intf-f4field = 'X'.
APPEND ls_intf TO shlp-interface.
ENDFORM. -
Return all the column values using the F4IF_INT_TABLE_VALUE_REQUEST
Hi,
How to return all the column values using the F4IF_INT_TABLE_VALUE_REQUEST?
For example : if the row has 3 columns then after selecting the particular row, the RETURN_TAB internal table should contain all the three column values.
Regards,
RaghuHi,
Try the following...
DATA : it_fields like help_value occurs 1 with header line.
data: begin of w_vbap,
vbeln like vbap-vbeln,
posnr like vbap-posnr,
werks like vbap-werks,
end of w_vbap.
data: i_vbap like w_vbap occurs 0 with header line,
w_fields type help_value,
i_dfies type table of dfies,
i_return_tab type table of ddshretval with header line,
i_field type dfies.
select vbeln posnr werks
from vbap into table i_vbap up to 5 rows.
if sy-subrc = 0.
sort i_vbap by vbeln.
endif.
clear it_fields[] , it_fields.
it_fields-tabname = c_vbap.
it_fields-fieldname = 'VBELN'.
it_fields-selectflag = c_on.
append it_fields.
it_fields-tabname = c_vbap.
it_fields-fieldname = 'POSNR'.
it_fields-selectflag = space.
append it_fields.
it_fields-tabname = c_vbap.
it_fields-fieldname = 'WERKS'.
it_fields-selectflag = space.
append it_fields.
loop at it_fields into w_fields.
i_field-tabname = w_fields-tabname.
i_field-fieldname = w_fields-fieldname.
i_field-keyflag = w_fields-selectflag.
append i_field to i_dfies.
endloop.
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
exporting
retfield = 'VBELN'
window_title = 'Select'
tables
value_tab = i_vbap
field_tab = i_dfies
return_tab = i_return_tab
exceptions
parameter_error = 1
no_values_found = 2
others = 3
read table i_return_tab into w_return_tab index 1.
if sy-subrc = 0.
endif.
Regards,
Srini. -
Hi gurus,
Im making a search help using FM F4IF_INT_TABLE_VALUE_REQUEST with multiple choice and it's working fine, my problem it's passing the values choosed from this FM to the screen...
I've declare a select option, and what i want it's to pass the choosen values from the search help to the screen but it's not working fine... i already tried the FM DYNP_VALUES_UPDATE to update the screen field but still yhe same...
Below goes my code, just in case...
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZLINHA'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'SO_NUM'
window_title = 'Programa'
value_org = 'S'
multiple_choice = 'X'
TABLES
value_tab = it_values
return_tab = return_tab.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
LOOP AT return_tab.
* CLEAR r_num.
so_num-option = 'EQ'.
so_num-sign = 'I'.
MOVE 'SO_NUM' TO dynpfields-fieldname.
MOVE return_tab-fieldval TO dynpfields-fieldvalue.
APPEND dynpfields.
* so_num-low = return_tab-fieldval.
* APPEND so_num.
ENDLOOP.
ENDIF.
CLEAR dynpfields.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = progname
dynumb = dynnum
TABLES
dynpfields = dynpfields.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
If anyone has any idea, feel free to speak
Thanks in advance,
Best RegardsHi Martins,
You have used the select options that means you have to use the function module for the <select-option >-low and <select-option>-high.
I am giving you a code snippet in which the selection screen has select-options and with the help of function module it shows F4 help and pass the values.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-023.
SELECT-OPTIONS:S_PIDNUM FOR ZMST_PERMIT-ZPIDNUM ,
S_ENGDSC FOR ZMST_PERMIT-ZENGDSC NO INTERVALS LOWER CASE,
S_ARBDSC FOR ZMST_PERMIT-ZARBDSC NO INTERVALS LOWER CASE,
S_TARIFF FOR ZMST_PERMIT-ZTARIFF NO INTERVALS,
S_PERNUM FOR ZMST_PERMIT-ZPERNUM NO INTERVALS,
S_ARRPRT FOR ZMST_PERMIT-ZARRPRT NO INTERVALS MATCHCODE OBJECT ZMST_PORTS.
PARAMETER:P_PERTYP(2) TYPE C AS LISTBOX VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK B1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_PIDNUM-LOW.
W_NAME2 = 'S_PIDNUM-LOW'.
W_NAME1 = 'ZPIDNUM'.
PERFORM F4_HELP USING W_NAME1 W_NAME2 . "calling subroutine to provide desired F4 help
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_PIDNUM-HIGH.
W_NAME2 = 'S_PIDNUM-HIGH'.
W_NAME1 = 'ZPIDNUM'.
PERFORM F4_HELP USING W_NAME1 W_NAME2 . "calling subroutine to provide desired F4 help
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_ENGDSC-LOW.
W_NAME2 = 'S_ENGDSC'.
W_NAME1 = 'ZENGDSC'.
PERFORM F4_HELP USING W_NAME1 W_NAME2 . "calling subroutine to provide desired F4 help
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_ARBDSC-LOW.
W_NAME2 = 'S_ARBDSC'.
W_NAME1 = 'ZARBDSC'.
PERFORM F4_HELP USING W_NAME1 W_NAME2 . "calling subroutine to provide desired F4 help
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_TARIFF-LOW.
W_NAME2 = 'S_TARIFF'.
W_NAME1 = 'ZTARIFF'.
PERFORM F4_HELP USING W_NAME1 W_NAME2 . "calling subroutine to provide desired F4 help
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_PERNUM-LOW.
W_NAME2 = 'S_PERNUM'.
W_NAME1 = 'ZPERNUM'.
PERFORM F4_HELP USING W_NAME1 W_NAME2 . "calling subroutine to provide desired F4 help
*& Form F4_HELP
text
--> p1 text
<-- p2 text
FORM F4_HELP USING: W_VAR TYPE DFIES-FIELDNAME
W_VAR1 TYPE HELP_INFO-DYNPROFLD .
Fetching data from zmst_permit for F4 help on PERMIT ID No.--
IF IT_PERMIT[] IS INITIAL.
SELECT ZPIDNUM
ZENGDSC
ZARBDSC
ZTARIFF
ZPERNUM
ZARRPRT
ZEFFDT
ZEXPDT
FROM ZMST_PERMIT INTO CORRESPONDING FIELDS OF TABLE IT_PERMIT.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = W_NAME1 " 'ZPIDNUM'
DYNPPROG = 'ZMSTR0022'
DYNPNR = SY-DYNNR
DYNPROFIELD = W_NAME2 "'S_PIDNUM'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = IT_PERMIT
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.
ENDFORM. " F4_HELP
I hope this will help you.
Help children of U.N World Food Program by rewarding points and encourage others to answer your queries. -
Hi.,
I am using FM F4IF_INT_TABLE_VALUE_REQUEST to display F4 for a Particular field .
But while displaying a field(ISBN) with 13 characters is displayed only with value of 8 characters only. kindly advice.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'ESTNO'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC001_ESTMAST_HD'.
IT_FT-FIELDNAME = 'VERSN'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'VERSN'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'SIRNO'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'TITNR'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'KUNNR'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'NAME1'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'JBDVN'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'MAKTX'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'TPWRK'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'ISBNO'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'ORDDAT'.
APPEND IT_FT.
IT_DM-FLDNAME = 'ESTNO'.
IT_DM-DYFLDNAME = 'IT_ESTMAS-ESTNO'.
APPEND IT_DM.
IT_DM-FLDNAME = 'VERSN'.
IT_DM-DYFLDNAME = 'IT_ESTMAS-VERSN'.
APPEND IT_DM.
IT_DM-FLDNAME = 'SIRNO'.
IT_DM-DYFLDNAME = 'IT_ESTMAS-SIRNO'.
APPEND IT_DM.
IT_DM-FLDNAME = 'SERIS'.
IT_DM-DYFLDNAME = 'ZV001_TITLMAS_HD'.
APPEND IT_DM.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
DDIC_STRUCTURE = 'IT_VALUE'
DDIC_STRUCTURE = 'ZC002_ESTNOF4'
RETFIELD = 'ESTNO'
PVALKEY = ' '
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'IT_ESTMAS-ESTNO'
VALUE_ORG = 'S'
STEPL = 0
TABLES
VALUE_TAB = IT_MESTNO_F4
FIELD_TAB = IT_FT
RETURN_TAB = IT_RT
DYNPFLD_MAPPING = IT_DM
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.
Regards.,
S.SivakumarHi.,
i think i confused u all . i will paste the entire code here .
DATA : BEGIN OF IT_MESTNO_F4 OCCURS 0,
MANDT LIKE ZC001_ESTMAST_HD-MANDT,
ESTNO LIKE ZC001_ESTMAST_HD-ESTNO,
VERSN LIKE ZC001_ESTMAST_HD-VERSN,
SIRNO LIKE ZC001_ESTMAST_HD-SIRNO,
TITNR LIKE ZV001_TITLMAS_HD-TITNR,
TPWRK LIKE ZV001_TITLMAS_HD-TPWRK,
KUNNR LIKE ZC001_ESTMAST_HD-KUNNR,
NAME1 LIKE KNA1-NAME1,
JBDVN LIKE ZC001_ESTMAST_HD-JBDVN,
MAKTX LIKE ZV001_TITLMAS_HD-MAKTX,
ISBNO TYPE ZV001_TITLMAS_HD-ISBNO,
END OF IT_MESTNO_F4.
CLEAR: IT_MESTNO_F4[], IT_MESTNO_F4,
IT_FT[], IT_FT,
IT_DM[], IT_DM,
IT_RT[], IT_RT.
*ORDDAT
SELECT DISTINCT ESTNO VERSN SIRNO FROM ZC001_BUDMAS_MAT INTO CORRESPONDING FIELDS OF TABLE IT_MESTNO_F4.
SELECT ESTNO VERSN SIRNO FROM ZC001_ESTMAST_HD INTO CORRESPONDING FIELDS OF TABLE IT_MESTNO_F4 WHERE ZSAVE EQ 'X'..
SELECT DISTINCT A~ESTNO A~VERSN A~SIRNO A~TITNR A~TPWRK A~KUNNR D~NAME1 JBDVN B~MAKTX ISBNO
FROM ZC001_ESTMAST_HD AS A INNER JOIN ZV001_TITLMAS_HD AS B
ON A~TITNR = B~TITNR
INNER JOIN ZC001_BUDMAS_MAT AS C
ON A~ESTNO = C~ESTNO AND A~VERSN = C~VERSN AND A~SIRNO = C~SIRNO
INNER JOIN KNA1 AS D
ON A~KUNNR = D~KUNNR
INTO CORRESPONDING FIELDS OF TABLE IT_MESTNO_F4
WHERE ZSAVE EQ SPACE AND ZLOCK EQ SPACE.
SORT IT_MESTNO_F4 BY ESTNO DESCENDING.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'ESTNO'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC001_ESTMAST_HD'.
IT_FT-FIELDNAME = 'VERSN'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'VERSN'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'SIRNO'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'TITNR'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'KUNNR'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'NAME1'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'JBDVN'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'MAKTX'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'TPWRK'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'ISBNO'.
APPEND IT_FT.
IT_FT-TABNAME = 'ZC002_ESTNOF4'.
IT_FT-FIELDNAME = 'ORDDAT'.
APPEND IT_FT.
IT_DM-FLDNAME = 'ESTNO'.
IT_DM-DYFLDNAME = 'IT_ESTMAS-ESTNO'.
APPEND IT_DM.
IT_DM-FLDNAME = 'VERSN'.
IT_DM-DYFLDNAME = 'IT_ESTMAS-VERSN'.
APPEND IT_DM.
IT_DM-FLDNAME = 'SIRNO'.
IT_DM-DYFLDNAME = 'IT_ESTMAS-SIRNO'.
APPEND IT_DM.
IT_DM-FLDNAME = 'SERIS'.
IT_DM-DYFLDNAME = 'ZV001_TITLMAS_HD'.
APPEND IT_DM.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
DDIC_STRUCTURE = 'IT_VALUE'
DDIC_STRUCTURE = 'ZC002_ESTNOF4'
RETFIELD = 'ESTNO'
PVALKEY = ' '
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'IT_ESTMAS-ESTNO'
VALUE_ORG = 'S'
STEPL = 0
TABLES
VALUE_TAB = IT_MESTNO_F4
FIELD_TAB = IT_FT
RETURN_TAB = IT_RT
DYNPFLD_MAPPING = IT_DM
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.
Regards.,
S.Sivakumar
Maybe you are looking for
-
My daughter has been missing for a week and has a serious medical condition. She has an iPhone 4S and when I log into find my iPhone it says online , location services off. Does that mean there is no way to track the phone? Please I'm willing to tr
-
Hi all, I want to clear the customer open items using the t code f-32. But when i save the document getting error' Please specify an internal number range' .How to solve this error. urgent.
-
How can I start windows 8 without useing my password
how can I start windows 8 without useing my password
-
Complaint to Lenovo main company!
To: Lenevo Quality AssuranceFrom: Customer (Bahrain - ME) Subject: Complaint on Lenovo's Dealer in Bahrain [ Ensure shop ]. I have faced a very disappointing experience with lenovo dealer in Bahrain [ Ensure shop ] when I faced few problems with my 9
-
IMac gets stuck at grey screen with Apple logo and spinning gear
I have tried everything listed at http://support.apple.com/kb/TS2570 with no avail. Also, I have tried fsck from SUM, nothing. It will not boot to the CD either, even with the Hard Drive pulled from the machiene. Any ideas?