一个需要用TREE展示搜索帮助的需求:

1.创建WDA程序:ZCATEGORY

2.Component Controller中添加节点:

(说明,此节点仅在搜索帮助程序中使用,可以不用interface node)

3.传入参数结构:

4.传出参数结构:

(取tree结构中的部分字段)

5.在Implemented Interfaces 中加入IWD_VALUE_HELP 窗口:WD_VALUE_HELP

激活全部程序。

6.在Component Controller属性中加入:

VALUE_HELP_LISTENER  public ref to  IF_WD_VALUE_HELP_LISTENER

方法SET_VALUE_HELP_LISTENER中实现获取传入参数

  1. METHOD set_value_help_listener .
  2. DATA:gs_attr TYPE wdr_context_attribute_info.
  3. DATA:lr_attr TYPE REF TO if_wd_context_element,
  4. gv_name TYPE string.
  5. DATA lo_nd_attr TYPE REF TO if_wd_context_node.
  6. DATA lo_el_attr TYPE REF TO if_wd_context_element.
  7. DATA ls_attr TYPE wd_this->element_attr.
  8. DATA:lr_node TYPE REF TO if_wd_context_node,
  9. lr_father TYPE REF TO if_wd_context_element.
  10. wd_this->value_help_listener = listener.
  11. gs_attr = listener->f4_attribute_info.
  12. lr_attr ?= listener->f4_context_element.
  13. CLEAR:ls_attr.
  14.  
  15. CASE gs_attr-name.
  16. WHEN 'ZZSYMP_CODE'.
  17. ls_attr-katalogart = 'Z1'.
  18. gv_name = 'ZZSYMP_GROU'.
  19. lr_attr->get_attribute(
  20. EXPORTING
  21. name = 'NUMBER_INT'
  22. IMPORTING
  23. value = wd_this->flag ).
  24. lr_node = lr_attr->get_node( ).
  25. CHECK lr_node IS BOUND.
  26. lr_father = lr_node->get_parent_element( ).
  27. CHECK lr_father IS BOUND.
  28. lr_father->get_attribute(
  29. EXPORTING
  30. name = 'SALES_ORG'
  31. IMPORTING
  32. value = ls_attr-sales_org ).
  33. WHEN 'SYMPTOMS_CODE' .
  34. ls_attr-katalogart = 'Z1'.
  35. gv_name = 'SYMPTOMS_CODE_G'.
  36. lr_attr->get_attribute(
  37. EXPORTING
  38. name = 'SALES_ORG'
  39. IMPORTING
  40. value = ls_attr-sales_org ).
  41. WHEN 'ZZZSYMPTOMSCODE'.
  42. ls_attr-katalogart = 'Z1'.
  43. gv_name = 'ZZZSYMPTOMSGROUP'.
  44.  
  45. ls_attr-sales_org = zcl_otr=>gv_sales_org.
  46. WHEN 'DEFECT_CODE'.
  47. ls_attr-katalogart = 'Z2'.
  48. gv_name = 'SYMPTOMS_CODE_G'.
  49. lr_attr->get_attribute(
  50. EXPORTING
  51. name = 'SALES_ORG'
  52. IMPORTING
  53. value = ls_attr-sales_org ).
  54. WHEN 'REPAIR_CODE'.
  55. ls_attr-katalogart = 'Z3'.
  56. gv_name = 'SYMPTOMS_CODE_G'.
  57. lr_attr->get_attribute(
  58. EXPORTING
  59. name = 'SALES_ORG'
  60. IMPORTING
  61. value = ls_attr-sales_org ).
  62. WHEN 'ZZSECTIONCODE'.
  63. ls_attr-katalogart = 'Z5'.
  64. gv_name = 'SYMPTOMS_CODE_G'.
  65. lr_attr->get_attribute(
  66. EXPORTING
  67. name = 'SALES_ORG'
  68. IMPORTING
  69. value = ls_attr-sales_org ).
  70. WHEN 'ZZAFLD00002V'.
  71. ls_attr-katalogart = 'Z6'.
  72. gv_name = 'SYMPTOMS_CODE_G'.
  73. lr_attr->get_attribute(
  74. EXPORTING
  75. name = 'SALES_ORG'
  76. IMPORTING
  77. value = ls_attr-sales_org ).
  78. WHEN OTHERS.
  79. EXIT.
  80. ENDCASE.
  81.  
  82. lr_attr->get_attribute(
  83. EXPORTING
  84. name = gv_name
  85. IMPORTING
  86. value = ls_attr-codegr ).
  87.  
  88. lo_nd_attr = wd_context->get_child_node( name = wd_this->wdctx_attr ).
  89. lo_el_attr = lo_nd_attr->get_element( ).
  90. lo_el_attr->set_static_attributes(
  91. static_attributes = ls_attr ).
  92.  
  93. ENDMETHOD.

