Dynamic Creation of Context Nodes

Hi everybody,
I'm struggling with the following code.
public void wdDoInit()
    //@@begin wdDoInit()
          IPrivateTestView.IPersonNode personNode = wdContext.nodePerson();
          IPrivateTestView.IPersonElement personElement = personNode.createPersonElement();
          personElement.setText("John");
          personNode.getNodeInfo().addAttribute("selected_0", "ddic:com.sap.dictionary.boolean");
          personElement.setAttributeValue("selected_0", new Boolean(true));
          personNode.addElement(personElement);
          personNode = wdContext.nodePerson();
          personElement = personNode.createPersonElement();
          personElement.setText("Walter");
          personNode.getNodeInfo().addAttribute("selected_1", "ddic:com.sap.dictionary.boolean");
          personElement.setAttributeValue("selected_1", new Boolean(true));
          personNode.addElement(personElement);
    //@@end
public static void wdDoModifyView(IPrivateTestView wdThis, IPrivateTestView.IContextNode wdContext, com.sap.tc.webdynpro.progmodel.api.IWDView view, boolean firstTime)
    //@@begin wdDoModifyView
          IWDTransparentContainer tc = (IWDTransparentContainer) view.getElement("container");
          IWDCheckBox cb0 = (IWDCheckBox) view.createElement(IWDCheckBox.class, "cb_0");
          IWDCheckBox cb1 = (IWDCheckBox) view.createElement(IWDCheckBox.class, "cb_1");
          IPrivateTestView.IPersonElement personElement = (IPrivateTestView.IPersonElement) wdContext.nodePerson().getElementAt(0);
          cb0.bindChecked(personElement.getAttributePointer("selected_0").getAttributeInfo());
          tc.addChild(cb0);
          personElement = (IPrivateTestView.IPersonElement) wdContext.nodePerson().getElementAt(1);
          cb1.bindChecked(personElement.getAttributePointer("selected_1").getAttributeInfo());
          tc.addChild(cb1);
    //@@end
Context's structure is as follows:
- Person (cardinality: 0..n; selection:0..n)
- Text   (String)
I cannot figure out why, when the program runs, it renders 2 checkboxes but only the first one is checked.
The second checkbox should be checked off as well since its checked property is bound to the attribute selected_1 which is set to true.
Thanks in advance.
Marco

Hi,
As per my understanding you are trying to create group of check boxes dynamaically and all check boxes should work independent of each other. Please try the following code, I have modified your code:
- Change the cardinality of the Peron node to 1..1
public void wdDoInit()
    //@@begin wdDoInit()
     IPrivateTestComponentView.IPersonNode personNode = wdContext.nodePerson();
     IPrivateTestComponentView.IPersonElement personElement = personNode.currentPersonElement();
     //personElement.setText("John");
     personNode.getNodeInfo().addAttribute("selected_0", "ddic:com.sap.dictionary.boolean");
     personElement.setAttributeValue("selected_0", new Boolean(true));
     personNode.getNodeInfo().addAttribute("text_0", "ddic:com.sap.dictionary.string");
     personElement.setAttributeValue("text_0","John");
     //personNode.addElement(personElement);
     //personNode = wdContext.nodePerson();
     //personElement = personNode.createPersonElement();
     //personElement.setText("Walter");
     personNode.getNodeInfo().addAttribute("selected_1", "ddic:com.sap.dictionary.boolean");
     personElement.setAttributeValue("selected_1", new Boolean(true));
     personNode.getNodeInfo().addAttribute("text_1", "ddic:com.sap.dictionary.string");
     personElement.setAttributeValue("text_1","Walter");
     //personNode.addElement(personElement);
    //@@end
  public static void wdDoModifyView(IPrivateTestComponentView wdThis, IPrivateTestComponentView.IContextNode wdContext, com.sap.tc.webdynpro.progmodel.api.IWDView view, boolean firstTime)
    //@@begin wdDoModifyView
    if(firstTime)
     IWDTransparentContainer tc = (IWDTransparentContainer) view.getElement("container");
     IWDCheckBox cb0 = (IWDCheckBox) view.createElement(IWDCheckBox.class, "cb_0");
     IWDCheckBox cb1 = (IWDCheckBox) view.createElement(IWDCheckBox.class, "cb_1");
     //IPrivateTestComponentView.IPersonElement personElement = (IPrivateTestComponentView.IPersonElement) wdContext.nodePerson().getElementAt(0);
     cb0.bindChecked(wdContext.nodePerson().getNodeInfo().getAttribute("selected_0"));
     cb0.bindText(wdContext.nodePerson().getNodeInfo().getAttribute("text_0"));
     tc.addChild(cb0);
     //personElement = (IPrivateTestComponentView.IPersonElement) wdContext.nodePerson().getElementAt(1);
     cb1.bindChecked(wdContext.nodePerson().getNodeInfo().getAttribute("selected_1"));
     cb1.bindText(wdContext.nodePerson().getNodeInfo().getAttribute("text_1"));
     tc.addChild(cb1);
    //@@end
