‎2013 Nov 25 8:01 AM
Hi Gurus,
I have one functionality, there are 2 parameters,when user click F4 search help on 1st parameter , automatically value should be populated in other parameter.
But in my case once I get the value from search help, after pressing enter it is populating value in other parameter.
But I need to populate automatic without entering parameter.
Below is my sample code.
TYPE-POOLS: slis.
TABLES: mara.
TYPES: BEGIN OF t_makt,
matnr TYPE matnr,
END OF t_makt.
PARAMETER: p_matnr TYPE makt-matnr,
p_maktx TYPE makt-maktx." MODIF ID GR1.
DATA: lt_makt TYPE STANDARD TABLE OF t_makt,
lwa_makt TYPE t_makt.
DATA lt_return LIKE ddshretval OCCURS 0 WITH HEADER LINE .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr.
SELECT matnr FROM mara INTO TABLE lt_makt UP TO 200 ROWS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MATNR'
value_org = 'S'
TABLES
value_tab = lt_makt
* field_tab = lt_return
return_tab = lt_return.
p_matnr = lt_return-fieldval.
*at SELECTION-SCREEN o
* AT SELECTION-SCREEN ON p_maktx.
LOOP AT SCREEN.
IF p_matnr = '10000' AND screen-name = 'P_MAKTX'.
p_maktx = 'ABC'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
‎2013 Nov 25 8:30 AM
Try this,.
SELECT matnr FROM mara INTO TABLE lt_makt UP TO 200 ROWS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MATNR'
value_org = 'S'
TABLES
value_tab = lt_makt
* field_tab = lt_return
return_tab = lt_return.
p_matnr = lt_return-fieldval.
* Populate the other field here itself and call FM to update screen
IF p_matnr = '10000' .
p_maktx = 'ABC'.
ENDIF.
Check this code.
SELECT matnr FROM mara INTO TABLE lt_makt UP TO 200 ROWS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MATNR'
value_org = 'S'
TABLES
value_tab = lt_makt
* field_tab = lt_return
return_tab = lt_return.
p_matnr = lt_return-fieldval.
data wa_makt type makt.
data : lt_dynpread TYPE STANDARD TABLE OF dynpread,
ls_dynpread TYPE dynpread.
* Get the value for desc.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = p_matnr
IMPORTING
OUTPUT = p_matnr
.
select single * from makt into wa_makt where matnr = p_matnr and spras = sy-langu.
p_maktx = wa_makt-maktx.
*Update it in field.
ls_dynpread-fieldname = 'P_MAKTX'..
ls_dynpread-fieldvalue = wa_makt-maktx.
APPEND ls_dynpread TO lt_dynpread.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-cprog " prog id
dynumb = sy-dynnr " screen no
TABLES
dynpfields = lt_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.
‎2013 Nov 25 8:07 AM
Hi Sumeet,
I think you are harcoding the values here which is wrong. You need to use a combination of DYNP_VALUES_READ and F4IF_INT_TABLE_VALUE_REQUEST.
BR.
‎2013 Nov 25 9:57 AM
Try like this
TYPE-POOLS: slis.
TABLES: mara.
TYPES: BEGIN OF t_makt,
matnr TYPE matnr,
END OF t_makt.
PARAMETER: p_matnr TYPE makt-matnr,
p_maktx TYPE makt-maktx.
DATA: lt_makt TYPE STANDARD TABLE OF t_makt,
lwa_makt TYPE t_makt.
DATA dyfields LIKE dynpread OCCURS 1 WITH HEADER LINE.
DATA lt_return LIKE ddshretval OCCURS 0 WITH HEADER LINE .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr.
SELECT matnr FROM mara INTO TABLE lt_makt UP TO 200 ROWS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MATNR'
value_org = 'S'
TABLES
value_tab = lt_makt
* field_tab = lt_return
return_tab = lt_return.
p_matnr = lt_return-fieldval.
CLEAR: dyfields[], dyfields.
***--- select Material
* CALL FUNCTION 'HELP_VALUES_GET'
* EXPORTING
* fieldname = 'MATNR'
* tabname = 'MAKT'
* IMPORTING
* select_value = p_matnr.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = p_matnr
IMPORTING
output = p_matnr
* EXCEPTIONS
* LENGTH_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.
*--- get long text for the selected material
SELECT SINGLE maktx FROM makt
INTO dyfields-fieldvalue
WHERE spras = sy-langu
AND matnr = p_matnr.
IF sy-subrc <> 0.
CLEAR dyfields-fieldvalue.
ENDIF.
*--- update another field
dyfields-fieldname = 'P_MAKTX'.
APPEND dyfields.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
TABLES
dynpfields = dyfields.
‎2013 Nov 25 8:13 AM
Hi,
In the FM F4IF_INT_TABLE_VALUE_REQUEST pass the field_tab,value_tab and dynprofield_mapping.
Field_tab is an internal table of type dfies which is used for displaying fields on search help.append required tabname and fieldname to it.
Dynprofield_mapping is an internal table of type dselc used for mapping the values to the fields,append the required fldname and dyfldname to it.
DATA: t_itab TYPE STANDARD TABLE OF sflight.
DATA :dd TYPE TABLE OF dselc WITH HEADER LINE,
ft TYPE TABLE OF dfies WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK b.
PARAMETERS : p_conn TYPE S_CONN_ID ,
p_car TYPE S_CARR_ID,
p_dte TYPE S_DATE.
SELECTION-SCREEN END OF BLOCK b.
"Attaching Search Help
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_conn.
IF t_itab IS INITIAL.
SELECT *
FROM sflight
INTO TABLE t_itab.
"Specifing The Populating Fields
REFRESH dd.
dd-fldname = 'CARRID'.
dd-dyfldname = 'P_CAR'.
APPEND dd.
dd-fldname = 'FLDATE'.
dd-dyfldname = 'P_DTE'.
APPEND dd.
"Specifing Fields Dispayed on Search Help
REFRESH ft.
ft-tabname = 'SFLIGHT'.
ft-fieldname = 'CARRID'.
APPEND ft.
ft-tabname = 'SFLIGHT'.
ft-fieldname = 'CONNID'.
APPEND ft.
ENDIF.
"Displaying Search Help
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CONNID'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_CONN'
value_org = 'S'
TABLES
field_tab = ft
value_tab = t_itab
dynpfld_mapping = dd
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
Regards,
Jeffin
‎2013 Nov 25 8:30 AM
Try this,.
SELECT matnr FROM mara INTO TABLE lt_makt UP TO 200 ROWS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MATNR'
value_org = 'S'
TABLES
value_tab = lt_makt
* field_tab = lt_return
return_tab = lt_return.
p_matnr = lt_return-fieldval.
* Populate the other field here itself and call FM to update screen
IF p_matnr = '10000' .
p_maktx = 'ABC'.
ENDIF.
Check this code.
SELECT matnr FROM mara INTO TABLE lt_makt UP TO 200 ROWS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MATNR'
value_org = 'S'
TABLES
value_tab = lt_makt
* field_tab = lt_return
return_tab = lt_return.
p_matnr = lt_return-fieldval.
data wa_makt type makt.
data : lt_dynpread TYPE STANDARD TABLE OF dynpread,
ls_dynpread TYPE dynpread.
* Get the value for desc.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = p_matnr
IMPORTING
OUTPUT = p_matnr
.
select single * from makt into wa_makt where matnr = p_matnr and spras = sy-langu.
p_maktx = wa_makt-maktx.
*Update it in field.
ls_dynpread-fieldname = 'P_MAKTX'..
ls_dynpread-fieldvalue = wa_makt-maktx.
APPEND ls_dynpread TO lt_dynpread.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-cprog " prog id
dynumb = sy-dynnr " screen no
TABLES
dynpfields = lt_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.
‎2013 Nov 25 8:32 AM
Hi Sumeet
Do as follow. Once your F4 help function module is called and it has returned value. Call FM DYNPRO_VALUE_UPDATE to update the other screen field
Nabheet