READ_FOLDER

ZGRTREE Importing ZGRTREE
RESULT Returning ZGRTREET

  1. METHOD read_folder.
  2. DATA lo_nd_attr TYPE REF TO if_wd_context_node.
  3. DATA lo_el_cate TYPE REF TO if_wd_context_element.
  4. DATA lt_cate TYPE wd_this->elements_cate.
  5. DATA ls_cate TYPE wd_this->element_cate.
  6. DATA:gt_zgrtext TYPE TABLE OF zgrtext,
  7. gw_zgrtext LIKE LINE OF gt_zgrtext.
  8.  
  9. SELECT a~sales_org
  10. a~zcode_catalog
  11. a~zprod_category
  12. a~zscode_id AS code
  13. b~kurztext
  14. INTO CORRESPONDING FIELDS OF TABLE gt_zgrtext
  15. FROM ziriscode_config AS a
  16. INNER JOIN qpct AS b
  17. ON a~zcode_catalog = b~katalogart
  18. AND a~zprod_category = b~codegruppe
  19. AND a~zscode_id = b~code
  20. WHERE a~sales_org = zgrtree-sales_org
  21. AND a~zcode_catalog = zgrtree-zcode_catalog
  22. AND a~zprod_category = zgrtree-zprod_category
  23. AND a~zfcode_id = zgrtree-name
  24. AND b~sprache = sy-langu.
  25.  
  26. SORT gt_zgrtext.
  27. DELETE ADJACENT DUPLICATES FROM gt_zgrtext COMPARING ALL FIELDS.
  28. LOOP AT gt_zgrtext INTO gw_zgrtext.
  29. ls_cate-name = gw_zgrtext-code.
  30. ls_cate-path = zgrtree-name && '/' && gw_zgrtext-code.
  31. ls_cate-PARENT_PATH = zgrtree-name.
  32. ls_cate-text = gw_zgrtext-kurztext.
  33. ls_cate-is_expanded = abap_false.
  34. ls_cate-is_leaf = abap_true.
  35. ls_cate-sales_org = gw_zgrtext-sales_org.
  36. ls_cate-zcode_catalog = gw_zgrtext-zcode_catalog.
  37. ls_cate-zprod_category = gw_zgrtext-zprod_category.
  38. APPEND ls_cate TO lt_cate.
  39. ENDLOOP.
  40.  
  41. RESULT = lt_cate.
  42.  
  43. ENDMETHOD.

BROWSER ->TREE_BY_KEY_COL.CATE

onSelect->SELECT

MIME_TYPE->TREE_BY_KEY_COL.CATE.TEXT

BROWSER_NAME->childrenLoaded

->expanded

->isLeaf

->parentKey->TREE_BY_KEY_COL.CATE.PARENT_PATH

->rowKey    ->TREE_BY_KEY_COL.CATE.PATH

onLoadChildren->LOAD_FOLDER

BROWSER_NAME_INPUT->TREE_BY_KEY_COL.CATE.NAME

