WDA学习(12):Using an ALV Table with Dynamic Context Nodes

2.4 Using an ALV Table with Dynamic Context Nodes

   本实例展示如何使用ALV TABLE展示动态的上下文节点。

1.创建Web Dynpro Component,Z_TEST_WDA7

 

 2.设置MAIN视图组件

Context页签

创建INPUT节点,创建Attribute:TABNAME,保存用户输入的表名。

 

 Layout页签:

创建视图控件Group,ID:GP1,设置CAPTION的属性text:”input table name”;

创建视图控件INPUT,ID:INPUT1;

创建视图控件LABEL,ID:LABEL1,设置labelFor属性:INPUT1;设置text属性:”Name of DDIC Table”;

创建视图控件BUTTON,ID:BTN1;

创建视图控件ViewContainerUIElement,ID:VIEW1;

 

 设置INPUT视图控件绑定Context上下文的TABNAME

 

 设置BUTTON视图控件,设置onAction;

 

 我们在用户输入TableName之前,不知道表的结构,在设计时间不能创建固定的Context节点,需要使用代码动态创建Context节点。

Methods页签

实现ONACTIONSHOW方法;

代码实例:

method ONACTIONSHOW .
  "node info对象
  DATA:root_node_info TYPE REF TO if_wd_context_node_info.
  "node对象
  DATA:lo_node TYPE REF TO if_wd_context_node.
  "table name
  DATA:lr_tabname TYPE string.

  "动态表结构对象
  DATA:struc_tab TYPE REF TO data.
  FIELD-SYMBOLS:<tab> TYPE table.

  "获取node info
  root_node_info = wd_context->get_node_info( ).
  "获取INPUT节点
  lo_node = wd_context->get_child_node( name = 'INPUT' ).
  "获取TABNAME值
  lo_node->get_attribute(
    EXPORTING name = 'TABNAME'
    IMPORTING value = lr_tabname ).
  "转换为大写
  TRANSLATE lr_tabname TO UPPER CASE.

  "创建动态节点
  cl_wd_dynamic_tool=>create_nodeinfo_from_struct(
    parent_info = root_node_info
    node_name = lr_tabname
    structure_name = lr_tabname
    is_multiple = abap_true
  ).

  "创建数据表结构
  CREATE DATA struc_tab TYPE TABLE OF (lr_tabname).
  ASSIGN struc_tab->* TO <tab>.

  "查询数据
  SELECT * INTO CORRESPONDING FIELDS OF TABLE <tab> FROM (lr_tabname).

  "获取节点
  lo_node = wd_context->get_child_node( name = lr_tabname ).
  lo_node->bind_table( <tab> ).
endmethod.

3.选择Z_TEST_WDA7,Component组件,声明Component Use,使用ALV组件

 

在MAIN视图组件的Properties页签,

在Used Controllers/Components中声明使用ALV组件

 在MAIN视图组件的Methods页签,

点击魔术棒,初始化Used Component

 

 代码实例:

"获取ALV组件,设置数据
  DATA:lo_cmp_usage type ref to if_wd_component_usage.
  lo_cmp_usage =   wd_this->wd_cpuse_alv( ).
  if lo_cmp_usage->has_active_component( ) is initial.
    lo_cmp_usage->create_component( ).
  endif.

点击魔术棒,生成代码调用Used Controller:ALV的SET_DATA方法。

 

代码实例:

"通过ALV,Controller的接口,调用set_data方法设置alv显示节点数据
  DATA:lo_INTERFACECONTROLLER TYPE REF TO IWCI_SALV_WD_TABLE .
  lo_INTERFACECONTROLLER = wd_this->wd_cpifc_alv( ).
  lo_interfacecontroller->set_data(
*     only_if_new_descr =                 " wdy_boolean
    r_node_data = lo_node    " ref to if_wd_context_node
  ).

4.设置Window显示ALV

 

 5.创建Web Dynpro Application,测试;

 

 

posted @ 2020-05-16 10:00  渔歌晚唱  阅读(267)  评论(0编辑  收藏  举报