Skip to Content

How to implement F4IF_INT_TABLE_VALUE_REQUEST in search help User Exit?

Hi,

I need to enhanse search help and add F4 functionality to display list of company codes when cursor is in PBUKR field. I put F4IF_INT_TABLE_VALUE_REQUEST

into the user exit but nothing works.

I get error that PROCESS is not defined. If I remove that line there is no error but nothing works.

Can someone tell me what is wrong in the code below.

Thank you.

FUNCTION z_hr_shlp_wbs_element.

*"----


""Local interface:

*" TABLES

*" SHLP_TAB TYPE SHLP_DESCR_TAB_T

*" RECORD_TAB STRUCTURE SEAHLPRES

*" CHANGING

*" VALUE(SHLP) TYPE SHLP_DESCR_T

*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL

*"----


TABLES: prps.

DATA: it_prps LIKE prps OCCURS 0 WITH HEADER LINE.

DATA: status_tab LIKE jstat OCCURS 0 WITH HEADER LINE.

DATA: l_posid LIKE prps-posid.

DATA: l_subrc LIKE sy-subrc.

DATA: l_pbukr LIKE prps-pbukr, " Added by vr

value TYPE DDSHIFACE-VALUE.

  • EXIT immediately, if you do not want to handle this step

IF callcontrol-step <> 'SELONE' AND

callcontrol-step <> 'SELECT' AND

" AND SO ON

callcontrol-step <> 'DISP'.

EXIT.

ENDIF.

  • ------------------------------------------------------ added by vr

PROCESS ON VALUE-REQUEST.

FIELD PRPS-PBUKR MODULE PBUKR.

DATA: BEGIN OF VALUE_TAB OCCURS 0,

LPBUKR LIKE PRPS-PBUKR,

LPOSID LIKE PRPS-POSID,

END OF VALUE_TAB.

*

DATA: BEGIN OF RETURN_TAB OCCURS 0.

INCLUDE STRUCTURE DDSHRETVAL.

DATA END OF RETURN_TAB.

*

SELECT PBUKR POSID FROM PRPS UP TO 20 ROWS

INTO TABLE VALUE_TAB WHERE SLWID = 'QLT UDF'.

*

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

RETFIELD = 'PBUKR'

WINDOW_TITLE = 'Statusselektion'

VALUE_ORG = 'S' "hierdurch kann die Struktur genommen werden

TABLES

VALUE_TAB = VALUE_TAB

RETURN_TAB = RETURN_TAB

EXCEPTIONS

PARAMETER_ERROR = 1

NO_VALUES_FOUND = 2

OTHERS = 3.

*----


end of additions

*"----


  • STEP SELONE (Select one of the elementary searchhelps)

*"----


  • This step is only called for collective searchhelps. It may be used

  • to reduce the amount of elementary searchhelps given in SHLP_TAB.

  • The compound searchhelp is given in SHLP.

  • If you do not change CALLCONTROL-STEP, the next step is the

  • dialog, to select one of the elementary searchhelps.

  • If you want to skip this dialog, you have to return the selected

  • elementary searchhelp in SHLP and to change CALLCONTROL-STEP to

  • either to 'PRESEL' or to 'SELECT'.

IF callcontrol-step = 'SELONE'.

  • PERFORM SELONE .........

EXIT.

ENDIF.

*"----


  • STEP PRESEL (Enter selection conditions)

*"----


  • This step allows you, to influence the selection conditions either

  • before they are displayed or in order to skip the dialog completely.

  • If you want to skip the dialog, you should change CALLCONTROL-STEP

  • to 'SELECT'.

  • Normaly only SHLP-SELOPT should be changed in this step.

IF callcontrol-step = 'PRESEL'.

  • PERFORM PRESEL ..........

EXIT.

ENDIF.

*"----


  • STEP SELECT (Select values)

*"----


  • This step may be used to overtake the data selection completely.

  • To skip the standard seletion, you should return 'DISP' as following

  • step in CALLCONTROL-STEP.

  • Normally RECORD_TAB should be filled after this step.

  • Standard function module F4UT_RESULTS_MAP may be very helpfull in this

  • step.

IF callcontrol-step = 'SELECT'.

  • Maximum records are set to 0 because the counter for Max records keeps

  • running, even if you filter out certain records. This is a similar

  • problem as described in OSS Note 148525.

  • Feb 3, 2004 LS: devk907353

  • (maxrecords = 0 defaults to maxrecords 500)

  • As of release 4.7, it appears that maxrecords is

  • being considered on the read of the view, rather

  • than prior to presenting the selection list.

  • When only 500 records are passed into this exit,

  • the subsequent evaluation yields very few records

  • in the selection list. By setting maxrecords to

  • 8000, the entire contents of the view are passed

  • to this user exit, and therefor the search help

  • yields a reasonable selection list to the user

  • (as was the case in release 4.6b).

  • callcontrol-maxrecords = 0. " devk907353

