2009 May 13 7:16 AM
1.source code
{
AT SELECTION-SCREEN ON cb_rep.
PERFORM sub_set_para1.
AT SELECTION-SCREEN ON p_para1.
PERFORM sub_validate_para1.
}
2.problem:
Subroutine 'sub_set_para1' will fetch data and process it.
for example: P_PARA1 = 'ABC' .
Subroutine 'sub_validate_para1.' will check the value of P_PARA1:
{
IF P_PARA1 = 'ABC'.
MESSAGE e398(00) with p_para1 'is wrong' space space.
ENDIF.
}
The problem is the message type is 'E' so the program is still at the 'PAI' of 'SELECTION-SCREEN'
and the value of 'P_PARA1' can not display untill next PBO. But the value 'ABC' has appeared in the message, which will puzzle the user.
So what i want to know is how to refresh 'SELECTION-SCREEN' between two events 'AT selection-screen on '.
u2019DYNP_VALUES_UPDATEu2018 seems not work.
lth_dynpread-fieldname = 'P_PARA1'.
lth_dynpread-fieldvalue = 'ABC'.
APPEND lth_dynpread TO ltd_dynpread.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = SY-REPID
dynumb = SY-DYNNR
tables
dynpfields = ltd_dynpread.
2009 May 13 7:58 AM
Hi Jiang,
Here is one example which is suitable for your requirement. It works fine.
<pre>
REPORT zvenkat_f4_for_parameters MESSAGE-ID zmsg .
&----
" Declaration part
&----
TYPES:
BEGIN OF t_t001w,
werks TYPE t001w-werks,
name1 TYPE t001w-name1,
END OF t_t001w,
t_return_tab TYPE ddshretval.
DATA:
w_t001w TYPE t_t001w,
w_return_tab TYPE t_return_tab.
DATA:
i_t001w TYPE STANDARD TABLE OF t_t001w,
i_return_tab TYPE STANDARD TABLE OF t_return_tab.
&----
"SELECTION-SCREEN
&----
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :p_werks TYPE t001w-werks,
p_name1 TYPE t001w-name1.
SELECTION-SCREEN END OF BLOCK b1.
&----
" AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_werks
&----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_werks.
PERFORM f4_help_for_palant.
&----
*& Form f4_help_for_palant
&----
FORM f4_help_for_palant.
DATA:
w_dynpfields TYPE dynpread,
i_dynpfields LIKE STANDARD TABLE OF dynpread.
IF i_t001w[] IS INITIAL.
SELECT werks name1
FROM t001w
INTO TABLE i_t001w.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'WERKS'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_WERKS'
value_org = 'S'
TABLES
value_tab = i_t001w
return_tab = i_return_tab.
READ TABLE i_return_tab INTO w_return_tab INDEX 1.
p_werks = w_return_tab-fieldval.
READ TABLE i_t001w INTO w_t001w WITH KEY werks = p_werks.
IF sy-subrc = 0.
w_dynpfields-fieldname = 'P_NAME1'.
w_dynpfields-fieldvalue = w_t001w-name1.
APPEND w_dynpfields TO i_dynpfields.
CLEAR w_dynpfields.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
TABLES
dynpfields = i_dynpfields.
ENDIF.
ENDFORM. " f4_help_for_palant
</pre>
Thanks
Venkat.O
2009 May 13 8:33 AM
Hi,
Instead of :
MESSAGE e398(00) with p_para1 'is wrong' space space.
Please try with:
MESSAGE S398(00) DISPLAY LIKE 'E'
with p_para1 'is wrong' space space .
Rgds,
Ramani N