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,测试;
本文来自博客园,作者:渔歌晚唱,转载请注明原文链接:https://www.cnblogs.com/tangToms/p/12898924.html