WDDOINIT:

  1. METHOD wddoinit .
  2. DATA lo_nd_cate TYPE REF TO if_wd_context_node.
  3. DATA lt_cate TYPE wd_this->elements_cate.
  4. DATA ls_cate TYPE wd_this->element_cate.
  5. DATA:gt_zgrtext TYPE TABLE OF zgrtext,
  6. gw_zgrtext LIKE LINE OF gt_zgrtext.
  7. lo_nd_cate = wd_context->get_child_node( name = wd_this->wdctx_cate ).
  8. DATA lo_nd_attr TYPE REF TO if_wd_context_node.
  9. DATA lo_el_attr TYPE REF TO if_wd_context_element.
  10. DATA ls_attr TYPE wd_this->element_attr.
  11.  
  12. lo_nd_attr = wd_context->get_child_node( name = wd_this->wdctx_attr ).
  13. lo_el_attr = lo_nd_attr->get_element( ).
  14. lo_el_attr->get_static_attributes(
  15. IMPORTING
  16. static_attributes = ls_attr ).
  17.  
  18. SELECT a~zfcode_id AS codegr
  19. a~sales_org
  20. a~zcode_catalog
  21. a~zprod_category
  22. b~kurztext AS kurztext
  23. INTO CORRESPONDING FIELDS OF TABLE gt_zgrtext
  24. FROM ziriscode_config AS a
  25. INNER JOIN qpct AS b
  26. ON a~zcode_catalog = b~katalogart
  27. AND a~zprod_category = b~codegruppe
  28. AND a~zfcode_id = b~code
  29. WHERE a~sales_org = ls_attr-sales_org
  30. AND a~zcode_catalog = ls_attr-katalogart
  31. AND a~zprod_category = ls_attr-codegr
  32. AND b~sprache = sy-langu.
  33. SORT gt_zgrtext.
  34. DELETE ADJACENT DUPLICATES FROM gt_zgrtext COMPARING ALL FIELDS.
  35. LOOP AT gt_zgrtext INTO gw_zgrtext.
  36. ls_cate-name = gw_zgrtext-codegr.
  37. ls_cate-path = gw_zgrtext-codegr.
  38. ls_cate-text = gw_zgrtext-kurztext.
  39. ls_cate-is_expanded = abap_false.
  40. ls_cate-is_leaf = abap_false.
  41. ls_cate-sales_org = gw_zgrtext-sales_org.
  42. ls_cate-zcode_catalog = gw_zgrtext-zcode_catalog.
  43. ls_cate-zprod_category = gw_zgrtext-zprod_category.
  44. APPEND ls_cate TO lt_cate.
  45. ENDLOOP.
  46. lo_nd_cate->bind_table( new_items = lt_cate set_initial_elements = abap_true ).
  47.  
  48. ENDMETHOD.
  1. METHOD onactionselect .
  2. DATA:lr_context TYPE REF TO if_wd_context_element.
  3. DATA lo_nd_grcode TYPE REF TO if_wd_context_node.
  4. DATA lo_el_grcode TYPE REF TO if_wd_context_element.
  5. DATA ls_grcode TYPE wd_this->element_grcode.
  6. DATA:gw_code TYPE zgrtree.
  7.  
  8. CLEAR:ls_grcode,gw_code.
  9.  
  10. lr_context = wdevent->get_context_element( name = 'NEW_LEAD_SELECTION' ).
  11. lr_context->get_static_attributes(
  12. IMPORTING
  13. static_attributes = gw_code ).
  14.  
  15. lo_nd_grcode = wd_context->get_child_node( name = wd_this->wdctx_grcode ).
  16. lo_el_grcode = lo_nd_grcode->get_element( ).
  17. ls_grcode-sales_org = gw_code-sales_org.
  18. ls_grcode-zcode_catalog = gw_code-zcode_catalog.
  19. ls_grcode-zprod_category = gw_code-zprod_category.
  20. ls_grcode-code = gw_code-name.
  21. ls_grcode-kurztext = gw_code-text.
  22.  
  23. IF wd_comp_controller->flag <> ''.
  24. ls_grcode-kurztext = wd_comp_controller->flag.
  25. ls_grcode-zcode_catalog = ''.
  26. ENDIF.
  27.  
  28. lo_el_grcode->set_static_attributes(
  29. static_attributes = ls_grcode ).
  30.  
  31. wd_comp_controller->fire_vh_data_selected_evt( ).
  32. wd_comp_controller->value_help_listener->close_window( ).
  33. ENDMETHOD.
  1. METHOD onactionload_folder.
  2. DATA componentcontroller_ref TYPE REF TO ig_componentcontroller.
  3. * data folder_entries type wdr_example_mime_entry_tab.
  4. DATA folder_entries TYPE TABLE OF zgrtree.
  5. DATA url_path TYPE string.
  6. DATA element TYPE REF TO if_wd_context_element.
  7. DATA context_node TYPE REF TO if_wd_context_node.
  8. DATA:gs_node TYPE zgrtree.
  9.  
  10. * Get URL Path of folder to read
  11. element = wd_context->path_get_element( path ).
  12. element->get_attribute( EXPORTING name = 'PATH'
  13. IMPORTING value = url_path ).
  14. element->set_attribute( EXPORTING name = 'CHILDREN_LOADED'
  15. value = abap_true ).
  16.  
  17. element->get_static_attributes(
  18. IMPORTING
  19. static_attributes = gs_node ).
  20.  
  21. * Read folder by calling method of the component controller
  22. context_node = wd_context->get_child_node( 'CATE' ).
  23. componentcontroller_ref = wd_this->get_componentcontroller_ctr( ).
  24.  
  25. folder_entries = componentcontroller_ref->read_folder( gs_node ).
  26.  
  27. * Append new lines
  28. context_node->bind_table( new_items = folder_entries
  29. set_initial_elements = abap_false ).
  30.  
  31. ENDMETHOD.