Here I have used 1..1 cardinaltiy node and created all attributes dynamically.
Regards
Abhilash

Similar Messages

  • Dynamic creation of context nodes and ui elements

    Hi,
    I have created context nodes dynamically. And i also want to create UI elements dynamically wherein i want to bind the attribute from the context node to it. For example i want to create a drop down by index and bind one of the attributes in the context nodes that i have earlier created dynamically to it.  I do not know how to get the path to the attribute as i get IF_WD_CONTEXTNODE_INFO when i say get_child_node(). And the IF_WD_CONTEXTNODE_INFO does not have any method where in i can get IF_WD_CONTEXT_NODE from where i can get the path by get_meta_path( )
    Here is the code. The problem is to get the path which is the i/p to cl_wd_dropdown_by_idx=>new_dropdown_by_idx( ) method.
    DATA:
            lo_root_ui_elmnt              TYPE REF TO cl_wd_uielement_container,
            lo_drpdwn_by_idx              TYPE REF TO cl_wd_dropdown_by_idx,
            lo_txt_vw                     TYPE REF TO cl_wd_text_view,
            lo_qstn_node                  TYPE REF TO if_wd_context_node,
            lo_optn_node_info             TYPE REF TO if_wd_context_node_info,
            lv_optn_data_source_name      TYPE string,
            lt_child_nodes                TYPE wdr_context_child_map,
            lo_qstn_el                    TYPE REF TO if_wd_context_element,
            lo_optn_el                    TYPE REF TO if_wd_context_element,
            lv_text                       TYPE string,
            lo_qstn_node_info             TYPE REF TO if_wd_context_node_info.
      FIELD-SYMBOLS:
    *                 <ls_qstn>    LIKE LINE OF wd_this->mt_questions.
                    <ls_child_node>         LIKE LINE OF lt_child_nodes.
      lo_root_ui_elmnt ?= io_view->get_root_element( ).
      lt_child_nodes = wd_context->get_child_nodes( ).
    LOOP AT lt_child_nodes ASSIGNING <ls_child_node>.
       lo_qstn_node = <ls_child_node>-node.
        lo_qstn_el = lo_qstn_node->get_element( index = 1 ).
        lo_qstn_el->get_attribute(
              EXPORTING
                name = 'QUESTION_TEXT'
               IMPORTING
                 value = lv_text ).
        lo_txt_vw =   cl_wd_text_view=>new_text_view( view = io_view ).
        lo_txt_vw->set_text( value = lv_text  ).
        lo_qstn_node_info = lo_qstn_node->get_node_info( ).
        lo_optn_node_info = lo_qstn_node_info->get_child_node( 'OPTIONS' ).
    *    lv_optn_data_source_name = lo_optn_node_info->get_meta_path( withoutcontroller = abap_true ).
    *    CONCATENATE lv_optn_data_source_name '.' 'OPTION_TEXT' INTO lv_optn_data_source_name.
        lo_drpdwn_by_idx = cl_wd_dropdown_by_idx=>new_dropdown_by_idx(
                              bind_texts = lv_optn_data_source_name
                              view       = io_view ).
        lo_root_ui_elmnt->add_child( lo_txt_vw ).
        lo_root_ui_elmnt->add_child( lo_drpdwn_by_idx ).
      ENDLOOP.
    Regards,
    Madhura Lobo
    Edited by: Suhas Saha on Aug 2, 2011 11:04 AM

    Hi Madhura,
    Please check this thread and find Baskaran answer...
    create new child-node in supply-function
    Re: Creating Dynamic Node and Table
    Cheers,
    Kris.

  • Reg: Dynamic creation of context

    Hi,
    I have a value node Vn_node and one value attribute Va_att and i have binded it a table.
    I have another node Vn_node1 and attribute for this is Va_att1,
    based on the size of Vn_node1, i need to create value attributes in Vn_node of type checkbox and bind it to the table and the header text should be corresponding Va_att1.
    Kindly suggest.
    Regards,
    Prasanthi.

    For Dynammically creating Context use the following code:
    Ctx_bool1 is a context whose property is checked and it is set true and Context added to the node of type string.( you can change its type).
    Added code in OnActionget:
    if(!wdContext.currentContextElement().getCtx_bool1())
              wdContext.currentContextElement().setCtx_bool1(true);
              wdContext.getNodeInfo().addAttribute("nameValue","ddic:com.sap.dictionary.string");
    In wddomodifyView:
    You can bind the context attribute to a field or so shown and add it to RootContainer.
    Field is created.
    IWDInputField input = (IWDInputField)view.createElement(IWDInputField.class,"nameField");
    Binding of field to the context.
    input.bindValue("nameValue");
    Adding it to RootContainer.
    IWDTransparentContainer  c = (IWDTransparentContainer)view.getElement("RootUIElementContainer");
    c.addchild(input).
    I hope this wud help you as you would be able to create a context dynammically and bind it with field.
    Thanx.

  • Dynamic creation of xml node

    Hi there
    I can't quite figure out how to add a node based on a passed
    variable value
    If I hard code it as can be seen in the line of code
    commented out - it works.
    But if I try to pass a string, it doesn't work
    public function addNodeToXML(passedNodeName:String):void {
    //_qualificationSummaryScreenXML.appendChild(<pupil
    />);
    _qualificationSummaryScreenXML.appendChild(passedNodeName);
    This is the call to the function
    addNodeToXML("<pupil />");
    Would be very grateful if someone can help me fix this
    Thanks
    Paul

    Hi Suman,
    I would suggest that you ask questions about ABAP WD in the forum for ABAP WD.
    Kind regards,
    Ulrich

  • Dynamic Context Node Copying question

    I am trying to dynamically copy some context nodes from my component controller to the view controller.  In the source context, I have a node whose "Multiple" property is set to true.
    I use the function addMappedChild to copy the attribute info, but the copied node always has "Multiple" set to false!! In the definition of addMappedChild there is no paramter for "Multiple".  How do I do this?
    Thanks
    Walter
    public IWDNodeInfo addMappedChild(java.lang.String name,
                                      java.lang.Class elementClass,
                                      boolean singleton,
                                      boolean mandatorySelection,
                                      boolean multipleSelection,
                                      java.lang.String mappedPath,
                                      boolean selectionMapped,
                                      boolean initializeLeadSelection)

    Are you making like dscribed here
    https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/webdynpro/dynamically creating, building, and mapping a context in web dynpro.pdf 
    page 14?
    Best Regards, Maxim r.

  • Using Search Help with ALV and Dynamic context node

    The topic subject already describes my situation.
    I have to create, populate and remove context nodes at runtime, and bind them to an ALV, to let user display the data or modify the data. The nodes I create are always typed with a table name, but the table name is of course, dynamic.
    This is all working: what's not working is help for entries inside the ALV; since the table has foreign keys and domains with check tables or fixed values, I expected that search helps were detected and managed by the framework.
    Instead, no help search is displayed except the input help based on data-type of the one "Date" input fields.
    I think I have to work on the dynamic node creation, and not on the ALV itself, since the latter only takes the node/attributes information, but i could be wrong. I tried with both the two following codings:
      CALL METHOD lo_nd_info_root->add_new_child_node
        EXPORTING
          static_element_type          = vs_tabname
          name                         = 'SAMPLE_NODE_NAME'
    *    is_mandatory                 = abap_false
    *    is_mandatory_selection       = abap_false
         is_multiple                  = abap_true
         is_multiple_selection        = abap_false
    *    is_singleton                 = abap_false
          is_initialize_lead_selection = abap_false
          is_static                    = abap_false
        RECEIVING
          child_node_info              = lo_nd_info_data .
    cl_wd_dynamic_tool=>create_nodeinfo_from_struct(
          parent_info = lo_nd_info_root
          node_name = 'SAMPLE_NODE_NAME'
          structure_name = vs_tabname
          is_multiple = abap_true ).
    The result is the same...is there any way to let the ALV know what search helps it has to use, and doesn't force me to manually build a VALUE_SET to be bound on the single attributes? There are many tables, with many fields, and maintaining this solution would be very costly.

    I have checked with method GET_ATTRIBUTE_VALUEHELP_TYPE of interface IF_WD_CONTEXT_NODE_INFO, on an attribute which i know to have a search help (Foreign key of a check table).
    The method returns 'N', that is the constant IF_WD_VALUE_HELP_HANDLER~CO_VH_TYPE_NO_HELP. So, the framework was not able to find a suitable search help.
    Using method GET_ATTRIBUTE_VALUE_HELP of the same interface, on the same attribute, returns me '111', which is constant C_VALUE_HELP_MODE-AUTOMATIC.
    Therefore, the WD framework knows it has to automatically detect a value help, but fails to find one.
    Also, this means in my opinion that the ALV and the dynamic external mapping are not the culprits: since node creation, no help is detected for any attribute but the date. Honestly, I don't have a clue on what's happening.

  • Error creating dynamic context node in Webdynpro for ABAP. Plesae help!

    Hi
       I am getting the following error while creating a dynamic context node with 2 attributes. Please help me resolve this problem.
    Note
    The following error text was processed in the system PET : Line types of an internal table and a work area not compatible.
    The error occurred on the application server FMSAP995_PET_02 and in the work process 0 .
    The termination type was: RABAX_STATE
    The ABAP call stack was:
    Method: IF_WD_CONTEXT_NODE~GET_STATIC_ATTRIBUTES_TABLE of program CL_WDR_CONTEXT_NODE_VAL=======CP
    Method: GET_REF_TO_TABLE of program CL_SALV_WD_DATA_TABLE=========CP
    Method: EXECUTE of program CL_SALV_WD_SERVICE_MANAGER====CP
    Method: APPLY_SERVICES of program CL_SALV_BS_RESULT_DATA_TABLE==CP
    Method: REFRESH of program CL_SALV_BS_RESULT_DATA_TABLE==CP
    Method: IF_SALV_WD_COMP_TABLE_DATA~MAP_FROM_SOURCE_DATA of program CL_SALV_WD_C_TABLE_V_TABLE====CP
    Method: IF_SALV_WD_COMP_TABLE_DATA~MAP_FROM_SOURCE of program CL_SALV_WD_C_TABLE_V_TABLE====CP
    Method: IF_SALV_WD_COMP_TABLE_DATA~UPDATE of program CL_SALV_WD_C_TABLE_V_TABLE====CP
    Method: IF_SALV_WD_VIEW~MODIFY of program CL_SALV_WD_C_TABLE_V_TABLE====CP
    Method: IF_SALV_WD_COMPONENT~VIEW_MODIFY of program CL_SALV_WD_A_COMPONENT========CP
    My code is like the following:
    TYPES: BEGIN OF t_type,
                CARRID TYPE sflight-carrid,
                CONNID TYPE sflight-connid,
             END OF t_type.
      Data:  i_struc type table of t_type,
      dyn_node   type ref to if_wd_context_node,
      rootnode_info   type ref to if_wd_context_node_info,
      i_node_att type wdr_context_attr_info_map,
      wa_node_att type line of wdr_context_attr_info_map.
          wa_node_att-name = 'CARRID'.
          wa_node_att-TYPE_NAME = 'SFLIGHT-CARRID'.
          insert wa_node_att into table i_node_att.
          wa_node_att-name = 'CONNID'.
          wa_node_att-TYPE_NAME = 'SFLIGHT-CONNID'.
          insert wa_node_att into table i_node_att.
    clear i_struc. refresh i_struc.
      select carrid connid into corresponding fields of table i_struc from sflight where carrid = 'AA'.
    rootnode_info = wd_context->get_node_info( ).
    rootnode_info->add_new_child_node( name = 'DYNFLIGHT'
                                       attributes = i_node_att
                                       is_multiple = abap_true ).
    dyn_node = wd_context->get_child_node( 'DYNFLIGHT' ).
    dyn_node->bind_table( i_struc ).
    l_ref_interfacecontroller->set_data( dyn_node ).
    I am trying to create a new node. That is
    CONTEXT
    - DYNFLIGHT
    CARRID
    CONNID
    As you see above I am trying to create 'DYNFLIGHT' along with the 2 attributes which are inside this node. The structure of the node that is, no.of attributes may vary based on some condition. Thats why I am trying to create a node dynamically.
    Also I cannot define the structure in the ABAP dictionary because it changes based on condition

    Ok, I think I found a bug... It seems for adobe forms in WD4A, the root context node must be 1-1 and you must nest the 1-n node within that... Not sure why, but it worked. So in my case my context would look like this:
    FOO_NODE (1-1)
         Widget (1-N)
              -Widget_info (1-1)
                   *Name
                   *Sku
                   *Description
              -Widget_plant (1-M)
                   *Plant_Code
                   *Plant_State
                   *Plant_City
              -Widget_pic (1-1)
                   *Picture

  • Adding dynamic attributes to static context node

    Hi All,
    I have defined a context node LINES with several attributes. This is done staticly during developmenttime.
    During run-time node LINES is extended with several attributes dynamicly. See below:
    10     HEADER_GUID               ->
    11     DETAIL_GUID               ->
    12     EXTERNAL_ID               ->
    13     OBJECT_TYPE               ->
    14     IN_OUT_PLAN               ->
    15     TRAFFIC_LIGHT_1               ->
    16     TRAFFIC_LIGHT_2               ->
    17     TRAFFIC_LIGHT_3               ->
    18     TRAFFIC_LIGHT_4               ->
    19     _LOCATION          \TYPE=STRING     ->
    20     _ZZTOPGROUPING     \TYPE=STRING     ->
    21     _STATUS          \TYPE=STRING     ->
    22     _100000200          \TYPE=STRING     ->
    19..22 are added dynamicly.
    I have an internal table that matches de new context. This <fs_tb_tree_new> I want to bind like:
    *&- bind table
      lr_node->bind_table( new_items =  <fs_tb_tree_new>
                           set_initial_elements = abap_true ).
    In <fs_tb_tree_new> the dynamicly added attrbutes contains values e.g. (the static attributes also have values via <fs_tb_tree_new>):
                         _LOCATION   _ZZTOPGROUPING  _STATUS              _100000200                   
    5     Africa     0002     Reporting Entity     0.000
    6     Russia, CIS     0003     Identify                          0.000
    An ALV presents the values of the attribute. But.... only the values of the static part are presented, not the dynamic attributes added during runtime.
    Please advise what I forget or do wrong .
    Thanks in advance.
    John

    I solved the issue:
    If you use a combination of static attributes added with dynanic attributes (during runtime) for dynamic ALV, I advise to create a new node and bind the values to this new created node:
    Cheers, John
    wd_this->extend_context( EXPORTING im_struc_descr =  lr_cl_abap_structdescr
                               IMPORTING ex_node = lr_node_alv ).
    Method:
    *&- Create new dynamic context LINES_DYN
    Node for alv-table
      lr_node_info = wd_context->get_node_info( ).
      CALL METHOD lr_node_info->add_new_child_node
        EXPORTING
          name                  = 'LINES_NEW'
          static_element_rtti   = im_struc_descr
          is_static             = abap_true
          is_multiple           = abap_true
          is_multiple_selection = abap_false
        RECEIVING
          child_node_info       = lr_subnode_info.
    lr_node = lr_subnode_info->get_parent( ).
      lr_node = wd_context->get_child_node( 'LINES_NEW' ).
      ex_node = lr_node.
    *&- bind table for alv
      lr_node_alv->bind_table( new_items =  <fs_tb_tree_new>
                               set_initial_elements = abap_true ).

  • ABAP: dynamic context node + attribute for DROP_DOWN_BY_KEY

    Hello,
    I need to create a Node with attributes dynamically and than assign it to a DROP_DOW_BY_KEY element in ABAP.
    I create drop down this way:
    drop_down_figure = cl_wd_dropdown_by_key=>new_dropdown_by_key( bind_selected_key = 'REPOSITORY.FIGURES' on_select = 'GET_OPERATOR' ).
      cl_wd_grid_data=>new_grid_data( element = drop_down_figure ).
      ui_container->add_child( drop_down_figure ).
    However, here I bind to REPOSITORY.FIGURES. Instead of doing this I need to bind it to an attribute that I create.
    I can access wd_context but I am not sure how to create a node in wd_context, then attribute for that node that will contain items for drop down.
    bind_selected_key is type of String. If I create a node with attribute how do I cast it to a String so I can pass it to a constructor of a drop down?
    Thank you.

    Hi Georgy,
    There is a 3 - series weblog for this.
    The first one is:
    /people/thomas.szcs/blog/2005/12/28/dynamic-programming-in-web-dynpro-abap--introduction-and-part-i-understanding-ui-elements
    The following are the the general steps for creating a node and table where table name is input by the user:
    DATA:
      UI Elements
        group_1       TYPE REF TO cl_wd_uielement_container,
        new_tab       TYPE REF TO cl_wd_table,
      Context Nodes
        dyn_node      TYPE REF TO if_wd_context_node,
        tabname_node  TYPE REF TO if_wd_context_node,
      Node Info
        rootnode_info TYPE REF TO if_wd_context_node_info,
      Data Reference (for internal table)
        stru_tab      TYPE REF TO data,
      String (for table name)
        tablename     TYPE string.
      FIELD-SYMBOLS:
        <tab> TYPE table.
    1) * get node info of context root node
      rootnode_info = wd_context->get_node_info( ).
    2) * create sub node named TEST1 of structure (tablename)
      cl_wd_dynamic_tool=>create_nodeinfo_from_struct(
        parent_info = rootnode_info
        node_name = tablename
        structure_name = tablename
        is_multiple = abap_true ).
    3) * get instance of new node
      dyn_node = wd_context->get_child_node( name = tablename ).
    4) ***** create new UI element table *******************************************************
      new_tab = cl_wd_dynamic_tool=>create_table_from_node(
    ui_parent = group_1
    table_id  = 'TESTTAB'
    node      = dyn_node ).
    5) ***** fill context node with data *******************************************************
    create internal table of (tabletype)
      CREATE DATA stru_tab TYPE TABLE OF (tablename).
      ASSIGN stru_tab->* TO <tab>.
    Get table content
      SELECT * FROM (tablename) INTO CORRESPONDING FIELDS OF TABLE <tab>.
    Bind internal table to context node.
      dyn_node->bind_table( <tab> ).
    Regards,
    Srini.

  • How to delete a dynamically created context node ?

    Hi
      I have created a context node dynamically and have added the check boxes to the node.
      But when i am refreshing the page it is giving me the following excepiton:
    com.sap.tc.webdynpro.progmodel.context.ContextException: DataNodeInfo(DwdReportView.Person): duplicate name for attribute attr1
    I am writing the following code in wdDoExit() method so that the node is invalidated  and all dynamically added nodes and attributes are destroyed from the metadata.
    The code  is :
         wdContext.getContext().reset(false);
    or
         wdContext.getContext().reset();
    or
                         wdContext.nodeName().invalidate();
    I have tried all the above mentioned code  snippets but it is still giving me the same exception.
    Please help me  resolve this issue.
    Thanks in advance.
    Regards
    Shaily

    Shally,
    A better forum to place your question is the forum.
    To your question: the wdDoExit() method is only called once i.e. when the view is destroyed from memory. Just like the wdDoInit() mehtod is called only once at initialisation of the view.
    Try refactoring your code, so that upon initialising of your context, the old version of it is removed.
    Hope this helps.
    Regards,
    Alain

  • Dynamic reverse context node mapping at runtime

    Hi!
    I have an application which uses another embedded component containing a ALV table which shows the data of a transparent table.
    Everything works fine if i'm working with a static table with static attributes and map the context node of the application to the node in the embedded component. The context node in the embedded component is reversed mapped and gets its data from the application's context node.
    Now i want to do it dynamically. Inside the application the user should choose the name of a table and I'm using RTTI functions to get it's technical informations. At runtime i'm adding dynamically attributes (i.e. fieldname, type, length) to a static context node called 'DATA'.
    The ALV component of the embedded component is mapped to an interface context node named 'DATA' which uses reverse mapping to receive data from the applications context node 'DATA'.
    What I need to know is how to create the mapping between application context node and interface context node of the embedded component at runtime after i have created the attributes of the node dynamically. Is that basically possible?
    I've already tried to map the both nodes statically to see if the dynamically created attributes are mapped automatically then. The mapping seems to be fine at node level, but doesn't work for the later dynamically added attributes.
    Could someone point me to informations if dynamic mapping context nodes is basically possible and how to do it?
    Regards
    Ralf-J.

    Hi Lars!
    Thanks for the link! The problem isn't to fill the context node dynamically. That's already working using RTTI etc.
    It seems to me that the interface context node of the ALV in the embedded component doesn't recognize the dynamically added attributes. As i wrote the binding on node level (DATA->DATA), which i'm doing at design time, is working as expected, but the added attributes are only shown in the context node of the using component but not in the embedded.
    I'm still thinking there must be a way to do a binding at runtime. On the other hand the comment of Glenn in the thread you've pointed me to, seems to suggest that the ALV itself might have problems with dynamically appended attributes.
    Regards
    Ralf-J.

  • Dynamic creation of ItemListBox and binding a child node

    Hello @all,
    I have the following context structure
    root
    --category
    -- --report
    -- -- --id
    -- -- --name
    -- --id
    -- --name
    the parent node is "category" with attributes "id" and "name" and the child node is "report" with "id" and "name".
    Now I want on an onAction-Event of a Button, that for every category an itemListBox will be created with the according report names. the creation of the itemList is not the problem, but the binding of the datasource and/or the descriptivetext.
    my code:
    public void initItemListBox( )
        //@@begin initItemListBox()
        IWDView view = wdContext.currentContextElement().getSelectView();
        IWDGroup group = (IWDGroup) view.getElement("ItemListGroup");
        if (group.hasChildren())
          group.removeAllChildren();
        for (int i = 0; i < wdContext.nodeCategory().size(); i++)
          ICategoryElement catEl = wdContext.nodeCategory().getCategoryElementAt(i);
          wdContext.nodeCategory().setLeadSelection(i);
          generateItemLists(wdContext.currentContextElement().getSelectView(), wdContext, catEl);
        //@@end
    public void generateItemLists( com.sap.tc.webdynpro.progmodel.api.IWDView view, de.mgi.portaldev.bc.mdw.msi.wdp.IPrivateCRSReportView.IContextNode wdContext, de.mgi.portaldev.bc.mdw.msi.wdp.IPrivateCRSReportView.ICategoryElement category )
        //@@begin generateItemLists()
        //    ItemListBox
        IWDGroup group;
        IWDGroup catGroup;
        IWDLabel label;
        String groupId = "group_" + category.getName();
        catGroup = (IWDGroup) view.createElement(IWDGroup.class, groupId);
        IWDMatrixLayout matrLayout = (IWDMatrixLayout) catGroup.createLayout(IWDMatrixLayout.class);
        String labelId = "label_" + category.getName();
        label = (IWDLabel) view.createElement(IWDLabel.class, labelId);
        label.setText(category.getName());
        IWDMatrixData layout = (IWDMatrixData) label.createLayoutData(IWDMatrixData.class);
        layout.setVAlign(WDCellVAlign.TOP);
        String itemListId = "itemList_" + category.getName();
        IWDItemListBox itemListBox = (IWDItemListBox) view.createElement(IWDItemListBox.class, itemListId);
        label.setLabelFor(itemListId);
        IWDMatrixData itemlayout = (IWDMatrixData) itemListBox.createLayoutData(IWDMatrixData.class);
        itemListBox.bindDescriptiveText("crsReporting.category.report.name");
        IWDNodeInfo reportNodeInfo = category.nodeReport().getNodeInfo();
    //    itemListBox.bindText(reportNodeInfo.getAttribute("name"));
        itemListBox.setVisibleItems(5);
        IWDMatrixHeadData matrixHead = (IWDMatrixHeadData) itemListBox.createLayoutData(IWDMatrixHeadData.class);
        IWDAction itemListAct = (IWDAction) wdThis.wdGetItemSelectAction();
        itemListBox.setOnLeadSelect(itemListAct);
    //    itemListBox.bindDataSource(reportNodeInfo);
        itemListBox.bindDataSource("crsReporting.category.report");
        catGroup.addChild(label);
        catGroup.addChild(itemListBox);
        group = (IWDGroup) view.getElement("ItemListGroup");
        group.addChild(catGroup);
        //    END ITEMLIST
        //@@end
    What am I doing wrong? in every ItemListbox there are only the report names of the last category.
    thanks.

    RowRepeater is available in WD Java since NW CE (7.1). With RowRepeater, the solution is trivial and can be done completely by declaration in view designer.
    In earlier releases, you can solve it as follows (non-trivial)
    - For each category, create a separate context node "Category_i" with an attribute "name"
    - Inside each category node, create a non-singleton node "Reports" with an attribute "name"
    - Foreach report, add a node element to the reports subnode of its category node <b>element</b>
    All this has to be done using the generic context API.
    On each change of the data, reset the context and re-create these nodes.
    In wdDoModifyView(), check if data have changes and create UI elements programmatically.
    - For each category, create a group, bind header text to category name.
    - Inside each group, create a ItemListBox, bind "dataSource" to reports sub-node of category (non-singleton!) and bind "text" to text attribute of report node.
    Sample code:
    To build context structure:
    private void createCategories()
        for (int i = 0; i < 3; ++i)
          IWDNodeInfo categoryNodeInfo = wdContext.getNodeInfo().addChild("Category" + i, null, true, CMICardinality.ONE, CMICardinality.ONE, true, null);
          IWDAttributeInfo att = categoryNodeInfo.addAttribute("name", "ddic:com.sap.dictionary.string");
          IWDNode categoryNode = wdContext.getChildNode(categoryNodeInfo.getName(), 0);
          categoryNode.getElementAt(0).setAttributeValue(att.getName(), "Category #" + i);
          IWDNodeInfo reportNodeInfo = categoryNodeInfo.addChild("Reports", null, false, CMICardinality.MANY, CMICardinality.ZERO_TO_ONE, true, null);
          IWDAttributeInfo attReportName = reportNodeInfo.addAttribute("name", "ddic:com.sap.dictionary.string");
          IWDNode reportNode = categoryNode.getChildNode("Reports", 0);
          for (int j = 0; j < 5; ++j)
            IWDNodeElement report = reportNode.createAndAddElement();
            report.setAttributeValue("name", "Report #" + j);
    To recreate UI:
    if (<data_have_changed>)
          IWDTransparentContainer root = (IWDTransparentContainer) view.getRootElement();
          for (int i = 0; i < 3; ++i)
            IWDNode categoryNode = wdContext.getChildNode("Category" + i, 0);
            IWDAttributeInfo attName = categoryNode.getNodeInfo().getAttribute("name");
            IWDGroup group = view.createElement(IWDGroup.class);
            root.addChild(group);
            IWDCaption header = view.createElement(IWDCaption.class);
            group.setHeader(header);
            header.bindText(attName);
            IWDNode reportsNode = categoryNode.getChildNode("Reports", 0);
            IWDAttributeInfo attReportName = reportsNode.getNodeInfo().getAttribute("name");
            IWDItemListBox list = view.createElement(IWDItemListBox.class);
            group.addChild(list);
            list.bindDataSource(reportsNode.getNodeInfo());
            list.bindText(attReportName);
    Armin
    Fixed code tags

  • Creating context node dynamically in web dynpro for java

    Hi
    I am having requirement where user can ask for 3 tables . I have created tables dynamically. But now  i want that context node should also be created dynamically.
    Thanks and Regards,
    Saurabh

    Hello Saurabh,
    Refer the below link:
    http://wiki.sdn.sap.com/wiki/display/WDJava/DynamicUIGeneration.
    There is a section Dynamically Building the Context. Please refer to that.
    There are lots of things available in SDN for the same.
    Regards
    Nizamudeen SM

  • To access a dynamic context node defined in a Used Component

    Hi Gurus,
    I need your help with something.
    I have a dynamic context node in ComponentA. I want it in Component B too.
    Component B uses Component A, but I am not able to get access to the context node.
    Is it possible to do this? Any suggestions how to proceed.
    PS: I am trying to do a dynamic mapping. The initial scenario was here, Set data into Model Node on Navigating from a View
    Thanks in advance,
    Anjana R.
    Message was edited by:
            Anjana Raghav

    Hi Gurus,
    Its working now. Earlier, the code was something like this....
    IWDNodeInfo compNode = wdThis.wdGet<i>Comp</i>Interface().wdGetAPI().getContext().getRootNodeInfo().getChild(nodeNm);
    viewNodeInfo.setMapping(compNode,true);
    and was trying to map it using
    iewNodeInfo.addMappedAttribute("order",".<i>Comp</i>."+ nodeNm + ".order");     
    Now, I am mapping like this.
    viewNodeInfo.addMappedAttribute("order","order");
    Thanks,
    Anjana R.

  • How to access the structure of a dynamically created context node/element

    Hi All,
    in method wddoinit I have added a context node and some attributes
    lo_node = wd_context->get_child_node( name = wd_this->wdctx_instructors ).
      lo_node_info = lo_node->get_node_info( ).
      lo_node_info = lo_node_info->add_new_child_node( name                  = 'OCCUPANCY'
                                                       is_mandatory          = abap_true
                                                       is_multiple           = abap_false
                                                       is_multiple_selection = abap_false ).
          lo_node_info->add_attribute( ls_attr ).
    So far, I have node INSTRUCTORS (0...n) with a subnode OCCUPANCY (1...1)
    In the supply_method of INSTRUCTORS I would like to fill the instructors node and the OCCUPANCY subnode.
    The thing is I do not know the structure of the dynamicaly created subnode OCCUPANCY there. How can I get a description of this node (that, what in non-dynamic programming would be wd_this->element_occupancy...)??
    THANKS,
    Johannes

    ...I got this one solved by myself...
    I simply added this coding:
    lo_node_info = lo_node->get_node_info( ).
      lt_attributes = lo_node_info->get_attribute_names( ).
    This appers to be enough information to be good to gogo
    Thanks anyway.

