效果图:

原本的普通搜索帮助,改成上面这样层级的搜索帮助。这里只做了两级。

一,新建一个TREE节点

1.新建tree结构:ZGRTEXT

2.新建树叶节点处理类:

修改超类为CL_BSP_WD_TREE_NODE_PROXY

重定义取子节点的方法:(因为这里是两级节点,所以这步可以不用)

添加值属性节点GET方法:CODE的

修改方法的传入传出参数:CODE对应上面结构中的CODE

  METHOD get_code.
DATA:lr_entity TYPE REF TO if_bol_bo_property_access."cl_crm_bol_entity.
IF me->bo IS BOUND.
lr_entity = me->bo.
lr_entity->get_property_as_string( EXPORTING iv_attr_name = 'CODE'
RECEIVING rv_result = value ).
ENDIF.
ENDMETHOD.

添加文本描述的节点GET方法:

参数同上:KURZTEXT对应上面结构中的KURZTEXT

  METHOD get_kurztext.
DATA:lr_entity TYPE REF TO if_bol_bo_property_access."cl_crm_bol_entity.
IF me->bo IS BOUND.
lr_entity = me->bo.
lr_entity->get_property_as_string( EXPORTING iv_attr_name = 'KURZTEXT'
RECEIVING rv_result = value ).
ENDIF.
ENDMETHOD.

3.创建一级节点处理类:ZCL_LYTREE_PROXY_MAIN

同上一个类,重定义GET_CHILDREN方法:这里会使用到上面定义的处理类

  method IF_BSP_WD_TREE_NODE~GET_CHILDREN.
DATA:lr_coll TYPE REF TO if_bol_bo_col,
lr_coll2 TYPE REF TO if_bol_bo_col,
lr_entity TYPE REF TO if_bol_bo_property_access, "cl_crm_bol_entity,
lr_child TYPE REF TO if_bsp_wd_tree_node,
gt_qpgt TYPE TABLE OF zgrtext,
gw_qpgt LIKE LINE OF gt_qpgt,
lr_line TYPE REF TO zgrtext,
lr_valuenode TYPE REF TO cl_bsp_wd_value_node,
lr_col TYPE REF TO if_bol_bo_col.
lr_entity ?= me->bo.
TRY.
lr_entity->get_properties(
IMPORTING
es_attributes = gw_qpgt ). IF gw_qpgt-codegr IS NOT INITIAL.
SELECT a~sales_org
a~zcode_catalog
a~zprod_category
a~zscode_id AS code
b~kurztext
INTO CORRESPONDING FIELDS OF TABLE gt_qpgt
FROM ziriscode_config AS a
INNER JOIN qpct AS b
ON a~zcode_catalog = b~katalogart
AND a~zprod_category = b~codegruppe
AND a~zscode_id = b~code
WHERE a~sales_org = gw_qpgt-sales_org
AND a~zcode_catalog = gw_qpgt-zcode_catalog
AND a~zprod_category = gw_qpgt-zprod_category
AND a~zfcode_id = gw_qpgt-codegr
AND b~sprache = sy-langu.
ENDIF. IF gt_qpgt IS NOT INITIAL.
CREATE OBJECT lr_col TYPE cl_crm_bol_bo_col.
LOOP AT gt_qpgt INTO gw_qpgt.
CREATE DATA lr_line.
CREATE OBJECT lr_valuenode
EXPORTING
iv_data_ref = lr_line.
lr_valuenode->set_properties( gw_qpgt ).
lr_col->add( lr_valuenode ).
lr_entity ?= lr_col->get_last( ).
IF lr_entity IS BOUND.
lr_child = me->node_factory->get_proxy( iv_bo = lr_entity
iv_proxy_type = 'ZCL_CATE_PROXY_CUSTOMER'
iv_parent_proxy = me ).
lr_child->is_leaf = abap_true.
APPEND lr_child TO rt_children.
ENDIF.
ENDLOOP.
ENDIF. CATCH cx_crm_genil_model_error. ENDTRY.
endmethod.

同样添加CODE GROUP和GROUP TEXT的GET方法:

  METHOD get_codegr.