在使用组件的程序中,添加组件:CODE ZCATEGORY Table with Tree

在Component Controller中添加程序的组件引用

定义属性:

VALUE_HELP_LISTENER   ref to IF_WD_VALUE_HELP_LISTENER

新建方法:

CODE 1 Event Handler                                                             VH_DATA_SELECTED INTERFACECONTROLLER CODE

方法中对传出参数处理:

  1. METHOD code .
  2. DATA lo_nd_grcode TYPE REF TO if_wd_context_node.
  3. DATA lo_el_grcode TYPE REF TO if_wd_context_element.
  4. DATA ls_grcode TYPE wd_this->element_grcode.
  5. DATA lo_nd_l_so_header_n TYPE REF TO if_wd_context_node.
  6. DATA lo_el_l_so_header_n TYPE REF TO if_wd_context_element.
  7. DATA ls_l_so_header_n TYPE wd_this->element_l_so_header_n.
  8. DATA lv_symptoms_code TYPE wd_this->element_l_so_header_n-symptoms_code.
  9. DATA lo_nd_t_so_item_n TYPE REF TO if_wd_context_node.
  10. DATA lt_t_so_item_n TYPE wd_this->elements_t_so_item_n.
  11. DATA ls_t_so_item_n TYPE wd_this->element_t_so_item_n.
  12. DATA:lv_name TYPE string,
  13. lv_no TYPE I.
  14.  
  15. * navigate from <CONTEXT> to <GRCODE> via lead selection
  16. lo_nd_grcode = wd_context->get_child_node( name = wd_this->wdctx_grcode ).
  17. lo_el_grcode = lo_nd_grcode->get_element( ).
  18.  
  19. lo_el_grcode->get_static_attributes(
  20. IMPORTING
  21. static_attributes = ls_grcode ).
  22.  
  23. "动态确定返回参数赋值
  24. CASE ls_grcode-zcode_catalog.
  25. WHEN 'Z1'.
  26. lv_name = `SYMPTOMS_CODE`.
  27. WHEN 'Z2'.
  28. lv_name = `DEFECT_CODE`.
  29. WHEN 'Z3'.
  30. lv_name = `REPAIR_CODE`.
  31. WHEN 'Z5'.
  32. lv_name = `ZZSECTIONCODE`.
  33. WHEN 'Z6'.
  34. lv_name = `ZZAFLD00002V`.
  35. WHEN ''."项目
  36. SHIFT ls_grcode-kurztext LEFT DELETING LEADING ''.
  37. lv_no = ls_grcode-kurztext.
  38. WHEN OTHERS.
  39. ENDCASE.
  40.  
  41. IF ls_grcode-zcode_catalog <> ''.
  42. lo_nd_l_so_header_n = wd_context->get_child_node( name = wd_this->wdctx_l_so_header_n ).
  43. lo_el_l_so_header_n = lo_nd_l_so_header_n->get_element( ).
  44. lo_el_l_so_header_n->set_attribute(
  45. name = lv_name"`SYMPTOMS_CODE`
  46. value = ls_grcode-code ).
  47. ELSE.
  48. lo_nd_t_so_item_n = wd_context->path_get_node( path = `L_SO_HEADER_N.T_SO_ITEM_N` ).
  49. lo_nd_t_so_item_n->get_static_attributes_table( IMPORTING table = lt_t_so_item_n ).
  50. LOOP AT lt_t_so_item_n INTO ls_t_so_item_n WHERE number_int = lv_no.
  51. ls_t_so_item_n-zzsymp_code = ls_grcode-code.
  52. MODIFY lt_t_so_item_n FROM ls_t_so_item_n.
  53. ENDLOOP.
  54.  
  55. lo_nd_t_so_item_n->bind_table( new_items = lt_t_so_item_n set_initial_elements = abap_true ).
  56.  
  57. ENDIF.
  58.  
  59. ENDMETHOD.

