Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

F4 Help

Former Member
0 Likes
1,321

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.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,152

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^

12 REPLIES 12
Read only

Former Member
0 Likes
1,152

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

Read only

Former Member
0 Likes
1,152

Hi,

Try this : Make first field obligatory.

Read only

Former Member
0 Likes
1,152

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

Read only

Former Member
0 Likes
1,152

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

Read only

Former Member
0 Likes
1,153

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^

Read only

Former Member
0 Likes
1,152

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.

Read only

MohanChauhan
Product and Topic Expert
Product and Topic Expert
0 Likes
1,152

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

Read only

Former Member
0 Likes
1,152

Hi,

make obligatory for first field & press enter after type a value into 1st field.

Read only

Former Member
0 Likes
1,152

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

Read only

Former Member
0 Likes
1,152

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

Read only

Former Member
0 Likes
1,152

Dear all,

Its worked after using the FM DYNP_VALUES_READ

Thanks

Suchi

Read only

Former Member
0 Likes
1,152

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.