Maybe you are looking for

  • Pdf file problems

    There is nothing more frustrating then spending all day trying to upload on single file to iWeb and have it not work...again and again and again... I have a .pdf that I created for my Ordering on my website. The pdf works completely fine on my MAC an

  • Cross platform networking issue

    Okay, my group consists of about three dozen Macs (most on 10.3.9, but about half a dozen on 10.4.3) and we are hooked up to a Windows-based network which uses Extreme-Z IP to serve up the shared volumes to the Mac users. Recently, the corporate IT f

  • Time and date preferences crashing

    Hi. Every time I click on the clock on the menu bar and go down the menu and click on "Open Time and Date...", it never works. It always stalls System Prefences, although it will occasionally open after not responding for a minute or two. This has on

  • Who's Who: How to refine employee search using customer defined indicator?

    Hello, It is possible to refine employee search using status indicator STAT2 (Employees' Employment Status). I would like to refine employee search using e.g. Customer defined status indicator STAT1. I created an entry identical to STAT2 but with STA

  • CC 2014 (Not Responding)

    I am struggling with a (Not Responding) prompt in my CC 2014 applications: Illustrator, Photoshop, Acrobat, etc. It's annoying and slows my production. I have the software loaded on my computer, but my computer is networked. I am running Windows 7, h