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,测试;