What a new discussion forum we have
I am trying to create a simple elementary SHelp and attach it to selection screen field.
So basically I am haveing 2 screen fields, like:
p_name TYPE tsp03d-name,
p_papr TYPE znl_printer. "F4
ZNL_PRINTER data element is of predefined type CHAR30.
It has elementary SHelp ZNL_PRINTERS attached (parameter name is NAME).
Selection method: TSP03D
- SHelp parameter: 'NAME' (IMP=X, EXP=X, LPos=Spos=1, Data element=RSPOLNAME)
- SHelp parameter: 'PAPROSNAME' (IMP=X, EXP=X, LPos=Spos=2, Data element=RSPOPRNAME)
So now, let's say I am entering some value into the field p_name, for example *BOB*.
Then I click the p_papr field and press F4.
What I would like to achieve is to fill the NAME parameter of SHelp with a value of p_name selection screen field (*BOB*)
Could you please suggest what should that be done? I know I could use F4IF_INT_TABLE_VALUE_REQUEST FModule to build a SHelp internal table on the fly, based on screen fields value. But I need to use this functionality also in other programs. So developing the logic for each of them would be redundant.
Is there a standard / data dictionary way to achieve the result I described?
Would appreciate your comments.
To get the default value in search help we need to set the parameter id for that perticular field (p_name), before calling the F4 help.
Note: At the search help level set the default value of "name" parameter to it's parameter id.
You can set the parameter id in ' AT SELECTION-SCREEN on VALUE-REQUEST FOR p_papr' event.
But to if use value request then implicit F4 will not work. To call the search help explicitly u can use FM 'F4IF_FIELD_VALUE_REQUEST'
and to read the screen value to set the parameter id use FM 'FM_FYC_DYNPRO_VALUE_READ'.
To know it more clearly I have created an example.
p_dept TYPE yh2165_emp-dept,
p_empno TYPE yh2165_emp-empno.
DATA: fval TYPE DYNFIELDVALUE.
AT SELECTION-SCREEN on VALUE-REQUEST FOR p_empno.
CALL FUNCTION 'FM_FYC_DYNPRO_VALUE_READ'
i_repid = sy-repid
i_dynnr = sy-dynnr
i_fieldname = 'P_DEPT'
E_FIELDVALUE = Fval
set PARAMETER ID 'ZDEPT' FIELD fval.
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
TABNAME = 'YH2165_EMP'
FIELDNAME = 'EMPNO'
SEARCHHELP = 'YH2165_S_EMP'
SHLPPARAM = 'EMPNO'
DYNPPROG = sy-repid
DYNPNR = sy-dynnr
DYNPROFIELD = 'P_EMPNO'
FIELD_NOT_FOUND = 1
NO_HELP_FOR_FIELD = 2
INCONSISTENT_HELP = 3
NO_VALUES_FOUND = 4
OTHERS = 5 .
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
If you any query please let me know.
Thanks a lot Rajeev!
Key for success was to assign Default value to SH's parameter 'PAMSSERVER'.
Your example was very helpful.
I am observing one more strange thing, when setting cursor on the p_papr screen field and pressing F4, search help is displayed properly, with initial value taken from screen, which is great.
But I am losing focus, that means immediately when SH popup table is shown, cursor sets itself on the screen field p_papr, and I need to click mouse on the SH again in order to be able to continue filtering and choosing values.
I have also observed that this symptom starts when additional parameters are used for 'F4IF_FIELD_VALUE_REQUEST' function module, that is:
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_PAPR'
Once they are added I am loosing focus...
PS. I really need to get used to the new forum, also find where to reward points...