View raises Component Controller Event

Hello,
I defined an even onUpdate in the component controller. A custom controller subscribed to this event. For that I have a method handleOnUpdate in the custom controller. Now I want to raise this event in a view after pressing a submit button of this view.
How can I raise the event?
So data flow would be:
1. Button pressed in view
2. Raise event in component controller
3. Handle raised event in custom controller
Regards
Rene

Hi Rene,
Your scenario is like:
<b>View: OnSubmit -> Component Controller: OnUpdate -> Custom Controller:</b> <b>handleOnUpdate.</b>
For this, in the code for <u>OnSubmit</u> in your view, you need to add code as
wdThis.wdGet<ComponentControllerName>().onUpdate();
and in the <u>OnUpdate</u> method in Component Controller:
wdThis.wdGet<CustomContControllerName>().handleOnUpdate();
Also, you need to <b>add the Component Controller to your View</b>, using Properties Tab
<b>and Custom Controller in Component Controller</b>, using its properties tab.
Hope it helps.
Regards,
Alka.

Similar Messages

  • Call a method in the view from Component Controller

    Hi Friends,
    I have written the code for calling the RFC in Component Controller.
    My requirement is to change the properties of UI elements in the view, if I get any exception while calling RFC.
    Can Call a method in the view from Component Controller.
    Regards,
    Lakshmi Prasad.

    HI,
    You can get the error message during the exception of calling RFC in view itself.
    Any way you may call the RFC at some action in the view only.
    Can you explain me what you are trying to do?
    Kind Regards,
    Mukesh

  • Calling a method in view from component controller?

    Hi,
    Is it posible to call a method that is defined in the Component Controller in the View?
    If it is posible please give some sample code how to call the method?
    Regards,
    Padmalatha.K

    Padmalatha, all the methods defined in a controller from 'Methods' tab are instance methods. An instance method defined in a component controller is callable from any view controller that holds a reference to the component controller.
    Defining methods between the tags
    //@@begin others
    //@@end
    is useful if you want to declare static methods.

  • Max Views in component controller.(perfomance)

    hi guru,
    how many view can exist in one component controller .
    i like to follow the best pratices .if i create more then 12 view.
    it will affect the perfomance or not .
    Please give me the reason for that.
    Advance thanx
    Regards
    Vivekanananthan.S

    SAP has published some guidelines on the designing WD Components in the latest version of the online help:
    http://help.sap.com/saphelp_nw70ehp1/helpdata/en/c6/58e70398244a87a2c39e700bdae4a9/frameset.htm
    We state that you should limit yourself to 15 views per component.  The actual technical limit is higher although there is no definite number when you reach the compliation error.  The size of the views also effect when you reach the maximum number.  You see classes get generated behind the scenes for your Web Dynpro Components.  There are compiler limits on how large a class can be.  The more views/the more code and objects in the views - the larger this generated class gets.

  • Capture comp controller event n enhancement view - handler not triggered

    Hi,
    Enhanced a std WDA component through the enhancement framework.  Added a view in the enhancement.  This view will be a popup requesting user supplies more details.
    Ive enhanced a std component controller method to fire off a component controller event.  Ive also created an event handler method in the new view and associated with the component controller event.
    Unfortunately the new view method doesnt trigger.  If I add an event handler method to one of the std views through the enhancement framework it does trigger.
    Grateful for any solution/info, cheers!

    Hey,
    Std view A is the active view when the firing of the event occurs within the component controller.  Enhancement view Z is where the event handler method is defined.Defining an event handler method in active view A will be triggered upon component controller event firing, but not event handler method in view Z.  Handling within event view Z (not active/displayed) beyond the realms of WDA eventing?

  • Calling component controller's method

    Hi,
    How can i call component controller's method from a view?
    Thanks.

    Yes, You can call method of component controller from View.
    If you have already mapped any context node/attribute between your view and component controller then it means component controller is already added in your view. If you have not done same then you can add component controller by going into the properties of view.
    To access the method use following code.
    wdThis.wdGet<Your_controllername>Controller().<methodName>();
    Regards,
    Rohit

  • How to fire event in view controller from component controller.

    I have a component usage that fires an event wich i have subscribed in the component controller.
          iv_usage->subscribe_event( iv_event_name = 'TAKE_IT'
                                     iv_handler = me ).
    After the event the method IF_BSP_WD_EVENT_HANDLER~HANDLE_EVENT in the component controller is called.
    method if_bsp_wd_event_handler~handle_event.
    endmethod.
    The usage component is opened as a popup window. After pressing a button, the data is transfered via context node binding to the calling component. But now i want to close the popup.
    My intension is to fire a event for the view controller in the IF_BSP_WD_EVENT_HANDLER~HANDLE_EVENT method that closes the popup.
    Is this possible?
    Or let me explain it this way:
    I want to close a popup after a button in the popup is pressed.
    best regards
    Jürgen

    Hello Juergen
    I am assuming your target pop-up is of type ref to IF_BSP_WD_POPUP.
    1.Make this a view controller class attribute.
    2. After the code to create the pop-up, you can add the following block :
    gv_target_popup->set_on_close_event( iv_view = me iv_event_name = 'CLOSEPOPUP').
    3. Now define event handler EH_ONCLOSEPOPUP where you can write the logic for on_close.
    You can access the same reference gv_target_popup at the event handler level as well.
    Hope this helps.
    Regards
    Nisha

  • Coupling between component controller and view controller

    Hello,
    I have seen some discussions in this forum regarding the possibilities of calling / triggering a view controllers's method from a component controller's method;  obviously the Web Dynpro framework only provides for the other direction (view ctrl -> comp ctrl) via handle <i>wd_comp_controller</i>.
    Some people proposed raising events in the comp controller and catching these in the view controller, others pointed out that any dependance of a view controller on a component controller would violate MVC principles.
    Now, I can't see why a tighter coupling (in both ways) between controllers within one component would harm MVC in any way. So I suggest to "register" a view controller in the pertaining component controller if necessary:
    this_controller = wd_this->wd_get_api( ).
    wd_comp_controller->register_view_ctrl_XYZ( this_controller ).
    This way the component controller can save the reference and later call any method on it. What do you think, does anything argue against this practice?
    Regards,
    Sebastian

    Hi Sebastian,
    I wouldn't try to explain whether it is violating the MVC principles or not.
    Can you please explain how to call methods of view using the view controller?
    have you tried using an example???
    I want to give a small example which I think is a basic disadvantage of calling View methods from component controller.
    Suppose I have 30 methods in a view and such 7 views in a component (I think this is a very common example).
    Till now one is very clear that if I have a method in view, it will be called at maximum by other methods with in the view. That means at any point of time, my search is limited to 30 methods.
    Now if component controller can also call my search will become horrible and spread to 210 methods, unless otherwise, you are very good at naming attributes and wont make the mistake of assigning attributes wrongly.
    Imagine the effort if the outside components also access these methods through interface.
    Also I dont think that the webdynpro phase model can support this way of calling view methods. You might be successful once, but then you are trying to open a can of worms.
    This is my way of thinking...
    Also, it would be great if you can tell me whether you are successful in calling views methods or not???
    Thanks,
    Anand

  • Call a component controller methods from a view

    Hi,
    I have created a view v1 with context node c1and binded the context node c1 of it with the component controller so that the values entered in the view v1 are available.
    now can i know how to access this values from component controller context node which i binded in a other view......
    Thanks,
    Prem

    Hi Sayan,
    component : BP_HEAD
    View: BP_HEAD/BPHeadOverview
    I have called event EH_ONPOPUP_CLOSED when popup is closed in view BP_HEAD/BPHeadOverview and i get all the values entered in the popup here using below code.
           lr_context_node = gr_popup->get_context_node( iv_cnode_name = 'ZPOPUPCN' ).
           lr_col_wrapper = lr_context_node->collection_wrapper.
           lr_entity = lr_col_wrapper->get_current( ).
           IF lr_entity IS BOUND.
             lr_entity->get_properties( IMPORTING es_attributes = ls_data ).
           ENDIF.
    now ls_data contains all the data entered in the popup ie. - firstname, lastname, house_no, street, city, postal code, country.....
    now it have tried the below code to map/set the entries with the Account management - individual account creation screen.
    data : ls_header         TYPE crmst_header_object_buil,        " BuilHeader
              ls_header1        TYPE crmst_address_buil,                 " BuilStandardAddress
           ls_header-firstname     = ls_data-zfirstname.
           ls_header-lastname      = ls_data-zlastname.   
           ls_header1-house_no     = ls_data-zhouseno.  
           ls_header1-street       = ls_data-zstreet.      
           ls_header1-city         = ls_data-zcity.        
           ls_header1-postl_cod1   = ls_data-zpostcode.    
           ls_header1-country      = ls_data-zcountry.   
           ls_header1-telephonetel = ls_data-ztelno.        
           ls_header1-e_mailsmt    = ls_data-zemail.
           entity ?= me->typed_context->builheader->collection_wrapper->get_current( ).
           IF entity IS BOUND.
             entity->set_properties( EXPORTING is_attributes = ls_header ).
           ENDIF.
           entity1 ?= me->typed_context-> BuilStandardAddress->collection_wrapper->get_current( ).
           IF entity IS BOUND.
             entity1->set_properties( EXPORTING is_attributes = ls_header1 ).
           ENDIF.
    but the problem is both the entity is INITIAL.

  • Call a view's method from Component Controller.

    Hi
    Is it possible to call a view's method from Component Controller.
    Regards
    Nikhil

    Hi Tummuru,
    I have created an event in Component Controller by the name toMenuView. Now I created a method in which this event is getting fired. Foll. is the code of the method.
      public void fireToMenuView( )
       wdComponentAPI.getMessageManager().reportSuccess("fireToMenuView");
       wdThis.wdFireEventToMenuView();
    Now I have created an event handler "handleToMenuView" in the MenuView and subscribed the event handler to the event in Component Controller.
    The control is reaching to the fire event in component controller but not to the Event handler in view controller.
    What am I missing.
    Regards
    Nikhil

  • Call component controller method from view

    Hi
    I have created an action in view Thus its event handler is "OnActionDoSomething()"
    And, I have a method in component controller "MethodSaySomething()".
    Now, how can I call MethodSaySomething() from OnActionDoSomething().
    OnActionDoSomething()
    // Call  MethodSaySomething() defined in component controller
    Thanks

    Hi,
        To access the methods present in component controller from View , first u need to add the component controller as the required controller.
    open the view controller --> switch to propertues tab --> add the component controller as required controller(click add controller).
    Now in your action handler , write this below code to add the method:
    wdThis.wdGet<COmponent Controller>().MethodSaySomething();
    Hope it helps
    Thanks and Regards,

  • Handle button event of popup created from component controller

    Hi all,
    I have created a method for created popup in the component controller with button kind 'yes-no'.Now i use it in the view.
    Till here all is working fine.
    Now i want to use the events which triggers on the popup (yes, no).Any idea how to trigger these buttons action.
    The problem i am facing here is: When i use <b>subscribe_to_button_event</b> method it does not working.
    Any ideas how to use this.
    Points will be sured.
    Sanket sethi

    hi sanket.........
    here is a code snippet... check this out.
    data: l_cmp_api          type ref to if_wd_component,
            l_window_manager   type ref to if_wd_window_manager,
            l_popup            type ref to if_wd_window,
            l_text             type string_table,
            l_api              type ref to if_wd_view_controller.
      l_cmp_api        = wd_comp_controller->wd_get_api( ).
      l_window_manager = l_cmp_api->get_window_manager( ).
      insert `Data where changed` into table l_text.   
      insert `Do you want to save?`        into table l_text.   
      l_popup = l_window_manager->create_popup_to_confirm(
                    text            = l_text
                    button_kind     = if_wd_window=>co_buttons_yesnocancel
                    message_type    = if_wd_window=>co_msg_type_question
                    window_title    = 'Test: Popup to confirm'
                    window_position = if_wd_window=>co_center ).
      l_api = wd_this->wd_get_api( ).
      l_popup->subscribe_to_button_event(
                   button            = if_wd_window=>co_button_yes
                   action_name       = 'YES'
                   action_view       = l_api
                   is_default_button = abap_true ).
      l_popup->subscribe_to_button_event(
                   button            = if_wd_window=>co_button_no
                   action_name       = 'NO'
                   action_view       = l_api
                   is_default_button = abap_false ).
      l_popup->subscribe_to_button_event(
                   button            = if_wd_window=>co_button_cancel
                   action_name       = 'CANCEL'
                   action_view       = l_api
                   is_default_button = abap_false ).
      l_popup->open( ).
    --regards,
      alex b justin

  • Calling RFC from view/component controller

    I've got a model node in the component controller's context which is mapped to a node in a view controller. Now, when binding the model's input node with an array and executing the RFC from within an event handler in the view controller, everything goes just fine.
    Now, I want to put this functionality in the component controller, so I created a method there, copied the code and call it from the view controller's event handler. When the RFC is called, the input table always contains just 1 element, of which the fields are all initial.
    Any thoughts on what might be going on here?

    Hi friend,
    I too faced the problem what you faced.
    Near to it.
    Ill explain you .
    YOu have your model node.
    1st you will map that to component controller And from there to view controller.
    After that you will bind the elements in this node to some elements in your view after that .
    For example
    Model class name:-Lok_model.
    In the DOINIT method:-
    write this code.
         Lok_model k = new Lok_model();          wdContext.nodeLok_model().bind(k);
    Suppose you have a button in the onaction you write this code.
    wdContext.nodeLok_model().currentLok_modelElement().modelObject().get_details();
    Ill expalin you about this statement Lok_model() is the node in my view which is mapped from the model and by using that i am calling the method get_details() which is in my model class Lok_model.By this data will be automatically populated into the view elements which are being binded to the model attributes.
    Hope this helps you,
    Lokesh

  • Calling view controller method from component controller method

    Hi,
    Is there any way to call view controller method from component controller method?
    Thanks,

    Hi Khandal.
    You should not make you component controller dependent from a view controller.
    But what you can do is to define an event in the component controller. The view
    controller can register for this event.
    In the stage where you currently want to call the view controller method just fire
    the event. In the event handler method in the view controller you can call the
    method then.
    Why do you need to call a view controller method? Can you give more details
    about the scenario?
    Cheers,
    Sascha

  • Calling a method in the view controller from the component controller

    Hi
    Is there anyway to call a method in the view implementation from the component controller??
    Thanks
    jack

    Thanks for all your replies. I want this kind of a functionality because Im trying to invove a DC (Child DC) from a Parent DC such that the Child DC's view is displayed onto the view container of the Parent DC. I have embedded using 'interface view of a component instance' in the Parent Window and am able to create the component and set usage though the onPlugDefault of the Child View.
    But I observe that when i make a call from the parent, the flow is like this:
    1. The wdDoInit of the Child Component Controller gets triggered first.
    2. Then the wdDoInit of the Child's <b>VIEW</b> gets triggered
    3. and <b>THEN</b> the onPlugDefault of the Child Component Interface View
    What I had actually wanted was to Fire onPlugDefault where Im calling a method LoadData(), after which the Child DC's view must be triggered so it can display the fetched data.
    What is actually happening is the view gets displayed, but no data is displayed in the view.
    Right now I have just given a work around where Im triggering <b>LoadData()</b> of the <b>COmponent COntroller</b> from the <b>wdDoInit</b> of the <b>VIEW</b>.
    Is there a better way to do this? I find it strange that I have to load the Data from the view.
    Thanks
    Jack

Maybe you are looking for