You already have a fully operational Search UIBB. You have done all the hard work of creating a feeder class, FPM configuration, search UIBB. The feeder class methods , get_definition, process_event and other tasks to get the output displayed are already implemented in the feeder class. During a demo, a user suggested and that would wonderful if you provide input help for one of the field.  Later when I looked the input structure, the field did not have a search help assigned to it.

However, if you are not familiar with the creation of Search UIBB, you may please refer to the link below :

http://scn.sap.com/community/abap/blog/2012/12/16/search-guibb-list-guibb

Problem:

The selection screen need to have value help for a field which does not have a search help assigned to it.

/wp-content/uploads/2015/01/imapge2_626194.png

Solution:

One of the options was to create a custom search help and assign it to the input structure used in the search GUIBB. The other option was to try implementing an OVS for the input field.  In this document I will try to explain the procedure to implement OVS in feeder class.

It was time me to go back to the developer guide and our beloved collaborators in SCN. As per FPM developer guide, the document suggests that we follow the below procedure to implement OVS for a selection field in Search GUIBB. It take me a few hours to implement the below procedure. Hence, the idea to create a how-to document for OVS (Search GUIBB) .

Extract from the FPM developer guide

Whenever a DDIC search help is not applicable, you should consider the OVS mechanism. OVS offers a generic UI like the DDIC value help. However, you must offer the selection logic. To do this, you must provide the name of a class implementing IF_FPM_GUIBB_OVS in the field description in field OVS_NAME. If the specified name is the same as the feeder class name, then the feeder class instance will be used,
otherwise this class will be instantiated whenever it is needed.

            This interface offers 4 methods:

                1. HANDLE_PHASE_0 where the OVS popup can be “configured”

                 2. HANDLE_PHASE_1 to define the selection fields

                 3.  HANDLE_PHASE_2 where the result list must be determined

               4. HANDLE_PHASE_3 where the selected result list entry is passed back to the input field

             In order to fulfill these tasks, an instance of IF_WD_OVSis passed as an importing parameter to these methods.

Step 1.

Go to SE24 and open Feeder Class in edit mode: In this feeder class, now we need to include an additional standard IF_FPM_GUIBB_OVS interface Or your could Implement IF_FPM_GUIBB_OVS_SEARCH Interface. Here in this example we will be using IF_FPM_GUIBB_OVS interface.

IF_FPM_GUIBB_OVS_SEARCH interface includes the IF_FPM_GUIBB_OVS interface and in addition provides a method SET_CURRENT_SEARCH_CRITERIA. Example : A user selects  France from the dropdown list in the search criterion Country at runtime; accordingly, the search criterion City should only display cities in France in its dropdown list. IF_FPM_GUIBB_OVS_SEARCH can be used if we want to change a selection field based on value of the another selection field.

/wp-content/uploads/2015/01/imapge3_626205.png

Including the interface adds 4 new methods to the feeder class, HANDLE_PHASE_0, HANDLE_PHASE_1, HANDLE_PHASE_2
and HANDLE_PHASE_3. Make sure to open each method and save it once. After that, we will implementing code in  the handle_phase_2 and handle_phase_3 methods.

Step 2.

Method: IF_FPM_GUIBB_OVS~Handle_phase_2.

The method will be implemented to show the possible (F4 values ) to be displayed on screen. This method allows you to write custom logic to populate possible value help for a given field.