DATA:lr_entity TYPE REF TO if_bol_bo_property_access.
IF me->bo IS BOUND.
lr_entity = me->bo.
lr_entity->get_property_as_string( EXPORTING iv_attr_name = 'CODEGR'
RECEIVING rv_result = value ).
ENDIF.
ENDMETHOD.

  method GET_KURZTEXT.
DATA:lr_entity TYPE REF TO if_bol_bo_property_access.
IF me->bo IS BOUND.
lr_entity = me->bo.
lr_entity->get_property_as_string( EXPORTING iv_attr_name = 'KURZTEXT'
RECEIVING rv_result = value ).
ENDIF.
endmethod.

4.执行事务代码BSP_WD_CMPWB,输入组件名,点击创建ZLYTREE

5.Component Controller 中新建参数节点:COND都是从上面的结构中选取的字段

需求是根据销售组织,品类,编码组 来显示对应的编码搜索帮助

使用最上面的结构做为值节点:

6.新建视图表类型视图,可配置,VALUE node还是上面的结构

给视图添加值节点:

给值节点添加字段:

视图类型选择表视图,可配置:

7.修改CODE节点下的属性类,改其超类为:CL_BSP_WD_CONTEXT_NODE_TREE

8.修改视图的HTML属性:

<chtmlb:configTree id                    = "ConfCellTable"
nodeTable = "<%= code->node_tab %>"
nodeTextColumn = "CODEGR"
onCollapseNode = "COLLAPSE"
onExpandNode = "EXPAND"
onRowSelection = "SELECT"
selectionMode = "SINGLESELECT"
onNodeClick = 'CLICK'
selectedRowIndexTable = "<%= CODE->SELECTION_TAB %>"
selectedRowIndex = "<%= CODE->SELECTED_INDEX %>"
type = "<%= CL_THTMLB_TREE=>GC_TYPE_COLUMN %>"
usage = "EDITLIST"
downloadToExcel = "FALSE"
noFrame = "X"
personalizable = "TRUE"
table = "//CODE/Table"
visibleRowCount = "10"
xml = "<%= controller->configuration_descr->get_config_data( ) %>" />

需要注意的是上面的nodeTable属性,是节点->属性code是节点名table也对应的是节点表CODE

点击保存。此时推出界面,然后重新进入,节点就已经变成tree了:

9.重定义刷新功能REFRESH:使用上面定义的类,

  METHOD refresh.
super->refresh( ).
DATA:lr_entity TYPE REF TO cl_crm_bol_entity,
lr_coll_wr TYPE REF TO cl_bsp_wd_collection_wrapper,
lr_iterator TYPE REF TO if_bol_bo_col_iterator,
lr_root TYPE REF TO if_bsp_wd_tree_node.
DATA:lv_ent_pro TYPE REF TO if_bol_bo_property_access,
lv_ent TYPE REF TO cl_crm_bol_entity,
lr_col TYPE REF TO if_bol_bo_col.. TRY.
lv_ent_pro ?= me->collection_wrapper->get_first( )."get_current( ).
WHILE lv_ent_pro IS BOUND.
lr_root = me->node_factory->get_proxy(
iv_bo = lv_ent_pro
iv_proxy_type = 'ZCL_CATE_PROXY_MAIN' ).
lr_root->node_key = add_root_node( lr_root ).
lv_ent_pro ?= me->collection_wrapper->get_next( ).
ENDWHILE.
CATCH cx_sy_move_cast_error cx_sy_ref_is_initial.
ENDTRY.
ENDMETHOD.

10.冲定义DO_INIT_CONTEXT,初始化节点值

  METHOD do_init_context.
