‎2007 May 02 7:30 AM
Hi All,
I have two parameters .
I am providing F4 help for both on at selection screen on value request for field .....
and i am using the function Module 'F4IF_INT_TABLE_VALUE_REQUEST'
and assigning the values through Return_tab of the function Module .
the F4 help for second field is based on first field value.
Now the Problem is if i am selecting the value for first field using the F4 help then i am getting the F4 values for the second field also .
But if i am directly assigning the values for first field without using the F4 help then i am not getting the F4 values for the second field. First field remains blank in debug mode. so i am not getting the F4 values for second field since it is dependent on first field value.
am i missing anything.
I am attaching code of F4 Help for the first field :
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BUKRS'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'PR_BUKC'
value_org = 'S'
TABLES
value_tab = it_bukrs
return_tab = it_rtab
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.
READ TABLE it_rtab INTO wa_rtab INDEX 1.
IF sy-subrc = 0.
pr_bukc = wa_rtab-fieldval.
ENDIF.
ENDIF.
Thanks.
‎2007 May 02 7:39 AM
hi
good
go thruogh this and use accordingly.
REPORT DEMO_DYNPRO_F4_HELP_MODULE.
TYPES: BEGIN OF VALUES,
CARRID TYPE SPFLI-CARRID,
CONNID TYPE SPFLI-CONNID,
END OF VALUES.
DATA: CARRIER(3) TYPE C,
CONNECTION(4) TYPE C.
DATA: PROGNAME LIKE SY-REPID,
DYNNUM LIKE SY-DYNNR,
DYNPRO_VALUES TYPE TABLE OF DYNPREAD,
FIELD_VALUE LIKE LINE OF DYNPRO_VALUES,
VALUES_TAB TYPE TABLE OF VALUES.
CALL SCREEN 100.
MODULE INIT OUTPUT.
PROGNAME = SY-REPID.
DYNNUM = SY-DYNNR.
CLEAR: FIELD_VALUE, DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'CARRIER'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
ENDMODULE.
MODULE CANCEL INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE VALUE_CARRIER INPUT.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
TABNAME = 'DEMOF4HELP'
FIELDNAME = 'CARRIER1'
DYNPPROG = PROGNAME
DYNPNR = DYNNUM
DYNPROFIELD = 'CARRIER'.
ENDMODULE.
MODULE VALUE_CONNECTION INPUT.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = PROGNAME
DYNUMB = DYNNUM
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPRO_VALUES.
READ TABLE DYNPRO_VALUES INDEX 1 INTO FIELD_VALUE.
SELECT CARRID CONNID
FROM SPFLI
INTO CORRESPONDING FIELDS OF TABLE VALUES_TAB
WHERE CARRID = FIELD_VALUE-FIELDVALUE.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CONNID'
DYNPPROG = PROGNAME
DYNPNR = DYNNUM
DYNPROFIELD = 'CONNECTION'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = VALUES_TAB.
ENDMODULE.
http://help.sap.com/saphelp_nw04/helpdata/en/9f/dbaac935c111d1829f0000e829fbfe/content.htm
thanks
mrutyun^
‎2007 May 02 7:35 AM
Hi,
The problem i can understand is first field remains blank and that is why the second field F4 is not working..
<b>The simple thing you have to do is after entering the value in the first field "press enter" .</b>
Hope this will solve your problem.
Award Points if it solves your purpose.
-Gaurang
‎2007 May 02 7:36 AM
‎2007 May 02 7:36 AM
You dont have to populate your field by reading return_tab.
Try this :
lv_repid = sy-repid.
lv_dynnr = sy-dynnr.
lv_dyn_field = gc_f4_field.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
ddic_structure = lv_struct
retfield = lv_fieldname
dynpprog = lv_repid
dynpnr = lv_dynnr
dynprofield = 'PR_BUKC'
value_org = gc_value_org
TABLES
value_tab = it_gt_depts
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.
And how can both value-request be triggered at same time ?
Only one f4 can come up at one time, unless you are calling two FMs.
Pls explain that
‎2007 May 02 7:37 AM
HI Suchi,
F4 help is a PAI event, normally it will be trigerd when any action takes place,
when we press F4, a action takes place and the the AT SELECTIOn-SCREEN ON VALUE REQUEST will be triggerd, if you want to fill the second field also then press enter then it will be filled
Regards
Sudheer
‎2007 May 02 7:39 AM
hi
good
go thruogh this and use accordingly.
REPORT DEMO_DYNPRO_F4_HELP_MODULE.
TYPES: BEGIN OF VALUES,
CARRID TYPE SPFLI-CARRID,
CONNID TYPE SPFLI-CONNID,
END OF VALUES.
DATA: CARRIER(3) TYPE C,
CONNECTION(4) TYPE C.
DATA: PROGNAME LIKE SY-REPID,
DYNNUM LIKE SY-DYNNR,
DYNPRO_VALUES TYPE TABLE OF DYNPREAD,
FIELD_VALUE LIKE LINE OF DYNPRO_VALUES,
VALUES_TAB TYPE TABLE OF VALUES.
CALL SCREEN 100.
MODULE INIT OUTPUT.
PROGNAME = SY-REPID.
DYNNUM = SY-DYNNR.
CLEAR: FIELD_VALUE, DYNPRO_VALUES.
FIELD_VALUE-FIELDNAME = 'CARRIER'.
APPEND FIELD_VALUE TO DYNPRO_VALUES.
ENDMODULE.
MODULE CANCEL INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE VALUE_CARRIER INPUT.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
TABNAME = 'DEMOF4HELP'
FIELDNAME = 'CARRIER1'
DYNPPROG = PROGNAME
DYNPNR = DYNNUM
DYNPROFIELD = 'CARRIER'.
ENDMODULE.
MODULE VALUE_CONNECTION INPUT.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = PROGNAME
DYNUMB = DYNNUM
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPRO_VALUES.
READ TABLE DYNPRO_VALUES INDEX 1 INTO FIELD_VALUE.
SELECT CARRID CONNID
FROM SPFLI
INTO CORRESPONDING FIELDS OF TABLE VALUES_TAB
WHERE CARRID = FIELD_VALUE-FIELDVALUE.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'CONNID'
DYNPPROG = PROGNAME
DYNPNR = DYNNUM
DYNPROFIELD = 'CONNECTION'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = VALUES_TAB.
ENDMODULE.
http://help.sap.com/saphelp_nw04/helpdata/en/9f/dbaac935c111d1829f0000e829fbfe/content.htm
thanks
mrutyun^
‎2007 May 02 7:39 AM
Hi Suchi,
You might not writing the "At selection-screen on value request ....." event in sequence of the fields.
For the first field write the its "At selection-screen on value request ....." first, then for the second.
Or can you post your code including the "At selection-screen..." events.
Regards,
Hemant.
‎2007 May 02 7:42 AM
Hi Suchi,
In at selection screen on value request for field ( second field )
Use FUNCTION 'DYNP_VALUES_READ' to read the value of the first field
and then based on this value use 'F4IF_INT_TABLE_VALUE_REQUEST' for displaying the F4 values for second field
Sample code to be written on search help of second field
form sub_f4_prctr.
TYPES : BEGIN OF ty_prctr,
prctr TYPE cepct-prctr,
ktext TYPE cepct-ktext,
END OF ty_prctr.
DATA: lt_prctr TYPE TABLE OF ty_prctr,
lt_dynpread TYPE TABLE OF dynpread,
wa_dynpread TYPE dynpread,
lv_line TYPE char01.
gv_progname = sy-repid.
gv_dynnum = sy-dynnr.
Field name of the first field
wa_dynpread-fieldname = 'WA_ZFPASALESGROUP-KOKRS'.
APPEND wa_dynpread TO lt_dynpread.
Function Module to read the screen values
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = gv_progname
dynumb = gv_dynnum
determine_loop_index = lv_line
TABLES
dynpfields = lt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Get the screen value
READ TABLE lt_dynpread INTO wa_dynpread INDEX 1.
IF sy-subrc = 0.
SELECT prctr
ktext
FROM cepct
INTO TABLE lt_prctr
WHERE spras = 'EN'
AND kokrs = wa_dynpread-fieldvalue.
IF sy-subrc = 0.
Call function for F4 search help
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PRCTR'
dynpprog = gv_progname
dynpnr = gv_dynnum
dynprofield = 'WA_ZFPASALESGROUP-PRCTR'
value_org = 'S'
TABLES
value_tab = lt_prctr.
ELSE.
MESSAGE s013(zf).
ENDIF.
ENDIF.
ENDFORM. " sub_f4_prctr
Regards,
Mohan
‎2007 May 02 7:43 AM
Hi,
make obligatory for first field & press enter after type a value into 1st field.
‎2007 May 02 7:43 AM
Hi suchi,
Before using the F4 help for second field , add this and checkout if it workks
DATA: progname TYPE sy-repid,
dynnum TYPE sy-dynnr,
dynpro_values TYPE TABLE OF dynpread,
field_value LIKE LINE OF dynpro_values.
progname = sy-repid.
dynnum = sy-dynnr.
CLEAR: field_value, dynpro_values.
field_value-fieldname = 'CARRIER'.
APPEND field_value TO dynpro_values.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = progname
dynumb = dynnum
translate_to_upper = 'X'
TABLES
dynpfields = dynpro_values.
READ TABLE dynpro_values INDEX 1 INTO field_value.Now use F4IF_INT_TABLE_VALUE_REQUEST for the second field F4 help
Message was edited by:
Chandrasekhar Jagarlamudi
‎2007 May 02 7:48 AM
Dear all,
As some of you have mentioned
First FIeld is a mandatory Field .
and I have tried pressing enter for many number of times.
and my program is not module pool and it is just a normal selection screen program.
Any other suggestions.
Thanks
‎2007 May 02 8:12 AM
Dear all,
Its worked after using the FM DYNP_VALUES_READ
Thanks
Suchi
‎2007 May 02 8:13 AM
try this it will solve ur problem. in thse code i m providing F4 help in third field based on first & second field. if u will assigning values directly it will also work.
DATA: BEGIN OF ITAB_PO OCCURS 0,
EBELN TYPE EKKO-EBELN,
BSTYP TYPE EKKO-BSTYP,
BSART TYPE EKKO-BSART,
END OF ITAB_PO.
data: dynfields type table of dynpread with header line.
DATA: BEGIN OF TEXT ,
INPUT1(6) TYPE C VALUE 'PO_CTG',
INPUT2(6) TYPE C VALUE 'PO_TYP',
END OF TEXT.
DATA: FLD_INPUT(6) TYPE C.
DATA: BEGIN OF ITAB_F4 OCCURS 0,
FLD_NM(6) TYPE C,
END OF ITAB_F4.
*****************SELECTION SCREEN***************************
SELECTION-SCREEN: BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: PO_CTG LIKE EKKO-BSTYP OBLIGATORY.
PARAMETERS: PO_TYP LIKE EKKO-BSART OBLIGATORY.
SELECT-OPTIONS: PO_NO FOR EKKO-EBELN OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK BLK1.
***********F4 HELP IN RESPECT OF OP TYPE & PO Category********
at selection-screen on value-request for PO_NO-LOW.
CLEAR ITAB_F4.
REFRESH ITAB_F4.
CLEAR dynfields.
REFRESH dynfields.
DO 2 TIMES VARYING FLD_INPUT FROM TEXT-INPUT1 NEXT TEXT-INPUT2 RANGE TEXT.
ITAB_F4-FLD_NM = FLD_INPUT.
APPEND ITAB_F4.
ENDDO.
LOOP AT ITAB_F4.
dynfields-fieldname = ITAB_F4-FLD_NM.
append dynfields.
ENDLOOP.
call function 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields = dynfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
others = 11.
LOOP AT dynfields. " with key fieldname = 'PO_CTG'.
IF dynfields-fieldname = 'PO_CTG'.
PO_CTG = dynfields-fieldvalue.
ELSEIF dynfields-fieldname = 'PO_TYP'.
PO_TYP = dynfields-fieldvalue.
ENDIF.
ENDLOOP.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = PO_CTG
IMPORTING
output = PO_CTG.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = PO_TYP
IMPORTING
output = PO_TYP.
SELECT EBELN BSTYP BSART FROM EKKO INTO TABLE ITAB_PO
WHERE BSTYP EQ PO_CTG AND BSART EQ PO_TYP.
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'EBELN'
dynprofield = 'PO_NO'
dynpprog = sy-cprog
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = ITAB_PO.
at selection-screen on value-request for PO_NO-HIGH.
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'EBELN'
dynprofield = 'PO_NO'
dynpprog = sy-cprog
dynpnr = sy-dynnr
value_org = 'S'
TABLES
value_tab = ITAB_PO.