on 2010 Sep 27 10:40 AM
Hi everyone,
I created a custom value help for my select options.
It works fine, when the user clicks on the value help, my own view is displayed, and the user can select the required values:
lt_range_table =
wd_this->m_handler->create_range_table(
i_typename = 'ORGEH' ).
* add a new field to the selection
wd_this->m_handler->add_selection_field(
i_id = 'ORGEH'
i_value_help_id = 'MYSO'
i_value_help_type = IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_APPLDEV
it_result = lt_range_table
i_read_only = read_only ).
The problem is, how can I pass the values to the select option? When the user selects the values in my view, I have them in an internal table. But how can i pass these values to the select option? I suppose there is declared method for this... but which one?
Thanks
N.
Are you saying you are using a Freely Programmed Value Help? If so, you would generally use the value help listener to access the source context element that triggered the value help:
http://help.sap.com/saphelp_nw70ehp1/helpdata/en/47/9ef8cc9b5e3c5ce10000000a421937/frameset.htm
You say that you have values - as in plural. Is that correct? Are you wanting to copy multiple values back to the select-option? If so the value help listerner object isn't setup for that. It only gives you access to the one source element. You would need to use component usage to access an interface method of the source component controller and through this method pass a refernce to the m_handler (the select options component handler) into the freely programmed value help.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Thomas,
Yes. I'm Using Freely Programmed Value Help.
There are to views 'MAIN' and 'SEL_TREE'.
MAIN view has the :
-m_handler TYPE IF_WD_SELECT_OPTIONS
SEL_TREE is the value help view.
I have multiple values in the value help (It's a tree with the Organizuation Unites of the company ). I 'd like to pass these values to the select option.
How can I pass these values to the select options? I tried it with the VH_WINDOW_CLOSED event.
I fire this event in my SEL_TREE view (this is the view in the WD_VALUE_HELP window)
wd_comp_controller->fire_VH_WINDOW_CLOSED_evt( ).
I also registered an event handler in the MAIN view for this event, but the event handler method is never called...
What do you mean on "You would need to use component usage to access an interface method of the source component controller and through this method pass a refernce to the m_handler (the select options component handler) into the freely programmed value help."
Can you give some sample code, or some explanation?
Thnaks
N.
Here's my source code:
DATA:
lr_componentcontroller TYPE REF TO ig_componentcontroller,
l_ref_cmp_usage TYPE REF TO if_wd_component_usage.
* create the used component
l_ref_cmp_usage = wd_this->wd_cpuse_select_option( ).
IF l_ref_cmp_usage->has_active_component( ) IS INITIAL.
l_ref_cmp_usage->create_component( ).
ENDIF.
* get a pointer to the interface controller of the select options
*component
wd_this->m_wd_select_options =
wd_this->wd_cpifc_select_option( ).
* init the select screen
wd_this->m_handler =
wd_this->m_wd_select_options->init_selection_screen( ).
*---------------------------------------------------------------------------------------------
DATA lo_so_api TYPE REF TO IF_WD_CONTROLLER.
lo_so_api = wd_this->m_wd_select_options->wd_get_api( ).
DATA lo_so_cmp TYPE REF TO IF_WD_COMPONENT.
lo_so_cmp = lo_so_api->get_component( ).
DATA lo_so_cmp_usg TYPE REF TO IF_WD_COMPONENT_USAGE_GROUP.
lo_so_cmp_usg = lo_so_cmp->create_cmp_usage_group(
name = 'MYSO'
used_component = 'SEL_TREE' ).
lt_range_table =
wd_this->m_handler->create_range_table(
i_typename = 'ORGEH' ).
* add a new field to the selection
wd_this->m_handler->add_selection_field(
i_id = 'ORGEH'
i_value_help_id = 'MYSO'
i_value_help_type = IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_APPLDEV
it_result = lt_range_table
i_read_only = read_only ).
So it sounds like your main problem is that the value help event is not getting triggered back in the main component. But why perform the update the select options there? Instead update the selection options within SEL_TREE. You just need to pass the m_handler object reference from your main component into the component usage of the value help.
Probably one of the easiest ways to do this is to create a normal ABAP singleton pattern class. The Parent component and the value help component will then share the same instance fo this one class. The parent compoennt can set an attribute in this singleton class instance for the m_handler and the value help component can access this same attribute/m_handler.
Sorry for the stupid question, but it seems I can't acces my attribute:
I create it in the component controller
NODE: 'APP_DATA'
Attribute: M_HANDLER TYPE IF_WD_SELECT_OPTIONS
Cardinality 1..1
Selection 1..1
Singleton = 'X'
I pass the values int he EDOINIT method of MAIN view:
* Get compnent controller API
lo_component = wd_comp_controller->wd_get_api( ).
lo_controller ?= lo_component.
* Get the controler context node
CALL METHOD LO_CONTROLLER->GET_CONTEXT
RECEIVING
CONTEXT = lo_context.
*Get the root node
lo_node = lo_context->root_node.
*Get the child node
lo_child = lo_node->get_child_node( 'APP_DATA' ).
ls_app_data-m_handler = wd_this->m_handler.
lo_child->bind_structure( ls_app_data ).
After this code I test it if the binding is correct:
DATA: ls_test TYPE wd_comp_controller->element_app_data.
CALL METHOD LO_CHILD->GET_STATIC_ATTRIBUTES
IMPORTING
STATIC_ATTRIBUTES = ls_test.
The lstest is correct_. It has the reference for the SelectOption
Now, in the SEL_TREE View:
* Get compnent controller API
lo_component = wd_comp_controller->wd_get_api( ).
lo_controller ?= lo_component.
* Get the controler context node
CALL METHOD LO_CONTROLLER->GET_CONTEXT
RECEIVING
CONTEXT = lo_context.
*Get the root node
lo_node = lo_context->root_node.
*Get the child node
lo_child = lo_node->get_child_node( 'APP_DATA' ).
*Get the data from the node
CALL METHOD LO_CHILD->GET_STATIC_ATTRIBUTES
IMPORTING
STATIC_ATTRIBUTES = ls_app_data.
wd_this->m_handler = ls_app_data-m_handler.
The ls_app_data-m_handler is INITIAL. There is no value in it.
What did I do wrongly?
Please help
Thanks
N.
Your trying to pass the reference via context? Did you define the cross component context mapping? I'm not even sure if cross component context binding with an object reference will work since cross component context binding is done by copy and not by reference. Why not just use the approach I suggested with the singleton class pattern. That works for sure.
HI ngastnek/Thomas,
Can you tell me how you managed to pass the instance of the assistance/singleton class ?
I am also having the same requirement.I am using Freely programmed search help in the select option.
For me wd_assist value is getting cleared when i am trying to pass the assistance class instance.
lo_cmp_usage = wd_this->wd_cpuse_com_code_sh( ).
IF lo_cmp_usage->has_active_component( ) IS INITIAL. ( Search help component)
lo_cmp_usage->create_component(
assistance_class = wd_assist ).
ENDIF.
This is how i am passing the wd_assist instance to my search help component.
but when i am clicking the search help in my select option the constructor of the search help component is again called and wd_assit value of my current component instance is getting cleared and new instance is getting created.
Thanks In Advance
Ganesh
Hi,
Ohh, I spent several hours, when finall I made a working free value help.
This example is very complicated, because here, I created an Organizational tree, as a Org Unit search help
If you need just a table, then it's a little bit easier you can Use the OVS value help (google it! there are several examples )
In this example, I created my tree in a differnet component, then I passed this USED COMPONENT as a parameter (ZDATA_REP01)
Here is my code:
DATA lo_so_api TYPE REF TO IF_WD_CONTROLLER.
lo_so_api = wd_this->m_wd_select_options->wd_get_api( ).
DATA lo_so_cmp TYPE REF TO IF_WD_COMPONENT.
lo_so_cmp = lo_so_api->get_component( ).
DATA lo_so_cmp_usg TYPE REF TO IF_WD_COMPONENT_USAGE_GROUP.
lo_so_cmp_usg = lo_so_cmp->create_cmp_usage_group(
name = 'MYSO'
used_component = 'ZDATA_REP01' ).
lt_range_table =
wd_this->m_handler->create_range_table(
i_typename = 'ORGEH' ).
* add a new field to the selection
wd_this->m_handler->add_selection_field(
i_id = 'ORGEH'
i_value_help_id = 'MYSO'
* i_value_help_type = 'SEARCHHELP'
i_value_help_type = IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_APPLDEV
it_result = lt_range_table
i_read_only = read_only ).
I created a custom value help for my select options.
I have also encountered similar problems,how get valule from freely programmed help into select options.?
Can you give some sample code?
thanks!
User | Count |
---|---|
71 | |
11 | |
11 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.