• Web Dynpro for ABAP(6):Context in Detail


    3.10 Context in Detail

    1.Context定义WDA设计时和运行时,使用的结构。

    cardinalities:0..n ,1..n表示内表;

    cardinalities:1..1表示结构体;

     

    2.Programming of the Context,通过Runtime控制Context中保存value值

    Node对应接口:IF_WD_CONTEXT_NODE

    Element对应接口:IF_WD_CONTEXT_ELEMENT

     

    Component Controller、View、Window都有自己的Context,Attribute:WD_CONTEXT。

    获取Context子节点

    方法:

    GET_CHILD_NODE

     

    3.获取多层级节点

    方式1:依层级获取

    示例代码:

    method EXAMPLE .
    
    data: l_node type ref to IF_WD_CONTEXT_NODE,
    
    l_snode_11 type ref to IF_WD_CONTEXT_NODE,
    
    L_snode_21 type ref to IF_WD_CONTEXT_NODE.
    
    l_node = wd_context ->get_child_node( wd_this->wdctx_node_1 ).
    
    l_snode_11 = l_node ->get_child_node( wd_this->wdctx_subnode_11 ).
    
    l_snode_21 = l_snode_11 ->get_child_node( wd_this->wdctx_subnode_21 )
    
    endmethod.

    方式2:通过路径获取

    示例代码:

    method EXAMPLE .
    
    data: l_snode_21 type ref to IF_WD_CONTEXT_NODE.
    
    l_snode_21 = wd_context-> path_get_node ( 'NODE_1.SUBNODE_11.SUBNODE_21' ).
    
    endmethod. 

    4.获取、设置Context值

    示例代码1:通过element读取attributes值

    method EXAMPLE.
    
    data: l_node type ref to IF_WD_CONTEXT_NODE,
    
        l_element type ref to IF_WD_CONTEXT_ELEMENT,
    
        l_my_string type string
    
    l_node = wd_context->get_child_node ( wd_this->wdctx_node_1 ).
    
    l_element= l_node-> get_element().
    
    l_element-> get_attribute ( exporting name = 'ATTR1_1' importing value = l_my_string ).
    
    endmethod. 

    示例代码2:直接通过context读取attributes值

    method EXAMPLE .
    
    data: l_node type ref to IF_WD_CONTEXT_NODE,
    
        l_my_string type string.
    
    l_node = wd_context->get_child_node ( wd_this->wdctx_node_1 ).
    
    l_node-> get_attribute ( exporting name = 'ATTR1_1' importing value = l_my_string ).
    
    endmethod. 

    示例代码3:通过index获取element,读取attributes值

    method EXAMPLE .
    
    data: l_node type ref to IF_WD_CONTEXT_NODE,
    
        l_element type ref to IF_WD_CONTEXT_ELEMENT,
    
        l_my_string type string.
    
    l_node = wd_context->get_child_node ( wd_this->wdctx_node_1 ) .
    
    l_element= l_node-> get_element( 2 ) .
    
    l_element->get_attribute( exporting name = 'ATTR1_1' importing value = l_my_string ).
    
    endmethod. 

    示例代码4:直接通过context,使用index,读取attributes值

    method EXAMPLE .
    
    data: l_node type ref to IF_WD_CONTEXT_NODE,
    
        l_my_string type string.
    
    l_node = wd_context->get_child_node ( wd_this->wdctx_node_1 ) .
    
    l_node->get_attribute( exporting index = 2 exporting name = 'ATTR1_1' importing value = l_my_string ).
    
    endmethod. 

    示例代码5:Component Controller,View,Window的Attributes中WD_THIS,表示当前Local Controller。通过Node,直接读取Structure值

    method EXAMPLE .
    
    data: l_node  type ref to IF_WD_CONTEXT_NODE,
    
        l_my_struc  type ref to IF_MY_CONTROLLER=>element_node_1.
    
    l_node  = wd_context->get_child_node( wd_this->wdctx_node_1 ).
    
    l_node->get_static_attributes( importing static_attributes = l_my_struc ).
    
    endmethod. 

    示例代码6:通过Node,index读取Structure值

    method EXAMPLE .
    
    data: l_node  type ref to IF_WD_CONTEXT_NODE,
    
        l_my_struc  type ref to IF_MY_CONTROLLER=>element_node_1.
    
    l_node  = wd_context->get_child_node( wd_this->wdctx_node_1 ).
    
    l_node->get_static_attributes( exporting index = 2 importing static_attributes = l_my_struc ).
    
    endmethod.

    示例代码7:通过Element,读取Structure值

    method EXAMPLE .
    
    data: l_node  type ref to IF_WD_CONTEXT_NODE,
    
        l_element  type ref to IF_WD_CONTEXT_ELEMENT,
    
        l_my_struc  type ref to IF_MY_CONTROLLER=>element_node_1.
    
    l_node  = wd_context->get_child_node( wd_this->wdctx_node_1 ).
    
    l_element  = l_node->get_element( 2 ).
    
    l_element->get_static_attributes( importing static_attributes = l_my_struc ).
    
    endmethod. 

    示例代码8:通过Node,设置Structure值

    method EXAMPLE .
    
    data: l_node type ref to IF_WD_CONTEXT_NODE,
    
        l_my_struc type ref to IF_MY_CONTROLLER=>element_node_1.
    
    l_node = wd_context->get_child_node ( wd_this->wdctx_node_1 ) .
    
    l_node-> set_static_attributes ( static_attributes = l_my_struc ).
    
    endmethod. 

    示例代码9:通过创建Element,添加新记录,bind_element可以输入index,设置设置添加记录位置

    method EXAMPLE .
    
    data: l_node  type ref to IF_WD_CONTEXT_NODE,
    
        l_new_element  type ref to IF_WD_CONTEXT_ELEMENT,
    
        l_my_struc  type ref to IF_MY_CONTROLLER=>element_node_1.
    
    l_node  = wd_context->get_child_node( wd_this->wdctx_node_1 ).
    
    l_new_element  = l_node->create_element( ).
    
    l_new_element->set_static_attributes( static_attributes = l_my_struc ).
    
    l_node->bind_element( l_new_element ).
    
    endmethod. 

    示例代码10:通过bind structure添加新记录

    method EXAMPLE .
    
    data: l_node   type ref to IF_WD_CONTEXT_NODE,
    
        l_my_struc  type ref to IF_MY_CONTROLLER=>element_node_1.
    
    l_node  = wd_context->get_child_node( wd_this->wdctx_node_1 ).
    
    l_node->bind_structre( new_item = l_my_struc ).
    
    endmethod.
     示例代码11:通过bind table添加新记录,通过参数set_initial_elements,设置false,保留原记录,插入新记录,默认为true。
    method EXAMPLE .
    
    data: l_node   type ref to IF_WD_CONTEXT_NODE,
    
        l_my_table  type ref to IF_MY_CONTROLLER=>elements_node_1.
    
    l_node  = wd_context->get_child_node( wd_this->wdctx_node_1 ).
    
    l_node->bind_table( new_items = l_my_table ).
    
    endmethod.

    5.Properties of Context Attributes

     

    示例:DEMO_CONTEXT_PROP

    设置Table Column控件中InputField属性properties

     

    点击readOnly后面帮助,设置绑定Property

     

    示例代码:

    METHOD refresh_context .
      DATA: lr_flightnode TYPE REF TO if_wd_context_node,
            lr_elem TYPE REF TO if_wd_context_element,
            l_restrict TYPE wdy_boolean,
            l_arrtime TYPE spfli-arrtime.
    * We set the context properties accordingly.
      lr_flightnode = wd_context->get_child_node( wd_this->wdctx_flights ).
      DO.
        lr_elem = lr_flightnode->get_element( sy-index ).
        IF lr_elem IS NOT BOUND.
          EXIT.
        ENDIF.
        lr_elem->get_attribute( EXPORTING name = 'ARRTIME'  IMPORTING  value  = l_arrtime ).
        IF sy-uzeit >= l_arrtime.
          l_restrict = 'X'.
        ELSE.
          l_restrict = space.
        ENDIF.
        CALL METHOD lr_elem->set_attribute_property
          EXPORTING
            attribute_name = 'ARRTIME'
            property       = lr_elem->e_property-read_only
            value          = l_restrict.
      enddo.
    ENDMETHOD

    6.Data Types of Context Node

    接口:IF_WD_CONTEXT_NODE_INFO

    设置attribute对应reference field

    方法:

    SET_ATTRIBUTE_REFERENCE_FIELD

    设置Attribute显示格式

    方法:

    SET_ATTRIBUTE_FORMAT_PROPS

    GET_ATTRIBUTE_FORMAT_PROPS

    注:CL_WD_DYNAMIC_TOOL=>CHECK_MANDATORY_ATTR_ON_VIEW检查attribute格式

    7Data Binding Using Index and Key

    Dropdown Listbox和RadioButtonGroups数据绑定方式。

    示例:WDR_TEST_EVENTS

    Index绑定:

    DropDownByIndex

    RadioButtonGroupByIndex

    Key绑定:

    DropDownByKey

    RadioButtonGroupByKey

    Index绑定

    创建Node节点(cardinality0..n);

    通过接口方法IF_WD_CONTEXT_NODE_INFO=>SET_ATTRIBUTE_VALUE_SET设置值

    示例代码:

    data: NODE_INFO type ref to IF_WD_CONTEXT_NODE_INFO.
    
    data:LT_VALUESET type WDR_CONTEXT_ATTR_VALUE_LIST,
    
    L_VALUE type WDR_CONTEXT_ATTR_VALUE.
    
     
    
    NODE_INFO = WD_CONTEXT->GET_NODE_INFO( ).
    
    NODE_INFO = NODE_INFO->GET_CHILD_NODE( 'NODE1' ).
    
    L_VALUE-VALUE= 'V1'.
    
    L_VALUE-TEXT= 'yesterday'.
    
    INSERT L_VALUE into table LT_VALUESET.
    
    L_VALUE-VALUE= 'V2'.
    
    L_VALUE-TEXT= 'today'.
    
    INSERT L_VALUE into table LT_VALUESET.
    
    L_VALUE-VALUE= 'V3'.
    
    L_VALUE-TEXT= 'tomorrow'.
    
    INSERT L_VALUE into table LT_VALUESET.
    
    NODE_INFO->SET_ATTRIBUTE_VALUE_SET (
    
     NAME = 'ATTRIBUTE1'
    
     VALUE_SET = LT_VALUESET).
  • 相关阅读:
    Python常用模块学习
    如何在cmd下切换不同版本的Python
    Python3
    Python第二模块(文件和函数)
    Hibernate教程一览
    struts2框架一览
    Java正式day_04——嵌套循环
    AJAX
    JS+JQUERY
    Mybatis注意问题
  • 原文地址:https://www.cnblogs.com/tangToms/p/16365424.html
Copyright © 2020-2023  润新知