给节点确定搜索帮助

如果是select option:

  1. DATA lo_so_api TYPE REF TO if_wd_controller.
  2. DATA lo_so_cmp TYPE REF TO if_wd_component.
  3. DATA lo_so_cmp_usg_tc TYPE REF TO if_wd_component_usage_group.
  4. DATA lo_so_cmp_usg_emp TYPE REF TO if_wd_component_usage_group.
  1. lo_so_api = wd_this->m_wd_select_options->wd_get_api( ).
  2. lo_so_cmp = lo_so_api->get_component( ).
  3. "门店搜索帮助
  4. lo_so_cmp->remove_cmp_usage_group( 'GROUP' ).
  5. lo_so_cmp_usg_tc = lo_so_cmp->create_cmp_usage_group(
  6. name = 'GROUP'
  7. used_component = 'ZGROUP' ).
  8. lt_range_table =
  9. wd_this->m_handler->create_range_table(
  10. i_typename = 'ZSO_SYMPTOMS_CODE' ).
  11. * add a new field to the selection
  12. wd_this->m_handler->add_selection_field(
  13. i_id = 'SYMPTOMS_CODE'
  14. i_description = zcl_otr=>get_text( 'ZCRM/SYMCODE' )"lv_value
  15. i_value_help_type = 'APPLDEV'
  16. i_value_help_id = 'GROUP'
  17. * i_within_block = 'SELS'
  18. it_result = lt_range_table
  19. i_read_only = read_only ).

GROUP是程序添加的组件

效果:

WDA基础十二:FREE PROGRAM SH (WDA TREE)的更多相关文章

  1. Bootstrap <基础十二>下拉菜单(Dropdowns)

    Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...

  2. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  3. 玩转Django2.0---Django笔记建站基础十二(Django项目上线部署)

    第十二章 Django项目上线部署 目前部署Django项目有两种主流方案:Nginx+uWsGI+Django或者Apache+uWSGI+Django.Nginx作为服务器最前端,负责接收浏览器的 ...

  4. WDA基础十:OVS搜索帮助的使用

    对于WDA来说,常用的搜索帮助有OVS,标准SH,Interface view等.今天来说说两种常用的OVS的使用: 一:普通字段,表字段的搜索帮助(在创建节点的时候指定搜索帮助OVS,或者后面加上去 ...

  5. WDA基础十四:ALV字段属性配置表

    ALV配置表管理 一.字段属性配置表 对于可编辑的ALV不用这个,尽可能多的设置一些控制: 单元格类型:默认A,特殊选择 ZLYE_TYPE        E       A       1      ...

  6. WDA基础十八:Select option配置

    为了省代码...为了方便管理WDA的查询条件... 首先建配置表: 说明: 上面的KEY基本都是维护的维度,可以根据销售组织,根据用户组,根据组件,根据SELECT OPTION的不同...等等,可以 ...

  7. WDA基础十六:ALV的颜色

    这里介绍三种类型的颜色:列的背景色,单元格的背景色,单元格文本的颜色. 1.给ALV结构添加颜色控制字段: 三个字段都是同一类型:WDY_UIE_LIBRARY_ENUM_TYPE COL_BACKG ...

  8. WDA基础十五:POPUP WINDOW

    1.组件控制器定义属性: 2.实现popup方法: METHOD stock_popup . DATA: l_cmp_api TYPE REF TO if_wd_component, l_window ...

  9. 玩转Django2.0---Django笔记建站基础十(二)(常用的Web应用程序)

    10.3 CSRF防护 CSRF(跨站请求伪造)也成为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,窃取网站的用户信息来制作 ...

随机推荐

  1. 【Hadoop 分布式部署 四:配置Hadoop 2.x 中主节点(NN和RM)到从节点的SSH无密码登录】

    *******************                一定要使这三台机器的用户名相同,安装目录相同          ************* SSH 无密钥登录的简单介绍(之前再搭 ...

  2. Derek解读Bytom源码-启动与停止

    作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom ...

  3. Dispose in c#

    在标准的Dispose模式中,真正的IDisposable接口的Dispose方法并没有做实际的清理工作,它其实是调用了下面的这个带bool参数且受保护的的虚方法: protected virtual ...

  4. 【译】第11节---数据注解-TimeStamp

    原文:http://www.entityframeworktutorial.net/code-first/TimeStamp-dataannotations-attribute-in-code-fir ...

  5. Linux shell 计算两个文件的并集、交集、差集

    假设我们现在有两个文件 a.txt .b.txt a.txt 中的内容如下: a c 1 3 d 4 b.txt 中的内容如下: a b e 2 1 5 # Example 01 计算并集: [roo ...

  6. 深入理解char * ,char ** ,char a[ ] ,char *a[]

    1.数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素. 2.指针 指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址.由于地址也 ...

  7. IIS客户端没有权限

    运行CMDicacls c:\ /setintegritylevel M

  8. 蚂蚁金服×西安银行 | 西安银行手机银行App的智能升级之路

    小蚂蚁说: 当前,数字化信号已经逐渐深入到社会的每个角落,影响着用户的心智和行为,来到数字化时代门口的银行,需要注意到数字化信号.西安银行通过引入蚂蚁金服移动开发平台mPaaS,对手机银行进行架构升级 ...

  9. 函数indexOf()和lastIndexOf()

    返回前面起第一个字符的位置indexOf(“字符”); 它是从前面开始数(从左边开始数),而且只找第一个,然后返回该字符的位置,索引号都是从0开始的.返回的是个数值. var txt = “abcde ...

  10. 构造函数中用:base

    如果person中有自己写的构造函数 则Student类的构造方法必须要加:base继承这个构造方法!因为默认的Student:base(空)构造方法已经被干掉了 构造方法的调用//base里的参数, ...