Reference to view controller

hello,
is it possible to access a view method from a component controller?
I got a reference with the type "IF_WD_VIEW" in my component controller and I need to cast it in the original type of my view to access the view-method for view embedding (dodynamicnavigation)...is it possible?
I know that normally the view methods are only visible in the view controller...

Hi Thorsten,
Check this out from SAP...
+Just like the component controller, the view controller contains data and functions. Furthermore, the view controller also has
The lifetime of the controller element of a view is restricted to the lifetime of the view. To create simple Web Dynpro applications, it is sufficient if you maintain the component controller and the view controller of a view. The two controllers described below are optional and help you to structure complicated components and applications, thereby increasing their reusability.
+
So I dont think you can access the view controller methods from other views.
Regards
<b>Raja Sekhar</b>

Similar Messages

  • View controller reference

    Hi
    How do I obtain the view controller reference of a different view to the one I'm in?
    For example, My window is made of of two views, MAIN and DETAILS.  I wish to check the mandatory fields in MAIN and DETAILS from a method on the component controller.
    Therefore, how would I obtain the references?  Do I need to set up attributes on the component controller and then populate them in the WDDOINIT of each view?
    Cheers
    Ian

    Hi Ian,
    Create a component controller method check_mandatory_fields
    The following should the parameter interface of the method.
    I_VIEW_CONTROLLER     Importing     Type ref to IF_WD_VIEW_CONTROLLER
    In this method, call cl_wd_dynamic_tool=>check_mandatory_attr_on_view to do the validation.
    In main view, when you want to validate the records, do the following.
      DATA: lo_view_controller TYPE REF TO if_wd_view_controller.
      lo_view_controller ?= wd_this->wd_get_api( ).
      wd_comp_controller->check_mandatory_fields(
        EXPORTING
          i_view_controller = lo_view_controller ).
    These validation can be done at view level. So in detaild view, when you want to validate do the same as mentioned above.
    Regards,
    Sravan varagani

  • No method (within view controlle) to get reference to the window controller

    Hello all,
    I need to fire the exit plug of the window controller out of an embedded view.
    All help I can find in the internet tell me to "easily" get a ref to the window controller and thus to fire its plug as follows:
    data: L_REF_MAIN_WINDOW type ref to IG_MAIN_WINDOW .
    L_REF_MAIN_WINDOW =   WD_THIS->GET_MAIN_WINDOW_CTR( ).
    L_REF_MAIN_WINDOW->FIRE_MY_EXIT_PLUG_PLG(  ).
    But my view-controller dos not implement a method like
    GET_MAIN_WINDOW_CTR( )
    How can I get this method generated? What am I doing wrong?
    Thanks for your replies.
    Edited by: iSD1977 on Aug 23, 2011 4:09 PM

    Hello,
    in the Properties tab of the View Controller, add Window Controller as Used Controller.
    BR, Saravanan

  • Reference to Custome Controller from View controller

    Hi all,
    I have created a custom controller and inside that i have a method. i need to execute that method from a view controller, similar to executing a method in the component controller. to execute a method in the component controller i use the WD_COMP_CONTROLLER attribute to refer to the component controller. similarly how to i refer my custom controller from the view, or is there any other way? it would be great if someone can help me with this.
    Malinda

    hi,
    Lets say view1 has the event ONACTIONNAVIGATE and you want to call a method 'start_navigation' in the custom controller named 'navigation'.
    Use the following code.
    METHOD onactionnavigate .
      DATA lo_navigation_controller TYPE REF TO ig_navigation.
      lo_navigation_controller = wd_this->get_navigation_ctr( ).
      CASE navigation_type.
        WHEN 'BACKWARD'.
          lo_navigation_controller->start_navigation( if_fitv_fpm_api=>gc_navigate_backward ).
        WHEN 'FORWARD'.
          lo_navigation_controller->start_navigation( if_fitv_fpm_api=>gc_navigate_forward ).
      ENDCASE.
    ENDMETHOD.
    Thanks,
    Rajkumar.S

  • 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

  • Multithreading and static of wdDoModifyView in a view controller

    wdDoModifyView javadoc recommends to use a static variable of view controller (VC) to pass/publish a references of UI elements to event handlers of VC.
    it means then that different instances of VC serving different users share same static variable... i see here a problem, do not you?

    Armin Reichert: see TJA311 WebDynpro Part 1 Unit 10, example optional 1 solution  6-3,6-4 -))
    my new conclusion is that any UI elements should only be access in wdDoModifyView method
    the javadoc discourage from using instance fields not static fields but recommends not to use UIs outside of the method:
    Hook method called to modify a view just before rendering.
    This method conceptually belongs to the view itself, not to the
    controller (cf. MVC pattern).
    It is made static to discourage a way of programming that
    routinely stores references to UI elements in instance fields
    for access by the view controller's event handlers, and so on.
    The Web Dynpro programming model recommends that UI elements can
    only be accessed by code executed within the call to this hook method.

  • How to call Custom or Component Controller methods from View Controller

    Hy Guys,
    how do I call Custom Controller or Component controller methods from a View or Context Controlller?
    thanks in advance
    Jürgen

    Hi Juergen
    Yes it is possible, pls follow the below approach to access the component controller in context node class
    1) since the standard component controller class is protect variable , declare a variable of type component controller in your controller class.
    say for example the public variable you declared is  g_comp_controller
    2)  now redefine the controller class method WD_CREATE_CONTEXT  and add the below lines of code
       g_comp_controller ?= me->comp_controller.
    3) go to context node class  (CNXX)  there declare the varaible which of type controller class (IMPL)  as public variable, for example g_owner
    4) redefine the method  IF_BSP_MODEL~INIT  and write the below code
         CALL METHOD super->if_bsp_model~init
        EXPORTING
          id    = id
          owner = owner.
      g_owner ?= owner.
    5) now the variable   g_owner  that is declared in  (CNXX)   contains reference to your controller class
    6) in  on_new_focus  method access your component controller in the below manner and access the entities also.
    DATA: lv_owner                    TYPE REF TO xxxxx_impl,  " Implementation class
                 lr_comp_cont                TYPE REF TO xxxx_bspwdcomponen_impl, " component controller class
                 lv_entity type ref to cl_crm_bol_entity.
    lv_owner ?= g_owner.
    lr_comp_cont    ?= lv_owner->g_comp_controller.
    IF lr_comp_cont IS BOUND.
       lv_entity ?= lr_comp_cont->typed_context->mdfcampaign->collection_wrapper->get_current( ).
    now lv_entity contains the value of component controller context node.
    Thanks & Regards
    Raj
    Edited by: bmsraj on Sep 27, 2011 3:28 PM

  • Getting appmod reference in UIX controller class

    Hi,
    I tried using ServletBindingUtils.getApplicationModule(BajaContext) method in a static method in UIX controller class to get the reference of application module defined in UIX page. But i am getting null. How can i get the reference of view and appmod in UIX controller class
    regards,
    srivatsan

    Your event handler has to be within a <bc4j:findRootAppModule> element.

  • 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

  • How to get the VIEW_ID from VIEW Controller Class?

    Hi,
    In my BADI(CRM_BP_UIU_VIEW_CONFIG), I have a view controller variable(IR_VIEW_CONTROLLER) referring to CL_BSP_WD_VIEW_CONTROLLER. Now, I have to get VIEW_ID using this varibale. However, the VIEW_ID attribute is Protected in the class .CL_BSP_WD_VIEW_CONTROLLER So, I am unable to access this attribute.
    Could you please help me out, how can I do achieve this?
    Thanks,
    Sandeep

    See if you can make use of GET_VIEWAREA_CONTENT or GET_VIEWAREA_CONTENT_ID...
    Regards,
    BJ

  • Call method with an argument from another view controller

    I have a UIViewController MainViewController that brings up a modal view that is of the class AddPlayerViewController. When the user clicks 'Save' in the modal view I need to pass the Player data (which is a Player class) from the modal view to the MainViewController in addition to triggering a method in the MainViewController. What's the best way to accomplish this? I'm new to cocoa and have only tried using delegates and some ugly hacks to no avail.
    Thanks for the help.

    If I understand correctly, you have:
    1. A model object, Player.
    2. A top view controller, MainViewController.
    3. Another view controller, AddPlayerViewController, which MainViewController displays modally.
    I'm guessing that AddPlayerViewController creates a new Player object and lets the user set its values, and you need a way to get that new Player into MainViewController once they're done.
    So, here's what I'd do:
    1. Create an AddPlayerViewControllerDelegate protocol. It should declare two methods, "- (void)addPlayerViewController:(AddPlayerViewContrller*)controller didAddPlayer:(Player*)newPlayer" and "- (void)addPlayerViewControllerNotAddingPlayer:(AddPlayerViewController*)controll er".
    2. Add an attribute of type "id <AddPlayerViewControllerDelegate>" called delegate to AddPlayerViewController. Also add a property with "@property (assign)" and "@synthesize".
    3. Modify AddPlayerViewController so that if you click the "Save" button, addPlayerViewController:didAddPlayer: gets called, passing "self" and the new Player object as the two arguments. Also arrange for clicking the "Cancel" button to call addPlayerViewControllerNotAddingPlayer:.
    4. Modify MainViewController to declare that it conforms to AddPlayerViewControllerDelegate. Implement those two methods (addPlayerViewControllerNotAddingPlayer: might be an empty method if you don't want to do anything).
    5. When you create your AddPlayerViewController, set its delegate to your MainViewController.
    If you need more detail, let me know what parts you need me to elaborate on.

  • Question about view/controller/nib class design

    Assume you need to make an application with, let's say, 15 different views in total. There are two extreme design choices you can use to implement the app:
    1) Every single view has its own view controller and a nib file. Thus you end up with 15 controller classes and 15 nib files (and possibly a bunch of view classes if any of your views needs to be somehow specialized).
    2) You have only one controller which manages all the views, and one nib file from which they are loaded.
    AFAIK Apple and many books recommend going purely with option #1. However, going with this often results in needless complexity, large amounts of classes (and nib files) to be managed and complicated class dependencies, especially if some of the views (and thus their controllers) interact with each other or share something (something which would be greatly simplified if all these related views were handled by one single controller class).
    Option #2 also usually ends up being very complex. The major problem is that the single controller will often end up being enormous, handling tons of different (and usually unrelated) things (which is just outright bad design). This is seldom a good design, unless your application consists of only a few views which are closely related to each other (and thus it makes sense for one single controller class to handle them).
    (Option #2 also breaks the strictest interpretation of the MVC pattern, but that's not really something I'm concerned about. I'm concerned about simple design, not about following a programming pattern to the letter.)
    A design somewhere in between the two extremes often seems to be the best approach. However, since I don't have decades of Cocoa programming experience, I would like to hear some opinions about this subject matter from people with more experience on that subject. (I do have object-oriented programming experience, but I have only relatively recently started programming for the iPhone and thus Cocoa and its design patterns are relatively new to me, so I'm still learning.)

    Somehow I get the feeling that my question was slightly misunderstood.
    I was not asking "which one of these two designs do you think is better, option #1 or option #2?" I already said in my original post that option #2 is bad design (unless your application consists of just one or two views). That's not the issue.
    The issue is that from my own experience trying to adhere very strictly to the "every single view must have its own view controller and nib file" often results in needless complexity. Of course this is not always the case, but sometimes you end up having controller classes which perform very similar, if not even the exact same actions, resulting in code repetition. (An OO'ish solution to this problem would be to have a common base class for these view controllers where the common functionality has been grouped, but this often just adds to the overall complexity of the class hierarchy rather than alleviating it.)
    As an example, let's assume that you have a set of help screens (for example one help screen for each major feature of the app) and a view where you can select which help view to show. Every one of these views has, for example, a button to immediately exit the help system. If you had one single controller class managing these views, this becomes simpler: The controller can switch between any of the views and the buttons of each view (most of them doing the same things) can call back actions on this controller (eg. to return to the help selection or to exit the help screen completely). These help screens don't necessarily have any functionality of their own, so it's questionable what do they would need view controllers of their own. These view controllers would basically be empty because there's nothing special for them to do.
    View controllers might make it easy to use the navigation controller class, but the navigation controller is suitable mainly for utility apps but often not for things like games. (And if you need animated transitions between views, that can be implemented using the UIView animation features.)
    I also have hard time seeing the advantages of adhering strictly to the MVC pattern. The MVC pattern is useful in things like web servers, where MVC adds flexibility. The controller acts as a mediator between the database and the user interface, and it does so in such an abstract way that either one can be easily changed (eg. the "view", which normally outputs HTML, could be easily changed to a different "view" which outputs a PDF or even plain text, all this without having to touch the controller or the model at all). However, I'm not seeing the advantages of the MVC pattern in an iPhone app. It provides a type of class design, but why is it better than some other class design? It's not like the input and output formats of the app need to be changed on the fly (which is one advantage of a well-designed program using the MVC pattern).

  • How to go from a View Controller to a View Controller

    Hey everyone, I have asked this question over on Stack Overflow, and really had no luck with it.
         I am wondering how to go from one (1) View Controller that has buttons and another View Controller that has a UIWebViewer in? I know how to do the simple part to get the two to link up. But, the buttons are going to have different URL's hooked up to them, and I want to be able to reuse the Web Viewer. I am using the Swift Programming language to be able to do this.
    below is my current code that is has my buttons sitting on top of my web viewer,
    import UIKit
    import WebKit
    class ViewController: UIViewController {   
        @IBOutlet var wbView: UIWebView!
        var strUrl = ""
            @IBAction func buttonAction(sender: UIButton) {
                switch (sender.tag){
                case 1:
                    strUrl = "https://www.google.co.in/"
                case 2:
                    strUrl = "https://in.yahoo.com/"
                case 3:
                    strUrl = "https://www.facebook.com/"
                case 4:
                    strUrl = "https://bing.com/"
                default:
                    break;
                reloadWebViewWithUrl(strUrl);
            func reloadWebViewWithUrl(strUrl: NSString){
                var url = NSURL(string: strUrl);
                var request = NSURLRequest(URL: url!);
                wbView.loadRequest(request);
            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view, typically from a nib.
            override func didReceiveMemoryWarning() {
                super.didReceiveMemoryWarning()
                // Dispose of any resources that can be recreated.
    How should I go about changing this two allow my buttons to be in their own ViewController and still be able to to the secondary View Controller with the WebViewer?
    Thank You all in advanced with the help on this!

    This is the FirstViewController Code
    import UIKit
    class FirstViewController: UIViewController {
        @IBAction func webAction(sender: UIButton) {
            let index = sender.tag
            chosenURLString = addresses[index]
            performSegueWithIdentifier("WebViewSegue", sender: self)
        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
            if let controller = segue.destinationViewController as?
                SecondViewController {
                controller.urlString = chosenURLString
                chosenURLString = nil
        private let addresses = ["", "https://www.google.com", "https://www.facebook.com", "https://spca.org", "https://www.facebook.com/wagzpack?fref=photo"]
        private var chosenURLString: String?
    This is the SecondViewController Code
    import UIKit
    class SecondViewController: UIViewController {
        @IBOutlet var webSite: UIWebView!
        var urlString: String?
        override func viewDidLoad() {
            super.viewDidLoad()
            if let urlString = urlString {
                if let url = NSURL(string: urlString) {
                    let request = NSURLRequest(URL: url)
                    webSite.loadRequest(request)
                    println("loading \(urlString)")
                else {
                    println("badly formed URL string.")
            else {
                println("missing URL string.")

  • TP CONFIGURATION PROBLEM ( While creating a View Controller in Component )

    Hi All,
         I have a problem in TP Config while creating a View Controller in a component i am getting this Exception 
        Parameter lsm(&1) not in version 0004(&2) of tp configuration .
        This Exception Raised from this Function Module : RS_ACCESS_PERMISSION
    Any on can please help me to come out of this issue.
    Regards And Thank you,
    Nirmala.K

    Sounds like you should be using one of the Apps forums, perhaps {forum:id=210}

  • Hook methods in component controller vs hook methods in view controller

    Hi,
    I want to know how WDDoInit in component controller differs from the same in view controller.
    How the lifecycle flows in both controllers?
    Eg. if i create a method intialize() in both component  & view controllers and if i called initalize method in view, which one will be called?
    Need to know how the flow works.
    Regards,
    Manoj

    Dear Manoj,
    Please check if it is helpful.
    The order of execution of standard hook methods when a WDJ application is called the first time is as follows:
    1. Component Controller DoInIt()
    2. View Controller DoInIt()
    3. Interface Window Controller
    4. Component Controller DoBeforeNavigation()
    5. Component Controller DoModify()
    6. Component Controller DoPostProcessing()
    After this, if you navigate to some other view, then the order of execution of methods of that New view will be:
    1. Component Controller DoBeforeNavigation()
    2. New View DoInIt()
    3. New View onPlugfromFirstView
    4. Component Controller DoModify()
    5. Component Controller DoPostProcessing()
    Then, if you again navigate back to the first view, then the order of execution of methods is:
    1. Component Controller DoBeforeNavigation()
    2. New View onPlugfromNewView
    3. Component Controller DoModify()
    4. Component Controller DoPostProcessing()
    Webdynpro - Sequence of Execution
    Thanks & Regards,
    Patralekha

Maybe you are looking for