*SUPER->DO_INIT_CONTEXT( ).
DATA:gt_qpgt TYPE TABLE OF zgrtext,
gw_qpgt LIKE LINE OF gt_qpgt,
lr_line TYPE REF TO zgrtext,
lr_valuenode TYPE REF TO cl_bsp_wd_value_node,
lr_col TYPE REF TO if_bol_bo_col,
* lr_comp TYPE REF TO zl_zcategor_bspwdcomponen_impl,
gr_cond TYPE REF TO if_bol_bo_property_access,
gw_cond TYPE zgrcond. * lr_comp ?= me->comp_controller.
* IF lr_comp IS BOUND.
* gr_cond = lr_comp->typed_context->cond->collection_wrapper->get_current( ).
* IF gr_cond IS BOUND.
* gr_cond->get_properties(
* IMPORTING
* es_attributes = gw_cond ).
*
* ENDIF.
* ENDIF. SELECT a~zfcode_id AS codegr
a~sales_org
a~zcode_catalog
a~zprod_category
b~kurztext AS kurztext
INTO CORRESPONDING FIELDS OF TABLE gt_qpgt
FROM ziriscode_config AS a
INNER JOIN qpct AS b
ON a~zcode_catalog = b~katalogart
AND a~zprod_category = b~codegruppe
AND a~zfcode_id = b~code
WHERE a~sales_org = 'O 50000005'"gw_cond-sales_org
AND a~zcode_catalog = 'Z1'"gw_cond-katalogart
AND a~zprod_category = 'TV1'"gw_cond-codegr
AND b~sprache = sy-langu. SORT gt_qpgt.
DELETE ADJACENT DUPLICATES FROM gt_qpgt COMPARING ALL FIELDS. CREATE OBJECT lr_col TYPE cl_crm_bol_bo_col.
LOOP AT gt_qpgt INTO gw_qpgt.
CREATE DATA lr_line.
CREATE OBJECT lr_valuenode
EXPORTING
iv_data_ref = lr_line.
lr_valuenode->set_properties( gw_qpgt ).
lr_col->add( lr_valuenode ).
ENDLOOP. me->typed_context->code->collection_wrapper->set_collection( lr_col ).
ENDMETHOD.

11.冲定义DO_PREPARE_OUTPUT方法,显示节点

  method DO_PREPARE_OUTPUT.
*SUPER->DO_PREPARE_OUTPUT(
** iv_first_time = ABAP_FALSE
* ).
IF me->typed_context->code->node_tab IS INITIAL.
me->typed_context->code->refresh( ).
ENDIF.
super->do_prepare_output(
iv_first_time = abap_false
).
endmethod.

12.将视图添加到窗口中,设为默认

13.双击视图,点击配置页面:

这时候点击运行,就可以看到结果啦:

默认显示的是10行,这个可以在上面的配置显示行中设定,100,200.。。

14.到这里只是显示出来了,还有展开和关闭按钮功能没做,新加事件处理(EXPAND对应前面html里的方法名)

  method EH_ONEXPAND.
DATA:lr_event_ic TYPE REF TO cl_crm_ic_tree,
lr_event_thtmlb TYPE REF TO cl_thtmlb_tree.
FIELD-SYMBOLS:<fs_line> TYPE crmt_bsp_treetable_node.
TRY.
lr_event_ic ?= htmlb_event_ex.
typed_context->code->collapse_node( lr_event_ic->row_key ).
CATCH cx_sy_move_cast_error.
TRY.
lr_event_thtmlb ?= htmlb_event_ex.
typed_context->code->expand_node( lr_event_thtmlb->row_key ).
CATCH cx_sy_move_cast_error.
ENDTRY.
ENDTRY.
endmethod.

到这里就可以点击展开按钮了,但是不能关闭:

  METHOD eh_oncollapse.
DATA:lr_event_ic TYPE REF TO cl_crm_ic_tree,
lr_event_thtmlb TYPE REF TO cl_thtmlb_tree.
FIELD-SYMBOLS:<fs_line> TYPE crmt_bsp_treetable_node.
TRY.
lr_event_ic ?= htmlb_event_ex.
typed_context->code->collapse_node( lr_event_ic->row_key ).
CATCH cx_sy_move_cast_error.
TRY.
lr_event_thtmlb ?= htmlb_event_ex.
typed_context->code->collapse_node( lr_event_thtmlb->row_key ).
CATCH cx_sy_move_cast_error.
ENDTRY.
ENDTRY.
ENDMETHOD.

到这就可以展开和关闭二级项目了。。。

15。下面额外加点东西。

如果这个东西做成搜索帮助,需要点击选中返回。这里是用清空节点,并绑定单值回节点。

  METHOD eh_onselect.
