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 !