WEB UI做TREE
效果图:
原本的普通搜索帮助,改成上面这样层级的搜索帮助。这里只做了两级。
一,新建一个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的更多相关文章
- “System.Web.UI.WebControls.Literal”不允许使用子控件
今天在写下面的代码时遭遇错误——“System.Web.UI.WebControls.Literal”不允许使用子控件('System.Web.UI.WebControls.Literal' does ...
- CDH中HDFS的WEB UI外网无法访问的问题
文章来自:http://www.cnblogs.com/hark0623/p/4177794.html 转载请注明 其实问题很简单,因为在CDH中hdfs-site.xml配置文件中WEB UI配置的 ...
- Google Polymer以及Web UI框架
时代在进步,原本前端只是用来简单的数据显示以及提交数据到后端处理逻辑的地方,而随着SPA的发展,前端的逻辑也越来越是庞大,恰巧,今天看微博的时候,发现一个概念讨论的比较多,就是 Web Compone ...
- Hive 接口介绍(Web UI/JDBC)
Hive 接口介绍(Web UI/JDBC) 实验简介 本次实验学习 Hive 的两种接口:Web UI 以及 JDBC. 一.实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanl ...
- yarn web ui 参数详解
我们经常使用yarn调度,但是我们是否对调度队列显示参数真正了解呢? 下面我们来一一看看这些参数都是做什么用的,代表什么意思 hadoop是通过队列管理集群资源,翻开集群Web UI,找到Sc ...
- [原创]浅谈Web UI自动化测试
[原创]浅谈Web UI自动化测试 Web UI自动化测试相信大家都不陌生,今天来谈谈这个,我最早接触自动化测试时大约是在2004年,2006年当时在腾讯财付通算是开始正式接触自动化测试,之所以是正式 ...
- 移动Web UI库(H5框架)有哪些,看这里就够了
前言 今年上半年,项目组在项目开发的过程中建立了一套风格统一,组件丰富完善,命名统一规范的PC端UI库,适用于做大型站点,该UI库也是应用到了整个平台的项目中,在各个项目组中进行推广.因为项目的保密性 ...
- 《软件测试自动化之道》读书笔记 之 底层的Web UI 测试
<软件测试自动化之道>读书笔记 之 底层的Web UI 测试 2014-09-28 测试自动化程序的任务待测程序测试程序 启动IE并连接到这个实例 如何判断待测web程序完全加载到浏览 ...
- Web UI 技术发展历程
本文内容 纯文本和静态 HTML 页面 服务器端技术 插件技术--ActiveX.Applet 和 Flash Ajax 异步时代和基于 JavaScript 的 UI 技术 RIA--Adobe F ...
随机推荐
- 【托业】【新东方全真模拟】03~04-----P5~6
❤ customer satisfaction survey 客户满意度调查 ❤ lose + 宾语:be lost ❤ superior (在品质上)更好的 ❤ be entitled to ...
- Mac同时安装python2和python3
Mac同时安装python2和python3 Mac自带python2,但因为开发时所用但pythonkennel是3也可能是2,并且就算是python2,版本号也许和内置但python也有所不同.所 ...
- 关于${pageContext.request.contextPath}的理解 (转载)
${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> . 也就是取出部署的应用程 ...
- 使用new和newInstance()创建类的区别
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一 ...
- 11.c#类的成员初始化顺序
转自http://www.cnblogs.com/siceblue/archive/2009/01/15/1376430.html C#作为一种纯面向对象的话言,为它编写的整个代码里面到处都离不开对象 ...
- JavaScript知识精简
JS单线程,同步,一次执行某一段代码,等到前一个程序执行完毕再执行.,阻塞,安全. 多线程,异步,不用等到前一个程序执行完毕就执行. 数据类型 JavaScript 是 弱类型 语言,但并不是没有 ...
- 前端学习历程--js--原型&闭包
一.数据类型 1.值类型:undefined, number, string, boolean,不是对象 2.引用类型:函数.数组.对象.null.new Number(10)都是对象 3.引用类型判 ...
- pageresponse.min.js自动缩放页面改写
/* * 名称 :移动端响应式框架 * 作者 :白树 http://peunzhang.cnblogs.com * 版本 :v2.1 * 日期 :2015.10.13 * 兼容 :ios 5+.and ...
- Lucky 7 (容斥原理 + 中国剩余定理)
题意:求满足7的倍数,不满足其他条件num % p == a 的num的个数. 思路:利用中国剩余定理我i们可以求出7的倍数,但是多算了不满足约定条件又得减去一个,但是又发现多减了,又得加回来.如此, ...
- 158A Next Round
A. Next Round time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...