Input/Import Parameter:

  1. IV_FIELD_NAME (at runtime contains the selection field name for which the F4 (value help) is triggered.
  2. IO_OVS_CALLBACK ( a reference to IF_WD_OVS). This instance has method named set_output_table, which need to be used to populate the possible entries.

Declare a local structure and internal table to hold the F4 values to be displayed on screen. As always, now we will need to write a select statement to populate the internal table. After that we will pass this internal table to the set_output_table  method.

          TYPES : BEGIN OF lty_teds2,
            status
TYPE teds2status,
            descrp
TYPE teds2descrp,
         
END OF lty_teds2.
     DATA : lit_teds2 TYPE STANDARD TABLE OF lty_teds2.

        SELECT status descrp FROM teds2 INTO TABLE lit_teds2
   
WHERE langua = sylangu.

 

       io_ovs_callback->set_output_table(
   
EXPORTING
     
output       = lit_teds2
*      table_header = table_header
*      column_texts = column_texts    ” Table of Name Value Pairs

).

Step 3.

Method : IF_FPM_GUIBB_OVS~Handle_phase_3.

This method will be implemented to populate the selected value in the popup screen back to the selection screen field value.

Input/Import parameter:

IV_WD_CONTEXT_ATTR_NAME: This contains the name of the selection field attribute name. For example the field you have
added in the screen is IDOCSTATUS. The value of the attribute will be INPUT_IDOCSTATUS

IO_OVS_CALLBACK : ( a reference to IF_WD_OVS). To set the selected value back to the screen, we
will be using the instance attributes SELECTION and context_element

  1. Define a structure similar to the line type of the values displayed in F4 help.

           TYPES : BEGIN OF lty_teds2,
            status
TYPE teds2status,
            descrp
TYPE teds2descrp,
         
END OF lty_teds2.
    
FIELD-SYMBOLS: <ls_selection>    TYPE lty_teds2.

     2. Assign the attribute SELECTION to field symbol declared. Once assigned use the set_attribute method to set the value on the screen.

          ASSIGN io_ovs_callback->selection->* TO <ls_selection>.

         io_ovs_callback->context_element->set_attribute(
     
EXPORTING
       
value = <ls_selection>status    ” Attribute Value
        name 
= iv_wd_context_attr_name   ).

Step 4.

Now we finished implementing the methods related to OVS.The next step is to ensure that the
OVS methods get triggered only when the user clicks on Value help on the desired field in this case the idoc status. 

IF_FPM_GUIBB_SEARCH~GET_DEFINITION

  ls_descr_attrname = ‘IDOCSTATUS’.
  ls_descr_attr
text = ‘IDOC Status’.
  ls_descr_attr
ovs_name = Pass the name of the feeder class

    APPEND ls_descr_attr to et_field_description_attr.

Note: If you have implemented the OVS IF_FPM_GUIBB_OVS in a different class then pass the class
name of the
ls_descr_attr-ovs_name attribute.

Save and activate your feeder class. It’s time to test the application.

/wp-content/uploads/2015/01/imapge4_626206.png

/wp-content/uploads/2015/01/imapge5_626225.png

/wp-content/uploads/2015/01/imapge6_626226.png

The developer guides suggest that we implement all 4 methods to HANDLE_PHASE_0, HANDLE_PHASE_1, HANDLE_PHASE_2 and HANDLE_PHASE_3. However, in this case we have used methods handle_phase_2 and handle_phase_3 to populate and select the value back to the screen.

Handle_phase_1 : Can be used to define the fields that we want to see, the title of the popup window and other
optional values. This is done using the method of the instance
IO_OVS_CALLBACK->set_configuration

The key to implement OVS is to understand the instance IO_OVS_CALLBACK (interface IF_WD_OVS) . Additionally, we can try
out the attributes and methods of this class we will be able to understand OVS better.

I hope the document will be helpful and if you have any comments, please feel free to post it.

To report this post you need to login first.

7 Comments

You must be Logged on to comment or reply to a post.

  1. Jens Boeckenhauer

    Hi Kumaran,

    this is nicely described! You might als mention that there is another interface IF_FPM_GUIBB_OVS_SEARCH including IF_FPM_GUIBB_OVS which allows doing more complex changes on the set of search criteria (since one should never navigate through the context structure from IO_OVS_CALLBACK->CONTEXT_ELEMENT).

    Best regards

    Jens

    (0) 
    1. Kumaran L Kumaran L Post author

      Thanks Jens for your valuable feedback.I am working on the points you have mentioned.I have a question, how do we set the value back on to selection screen field if we are not suppose to use  IO_OVS_CALLBACK->CONTEXT_ELEMENT ?

      (0) 
      1. Jens Boeckenhauer

        Hi Kumaran,

        it is allowed to to set the context attribute value using IO_OVS_CALLBACK->CONTEXT_ELEMENT; this is even standard if you only set the OVS context attribute. However, it is not allowed to access other attributes or navigate from there to other elements (e.g. using GET_NODE, then GET_CHILDREN etc.) as the context structure is internal and not part of the contract. I just mentioned this as there were cases that developers tried this in order so set ranges or something. But for such complex cases one should rather use IF_FPM_GUIBB_OVS_SEARCH.

        Best regards

        Jens

        (0) 
  2. Ramya S

    Hi Kiran,

    Can you please let me know how to select multiple values from ovs help.

    I have a requirement for selecting multiple values from OVS help and need to create extra rows for selected values.

    I have seen a parameter TABLE_MULTI_SELECT for enabling multi selection in method SET_Configuration (IF_FPM_GUIBB_OVS~HANDLE_PHASE_0).

    After setting this parameter am able to select multiple values but I’m not able to pass these selected entries to the screen.



    Can you please suggest me how to proceed on this?

    Thanks in advance.

    Regards,

    Ramya

    (0) 
  3. Ulrich Miller

    Hi Ramya,
    this should be possible to do. You may check the following test application:

    wd appliaction: fpm_test_dep_searches

    wd application config id: FPM_TEST_DEP_SEARCHES

    Cheers.

    (0) 
    1. Ramya S

      Hi Ulrich,

      Thanks for your reply.

      But I was looking for multiple selection in result table.

      As I mentioned in my earlier reply  there is a parameter TABLE_MULTI_SELECT for enabling multi selection from selection result table.

      Regards,

      Ramya

      (0) 

Leave a Reply