Few Examples on How to Create Context nodes dynamically in Web Dynpro ABAP

In Web Dynpro dynamic programming one of the basic requirements is to create context nodes dynamically. Here are a few code samples how it can be done.

CASE 1

If the attributes are only from one database structure then we can simply pass the structure to create the context node as shown below.

  DATA: lr_rootnode_info TYPE REF TO if_wd_context_node_info,
lr_node_info
TYPE REF TO if_wd_context_node_info,
lr_node
TYPE REF TO if_wd_context_node.

lr_rootnode_info = wd_context->get_node_info( ).
CALL METHOD lr_rootnode_info->add_new_child_node
EXPORTING
static_element_type          =
‘SFLIGHT’
name                         =
‘FLIGHT’
RECEIVING
child_node_info              = lr_node_info.
lr_node = wd_context->get_child_node( name =
‘FLIGHT’ ).

The variable lr_node is used to set the context node with values.

In method ADD_NEW_CHILD_NODE, there are a few other parameters as well. They are used for the following purpose:

Parameter Use Associated Type Default Value
SUPPLY_METHOD Mention the name of the Supply method to populate the context node attributes String
SUPPLY_OBJECT Instance of Supply Method Object
DISPOSE_METHOD Name of dispose method String
DISPOSE_OBJECT Instance of Dispose Method Object
NAME Name of the context node. This is a mandatory parameter. String
IS_MANDATORY If it is true there must be at least one entry. ABAP_BOOL ABAP_FALSE
IS_MANDATORY_SELECTION If it is true at least one entry must be selected. ABAP_BOOL ABAP_FALSE
IS_MULTIPLE If it is true the context node can contain more than one entry. ABAP_BOOL ABAP_TRUE
IS_MULTIPLE_SELECTION If it is true multiple entries can be selected. ABAP_BOOL ABAP_TRUE
IS_SINGLETON If it is true then the Node Only Exist for Lead Selection of Parent ABAP_BOOL ABAP_FALSE
IS_INITIALIZE_LEAD_SELECTION If it is true then Lead Selection Always Defined ABAP_BOOL ABAP_TRUE
IS_STATIC If it is true context node can’t be changed dynamically ABAP_BOOL ABAP_TRUE
IS_RANGE_NODE ABAP_BOOL

Depending on the requirement this parameters are set accordingly.

CASE 2

Context node can be defined using random attribute structure also. For that we use the importing parameter ATTRIBUTES. Here is a sample code.

  data:

    lt_attributes       type wdr_context_attr_info_map,
attribute          
like line of lt_attributes,

    lr_node_info        type ref to if_wd_context_node_info.

 

    attribute-name      = ‘TEXT’.
attribute-type_name =
‘STRING’.
insert attribute into table lt_attributes.

attribute-name      = ‘EXPANDED’.
attribute-type_name =
‘WDY_BOOLEAN’.
insert attribute into table lt_attributes.

    lr_node_info = wd_context->get_node_info( ).

    lr_node_info->add_new_child_node(
supply_method                =
‘S_STATIC_NODE’
supply_object                = me
name                         =
‘STATIC_NODE’
is_mandatory                 = abap_false
is_mandatory_selection       = abap_false
is_multiple                  = abap_true
is_multiple_selection        = abap_true
is_singleton                 = abap_false
is_initialize_lead_selection = abap_false
is_static                    = abap_false
attributes                   = lt_attributes ).

Here, the supply method parameter is passed. We need to create method S_STATIC_NODE in the methods tab of the view of type Supply Function.

Another Example:  Here unlike previous case the Type Name of the attributes are not maintained.

  data: l_node_info type ref to if_wd_context_node_info,
l_attribute
type wdr_context_attribute_info,
l_attributes
type wdr_context_attr_info_map,
l_node
type ref to if_wd_context_node.

l_attribute-name = ‘INPUT’.
l_attribute-rtti ?= cl_abap_typedescr=>describe_by_name(
‘STRING’ ).
insert l_attribute into table l_attributes.
l_attribute-name =
‘INPUT2’.
l_attribute-rtti ?= cl_abap_typedescr=>describe_by_name(
‘SFLIGHT-CARRID’ ).
insert l_attribute into table l_attributes.
l_node_info = wd_context->get_node_info( ).
l_node_info = l_node_info->add_new_child_node(
name =
‘NEW’
is_multiple = abap_false
is_mandatory = abap_true
attributes = l_attributes ).

CASE 3

Apart from these two import parameters to specify the context node structure there is another import parameter to create context node called static_element_rtti. This parameter is used when context node attributes are determined at runtime. Here is a simple example:

data: node_info type ref to if_wd_context_node_info,

      comp_tab    type cl_abap_structdescr=>component_table,

      struct_type type ref to cl_abap_structdescr.

      comp        like line of comp_tab.

 

* build a structure description from the list of single fields

  comp-name = ‘CARRID’.

  comp-type ?= cl_abap_datadescr=>describe_by_name( ‘S_CARR_ID’ ).

  append comp to comp_tab.

 

  comp-name = ‘CONNID’.

  comp-type ?= cl_abap_datadescr=>describe_by_name( ‘S_CONN_ID’ ).

  append comp to comp_tab.

 

* not this structure contains the fields “CONNID” and “CARRID”

  struct_type = cl_abap_structdescr=>create( comp_tab ).

 

* now the nodeinfo is created

  node_info = wd_context->get_node_info( ).

  node_info = node_info->add_new_child_node(

    name                         = ‘MY_NODE’

    is_mandatory                 = abap_true

    is_multiple                  = abap_true

    static_element_rtti          = struct_type

is_static                    = abap_false

       ).

 

Few more examples to show how the parameter is populated:

Example 1

      data:
lt_scarr
type standard table of scar,

        struct_type type ref to cl_abap_structdescr.

      cl_salv_wd_test_data=>select_data_from_ddic(
exporting
ddic_table =
‘SCARR’
changing
t_table    = lt_scarr ).

struct_type ?= cl_abap_typedescr=>describe_by_data( ls_scarr ).

 

Example 2 

data:

    lr_locator                 type ref to cl_dpr_ui_log_locator,

    lt_components_attr         type abap_component_tab,

    struct_type                type ref to cl_abap_structdescr.

 

* Initialize

  lr_locator = cl_dpr_ui_log_locator=>get_instance( ).

 

* Get ALV data structure

  lt_components_attr = lr_locator->get_alv_structure( ).

  struct_type        = lr_locator->get_alv_structure_ref( lt_components_attr ).

 

There are many such examples. Keep exploring and keep learning. ????

Case4

Here we will create a context node where attributes are added dynamically

  data:
lr_node_info       
type ref to if_wd_context_node_info,
attribute          
type wdr_context_attribute_info,
lr_parent_node_info
type ref to if_wd_context_node_info,
lr_item_node_info  
type ref to if_wd_context_node_info. 

lr_parent_node_info = wd_context->get_node_info( ).  

lr_item_node_info = lr_parent_node_info->add_new_child_node( name = ‘ITEM’ is_static = abap_false ).
attribute-name      =
‘ITEM’.
attribute-type_name =
‘STRING’.
lr_item_node_info->add_attribute( attribute ).

Here is a brief document on how context nodes can be created dynamically.

New NetWeaver Information at SAP.com

Very Helpfull

 

 

User Rating: Be the first one !

Comments (0)
Add Comment