2.5 Use ALV as Hierarchy
本实例展示如何让ALV显示层次表结构,以及标准表如何表示层次表结构。
1.创建项目,使用ALV组件
声明使用ALV Component
2.修改MAIN视图组件
Properties页签
声明MAIN视图组件使用ALV组件及接口控制器
Layout页签:
创建ViewContainerUIElement作为显示ALV Table的容器
Context页签
创建NODE_SFLIGHT上下文节点,
Methods页签
实现WDDOINIT方法;
获取sflight数据库表数据到上下文节点;
将节点数据和ALV组件绑定;
设置ALV组件显示为层次表结构;
实例代码:
DATA:lo_node TYPE REF TO if_wd_context_node.
DATA:lo_element TYPE REF TO if_wd_context_element.
DATA:lt_sflight TYPE wd_this->Elements_node_sflight.
"获取node_sflight节点
lo_node = wd_context->get_child_node( 'NODE_SFLIGHT' ).
"获取数据
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_sflight FROM sflight.
"节点绑定数据
lo_node->bind_table( lt_sflight ).
点击魔术棒,实例化ALV组件
插入代码:
"实例化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.
点击魔术棒,调用ALV组件提供的set_data方法,ALV组件绑定上下文节点数据
"设置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
).
点击魔术棒,调用ALV组件提供的get_model方法,获取ALV表配置对象
实例代码:
"设置ALV显示为hierarchy
DATA lv_value TYPE REF TO cl_salv_wd_config_table.
lv_value = lo_interfacecontroller->get_model( ).
"通过cl_salv_wd_config_table对象,设置显示类型
lv_value->if_salv_wd_table_settings~set_display_type(
IF_SALV_WD_C_TABLE_SETTINGS=>DISPLAY_TYPE_HIERARCHY ).
"设置某一列为层级显示列
DATA:lo_column TYPE REF TO cl_salv_wd_column.
lo_column = lv_value->if_salv_wd_column_settings~get_column( 'CARRID' ).
lo_column->IF_SALV_WD_COLUMN_HIERARCHY~SET_HIERARCHY_COLUMN( abap_true ).
"设置最后一个层次列展开或收拢
lv_value->IF_SALV_WD_TABLE_HIERARCHY~SET_LAST_HIER_COLUMN_AS_LEAF( abap_false ).
3.设置Window,设置VIEW1容器嵌入ALV视图
4.创建Web Dynpro Application,测试运行