callcontrol-maxrecords = 8000. " devk907353

  • PERFORM STEP_SELECT TABLES RECORD_TAB SHLP_TAB

  • CHANGING SHLP CALLCONTROL RC.

  • IF RC = 0.

  • CALLCONTROL-STEP = 'DISP'.

  • ELSE.

  • CALLCONTROL-STEP = 'EXIT'.

  • ENDIF.

EXIT. "Don't process STEP DISP additionally in this call.

ENDIF.

  • Added by vr, Nov. 2007 ---------------------------

CALL FUNCTION 'F4UT_PARAMETER_VALUE_GET'

EXPORTING

PARAMETER = 'PBUKR' " Reference to search help parameter

IMPORTING

VALUE = value

TABLES

SHLP_TAB = shlp_tab

RECORD_TAB = record_tab

CHANGING

SHLP = shlp

CALLCONTROL = callcontrol.

l_pbukr = value.

  • End of additions by vr ---------------------------

*"----


  • STEP DISP (Display values)

*"----


  • This step is called, before the selected data is displayed.

  • You can e.g. modify or reduce the data in RECORD_TAB

  • according to the users authority.

  • If you want to get the standard display dialog afterwards, you

  • should not change CALLCONTROL-STEP.

  • If you want to overtake the dialog on you own, you must return

  • the following values in CALLCONTROL-STEP:

  • - "RETURN" if one line was selected. The selected line must be

  • the only record left in RECORD_TAB. The corresponding fields of

  • this line are entered into the screen.

  • - "EXIT" if the values request should be aborted

  • - "PRESEL" if you want to return to the selection dialog

  • Standard function modules F4UT_PARAMETER_VALUE_GET and

  • F4UT_PARAMETER_RESULTS_PUT may be very helpfull in this step.

IF callcontrol-step = 'DISP'.

  • DEVK909420 Begin

  • SELECT * FROM prps INTO TABLE it_prps

  • WHERE belkz = 'X'.

  • Changed by vr, Nov. 2007

IF l_pbukr <> ''.

SELECT * FROM prps INTO TABLE it_prps

WHERE belkz = 'X'

AND fkstl <> ''

AND pbukr = l_pbukr.

ELSE.

SELECT * FROM prps INTO TABLE it_prps

WHERE belkz = 'X'

AND fkstl <> ''.

ENDIF.

  • End of changes

  • DEVK909420 End

SORT it_prps BY posid.

LOOP AT record_tab.

l_posid = record_tab+96(24).

READ TABLE it_prps WITH KEY posid = l_posid.

IF sy-subrc = 0.

CALL FUNCTION 'STATUS_READ'

EXPORTING

objnr = it_prps-objnr

only_active = 'X'

TABLES

status = status_tab.

  • DEVK909329 Begin

read table status_tab with key inact = ''

stat = 'E0001'.

if sy-subrc is initial.

read table status_tab with key inact = '' "DEVK909345

stat = 'I0002'. "DEVK909345

endif.

  • DEVK909329 End

ENDIF.

IF sy-subrc NE 0.

DELETE record_tab.

ELSE.

  • IF record_tab+114(1) EQ '.' AND

  • record_tab+115(1) EQ '9'.

  • DELETE record_tab.

  • ELSE.

  • DEVK909420 Begin

  • IF record_tab+102(1) EQ '9'.

  • DELETE record_tab.

  • ELSEIF record_tab+104(1) EQ '9'.

  • DELETE record_tab.

  • ENDIF.

  • DEVK909420 End

  • ENDIF.

ENDIF.

ENDLOOP.

EXIT.

ENDIF.

ENDFUNCTION.

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

1 Answer

  • Posted on Nov 22, 2007 at 10:50 AM

    Hi Vitaly,

    Process on Value Request and search help exit is entirely two idea to display the f4 values.please remove the PROCESS ON VALUE REQUEST from the function module.write the required select statements after CHECK callcontrol-step EQ 'SELECT' . and pass the value to the function module

    CALL FUNCTION 'F4UT_RESULTS_MAP'

    TABLES

    shlp_tab = shlp_tab

    record_tab = record_tab

    source_tab = l_record

    CHANGING

    shlp = shlp

    callcontrol = callcontrol

    EXCEPTIONS

    illegal_structure = 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.

    IF ( sy-subrc = 0 AND l_record IS INITIAL ).

    MESSAGE 'No values found' TYPE 'S'.

    ENDIF.

    callcontrol-step = 'DISP'.

    Find the documentaion for this function module for further help

    message edited by

    shibu

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.