"ZCATEGORY/CUCATE
DATA:
ls_zgrtext TYPE zgrtext.
DATA lr_context_node_tree TYPE REF TO cl_bsp_wd_context_node_tree.
DATA lr_node TYPE REF TO if_bsp_wd_tree_node.
DATA lr_tree_event TYPE REF TO cl_thtmlb_tree.
DATA lr_category TYPE REF TO if_bol_bo_property_access.
DATA lv_sel_index TYPE int4.
DATA :lv_row_index TYPE int4,
lr_comp TYPE REF TO zl_zcategor_bspwdcomponen_impl,
lr_window TYPE REF TO cl_bsp_wd_window. TRY.
lr_tree_event ?= htmlb_event_ex.
IF lr_tree_event IS BOUND.
lv_row_index = lr_tree_event->row_index.
ENDIF.
CATCH cx_sy_move_cast_error. "#EC NO HANDLER.
EXIT.
ENDTRY. lr_context_node_tree ?= me->typed_context->tree. lv_sel_index = lr_context_node_tree->selected_index. IF lv_row_index EQ lv_sel_index.
lr_node = lr_context_node_tree->get_node_by_index( iv_index = lv_row_index ).
lr_node->selected = abap_false. ELSEIF lv_row_index IS NOT INITIAL AND lv_row_index > .
lr_context_node_tree->eh_on_row_selection( iv_htmlb_event_ex = lr_tree_event ). * Get the corresponding category
lr_category ?= me->typed_context->tree->get_bo_by_index( lv_row_index ).
CHECK lr_category IS BOUND.
TRY .
lr_category->get_properties(
IMPORTING
es_attributes = ls_zgrtext ).
CATCH cx_root. ENDTRY.
lr_comp ?= me->comp_controller.
lr_comp->typed_context->tree->collection_wrapper->clear_collection( ).
lr_comp->typed_context->tree->collection_wrapper->add( iv_entity = lr_category
iv_set_focus = abap_true ).
lr_window = me->view_manager->get_window_controller( ).
lr_window->call_outbound_plug( iv_outbound_plug = 'CATE_SELECT' ). ENDIF.
* ENDIF.
ENDMETHOD.

双击窗口,添加传入导航链接:IP_CODE_SEARCH

  METHOD ip_code_search.
DATA:lr_tabline TYPE REF TO zcrmstock,
lr_valuenode TYPE REF TO cl_bsp_wd_value_node,
lr_stock TYPE REF TO if_bol_bo_col,
lr_control TYPE REF TO ZL_ZLYTREE_BSPWDCOMPONENT_IMPL,
* lr_control TYPE REF TO zl_zcategor_bspwdcomponen_impl,
lr_category TYPE REF TO if_bol_bo_property_access. DATA: lr_cuco TYPE REF TO zl_zcategor_cutree_impl . lr_cuco ?= me->get_custom_controller( 'ZLYTREE/CUCODE' ). * lr_category = iv_collection->get_current( ). * lr_control->typed_context->cond->clear_collection( ).
* me->typed_context->cond->collection_wrapper->add( iv_entity = lr_category
* iv_set_focus = abap_true ). "清空客户化控制器
lr_cuco->typed_context->code->clear_collection( ).
"对控制器进行赋值
* lr_control->typed_context->cond->set_collection( collection =
* iv_collection ). "LR_STOCK ).
ENDMETHOD.

效果如下:

WEB UI做TREE的更多相关文章

  1. “System.Web.UI.WebControls.Literal”不允许使用子控件

    今天在写下面的代码时遭遇错误——“System.Web.UI.WebControls.Literal”不允许使用子控件('System.Web.UI.WebControls.Literal' does ...

  2. CDH中HDFS的WEB UI外网无法访问的问题

    文章来自:http://www.cnblogs.com/hark0623/p/4177794.html 转载请注明 其实问题很简单,因为在CDH中hdfs-site.xml配置文件中WEB UI配置的 ...

  3. Google Polymer以及Web UI框架

    时代在进步,原本前端只是用来简单的数据显示以及提交数据到后端处理逻辑的地方,而随着SPA的发展,前端的逻辑也越来越是庞大,恰巧,今天看微博的时候,发现一个概念讨论的比较多,就是 Web Compone ...

  4. Hive 接口介绍(Web UI/JDBC)

    Hive 接口介绍(Web UI/JDBC) 实验简介 本次实验学习 Hive 的两种接口:Web UI 以及 JDBC. 一.实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanl ...

  5. yarn web ui 参数详解

    我们经常使用yarn调度,但是我们是否对调度队列显示参数真正了解呢?   下面我们来一一看看这些参数都是做什么用的,代表什么意思   hadoop是通过队列管理集群资源,翻开集群Web UI,找到Sc ...

  6. [原创]浅谈Web UI自动化测试

    [原创]浅谈Web UI自动化测试 Web UI自动化测试相信大家都不陌生,今天来谈谈这个,我最早接触自动化测试时大约是在2004年,2006年当时在腾讯财付通算是开始正式接触自动化测试,之所以是正式 ...

  7. 移动Web UI库(H5框架)有哪些,看这里就够了

    前言 今年上半年,项目组在项目开发的过程中建立了一套风格统一,组件丰富完善,命名统一规范的PC端UI库,适用于做大型站点,该UI库也是应用到了整个平台的项目中,在各个项目组中进行推广.因为项目的保密性 ...

  8. 《软件测试自动化之道》读书笔记 之 底层的Web UI 测试

    <软件测试自动化之道>读书笔记 之 底层的Web UI 测试 2014-09-28 测试自动化程序的任务待测程序测试程序  启动IE并连接到这个实例  如何判断待测web程序完全加载到浏览 ...

  9. Web UI 技术发展历程

    本文内容 纯文本和静态 HTML 页面 服务器端技术 插件技术--ActiveX.Applet 和 Flash Ajax 异步时代和基于 JavaScript 的 UI 技术 RIA--Adobe F ...

随机推荐

  1. python基础(3)-pycharm安装&for循环&format字符串&list列表&set集合使用

    安装IDE(PyCharm)&破解 点击下载安装包,安装. 点击下载破解补丁. 进入pycharm安装bin目录,将破解补丁copy到当前目录. 在bin目录下找到pycharm.exe.vm ...

  2. python基础之 列表,元组,字典

    other help(str.strip) #查看是否有返回值以及返回值类型[] :称为索引操作符 1.列表 列表相比字符串来说能存储大量数据的python的基本数据类型,并且也拥有字符串的一些方法( ...

  3. 有没有无痛无害的人体成像方法?OCT(光学相干断层扫描)了解一下

    关于之前推送的胸片和CT有很多的小伙伴关心射线对人体的伤害的问题,在医学检查射线的强度和剂量已经有严格的标准,偶尔进行一次CT扫描是没有问题的,那么有没有一种完全无害的扫描检查呢?今天小编就给大家介绍 ...

  4. [Android] TextView上同时显示图标和文字

    需求场景 +----------------------------+ | Icon TEXT | +----------------------------+ 当然,可以使用LineLayout,包 ...

  5. Objective-C RunTime 学习笔记 之 基础结构体

    1.OC 运行期常用对象结构体 基本的结构体定义 typedef objc_class Class; /* 类 */ typedef objc_object *id; /* 各种类型,只要第一个字段为 ...

  6. CentOS 7 之 Systemd 入门教程:命令篇

    Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置 历史上,Linux 的启动一直采用init进程 下面的命令用来启动服务 [root@DaMoWang ~]# ...

  7. css td hover 选择器无效

    最近在写一个日历控件,控件中使用了table 来显示日期.在css 文件中利用 td:hover 设置td 背景色时 一直没起作用.上百度google 了一下,网上大部分人遇到的都是在td:hover ...

  8. spring-boot 根据环境启动

    spring-boot 根据环境启动: java -jar spring-boot--config--SNAPSHOT.jar --spring.profiles.active=prod

  9. Twisted简介

    Twisted是用Python实现的基于事件驱动的网络引擎框架,Twisted支持许多常见的传输及应用层协议,包括TCP.UDP.SSL/TLS.HTTP.IMAP.SSH.IRC以及FTP.就像Py ...

  10. JAVA JDK 环境变量配置--简单图解

    Linux下的Jmeter运行测试 本文主要介绍Jmeter脚本如何在Linux通过no GUI的方式运行.总共分三部分: 1.Linux下JDK的安装及环境变量的配置 2.Linux下Jmeter的 ...