为了省代码。。。为了方便管理WDA的查询条件。。。

首先建配置表:

说明:

上面的KEY基本都是维护的维度,可以根据销售组织,根据用户组,根据组件,根据SELECT OPTION的不同。。。等等,可以根据情况而定。

COMPONENT_NAME:wda组件名,不同的组件配置不同。

SELOPTION:SELECT OPTION名,不同的SELECT不同配置。

ATTRIBUTE:字段名,这里按照表字段名来处理的,方便后面做动态SQL。

TABNAME:表名,需要查的字段对应的数据库表,也是方便后面动态SQL。

DATAELEMENT:数据元素,创建OPTION的对象。

TEXT:字段标签,可以是OTR翻译文本,也可以是固定文本。

DISP_INDEX:SELECT条件的位置。

VISIABLE:查询条件是否可见。

MANDATORY:查询条件是否必填。

NO_EXTENSION:没有扩展选项
NO_INTERVALS:没有范围选择
AS_CHECKBOX:查询条件是CHECK BOX
AS_DROPDOWN:查询条件是下拉

SELECT OPTION初始化:

METHOD init_select_options .
DATA:
lt_range_table TYPE REF TO data,
read_only TYPE abap_bool.
DATA:
lr_componentcontroller TYPE REF TO ig_componentcontroller,
l_ref_cmp_usage TYPE REF TO if_wd_component_usage.
DATA:
display_btn_cancel TYPE abap_bool,
display_btn_check TYPE abap_bool,
display_btn_reset TYPE abap_bool,
display_btn_execute TYPE abap_bool.
DATA:gt_value_set TYPE wdy_key_value_table,
gw_value_set TYPE wdy_key_value,
gt_type TYPE TABLE OF crmc_proc_type_t,
gw_type LIKE LINE OF gt_type.
DATA:gt_zcrmt0888 TYPE TABLE OF zcrmt0888,
gw_zcrmt0888 LIKE LINE OF gt_zcrmt0888.
FIELD-SYMBOLS:<tab> TYPE table.
* create the used component
l_ref_cmp_usage = wd_this->wd_cpuse_select_option( ).
IF l_ref_cmp_usage->has_active_component( ) IS INITIAL.
l_ref_cmp_usage->create_component( ).
ENDIF.
* get a pointer to the interface controller of the select options
*component
wd_this->m_wd_select_options = wd_this->wd_cpifc_select_option( ). * init the select screen
wd_this->m_handler = wd_this->m_wd_select_options->init_selection_screen( ). SELECT * INTO TABLE gt_zcrmt0888 FROM zcrmt0888.
SORT gt_zcrmt0888 BY disp_index ASCENDING.
LOOP AT gt_zcrmt0888 INTO gw_zcrmt0888.
DATA:v_type TYPE string,
v_id TYPE string,
v_text TYPE string.
REFRESH:gt_value_set.
v_type = gw_zcrmt0888-dataelement."赋值数据元素类型
v_id = gw_zcrmt0888-attribute."赋值字段ID
v_text = gw_zcrmt0888-text.
IF gw_zcrmt0888-text CS 'ZCRM'."处理描述
v_text = zcl_otr=>get_text( v_text ).
ENDIF. lt_range_table = wd_this->m_handler->create_range_table( i_typename = v_type ). IF gw_zcrmt0888-attribute = 'PROCESS_TYPE'.
IF wd_comp_controller->bp_current_sales_org = 'O 50000005'.
SELECT * INTO TABLE gt_type FROM crmc_proc_type_t
WHERE process_type IN ('ZSO2','ZSO5')
AND langu = sy-langu.
ELSE.
SELECT * INTO TABLE gt_type FROM crmc_proc_type_t
WHERE process_type IN ('ZSO2','ZSO3','ZSO5')
AND langu = sy-langu.
ENDIF.
LOOP AT gt_type INTO gw_type.
gw_value_set-key = gw_type-process_type.
gw_value_set-value = gw_type-p_description.
APPEND gw_value_set TO gt_value_set.
ENDLOOP.
ELSEIF gw_zcrmt0888-attribute = 'DELIVERD'.
ASSIGN lt_range_table->* TO <tab>.
ls_stat-low = 'A'.
ls_stat-high = 'B'.
ls_stat-sign = 'I'.
ls_stat-option = 'BT'.
APPEND ls_stat TO <tab>.
ENDIF. wd_this->m_handler->add_selection_field(
i_id = v_id
i_obligatory = gw_zcrmt0888-mandatory
i_no_extension = gw_zcrmt0888-no_extension
i_no_intervals = gw_zcrmt0888-no_intervals
i_as_checkbox = gw_zcrmt0888-as_checkbox
i_as_dropdown = gw_zcrmt0888-as_dropdown
i_description = v_text
it_result = lt_range_table
it_value_set = gt_value_set
i_read_only = read_only ).
ENDLOOP. REFRESH:gt_zcrmt0888. * adjust the global options
wd_this->m_handler->set_global_options(
i_display_btn_cancel = display_btn_cancel
i_display_btn_check = display_btn_check
i_display_btn_reset = display_btn_reset
i_display_btn_execute = display_btn_execute ). ENDMETHOD.

SEARCH里处理:(部分)

DATA: rt_object_id TYPE REF TO data.
FIELD-SYMBOLS: <table> TYPE table,
<any> TYPE any. DATA:
gt_zcrmt0888 TYPE TABLE OF zcrmt0888,
gw_zcrmt0888 LIKE LINE OF gt_zcrmt0888,
lv_id TYPE string.
lo_api_controller ?= wd_this->wd_get_api( ).
lo_message_manager = lo_api_controller->get_message_manager( ).
lo_nd_so_search = wd_context->get_child_node( name = wd_this->wdctx_so_search ). DATA:gt_range TYPE rsds_trange,
gw_range LIKE LINE OF gt_range,
gt_field TYPE TABLE OF zsfrange,
gw_field LIKE LINE OF gt_field,
gw_selec TYPE rsdsselopt,
gt_where TYPE TABLE OF crmt_where.
SELECT * INTO TABLE gt_zcrmt0888 FROM zcrmt0888 WHERE visiable = 'X'. LOOP AT gt_zcrmt0888 INTO gw_zcrmt0888.
lv_id = gw_zcrmt0888-attribute.
rt_object_id = wd_this->m_handler->get_range_table_of_sel_field( i_id = lv_id ).
ASSIGN rt_object_id->* TO <table>.
LOOP AT <table> ASSIGNING <any>.
MOVE-CORRESPONDING <any> TO gw_selec.
APPEND gw_selec TO gw_field-selopt_t.
ENDLOOP.
UNASSIGN:<any>,<sales_org>.
gw_field-fieldname = gw_zcrmt0888-attribute.
APPEND gw_field TO gw_range-frange_t.
CLEAR:gw_field.
ENDLOOP.
APPEND gw_range TO gt_range.
CLEAR:gw_range. CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_WHERE'
EXPORTING
field_ranges = gt_range
IMPORTING
where_clauses = gt_where.

。。。

看看效果:

输入查询条件,看处理结果:

这里没配TABLENAME,都是默认的:

可以根据TABLENAME分到不同的动态SQL里,然后加到常规SQL中。

WDA基础十八:Select option配置的更多相关文章

  1. Bootstrap <基础十八>面包屑导航(Breadcrumbs)

    面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...

  2. WDA基础十二:FREE PROGRAM SH (WDA TREE)

    一个需要用TREE展示搜索帮助的需求: 1.创建WDA程序:ZCATEGORY 2.Component Controller中添加节点: (说明,此节点仅在搜索帮助程序中使用,可以不用interfac ...

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

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

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

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

  5. redis(十八):Redis 配置

    #redis.conf# Redis configuration file example.# ./redis-server /path/to/redis.conf ################# ...

  6. 黑马程序员 Java基础<十八>---> 网路编程

    --------------- ASP.Net+Android+IO开发S..Net培训.期待与您交流! --------------- 第一  概述 一.概述: 1.网络模型:OSI参考模型和TCP ...

  7. java基础(十八)----- java动态代理原理源码解析

    关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 静态代理 1.静态代理 静态代理:由程序员创建或特定工 ...

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

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

  9. WDA基础十五:POPUP WINDOW

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

随机推荐

  1. 实现一个new操作符

    new 操作符做了这些事: 1.它创建了一个全新的对象: 2.它会被执行[[Prototype]](也就是__proto__)链接: 3.它使this指向新创建的对象: 4.通过new创建的每个对象最 ...

  2. 【HDU6327】Random Sequence(记忆化搜索)

    点此看题面 大致题意: 给你两个序列\(a,v\),其中\(a\)数组由\(0\sim m\)组成.随机用\(1\sim m\)中的一个数替换\(a\)中的\(0\),求\(\sum_{i=1}^{n ...

  3. MySQL实战45讲学习笔记:第十九讲

    一.引子 一般情况下,如果我跟你说查询性能优化,你首先会想到一些复杂的语句,想到查询需要返回大量的数据.但有些情况下,“查一行”,也会执行得特别慢.今天,我就跟你聊聊这个有趣的话题,看看什么情况下,会 ...

  4. [LeetCode] 903. Valid Permutations for DI Sequence DI序列的有效排列

    We are given S, a length n string of characters from the set {'D', 'I'}. (These letters stand for &q ...

  5. mysql 字段修改汇总

    --  增加 ALTER TABLE `gdm_nursing_patient` ADD COLUMN `due_date` date DEFAULT NULL COMMENT '名称' AFTER ...

  6. AtCoder Grand Contest 037 简要题解

    从这里开始 题目目录 Problem A Dividing a String 猜想每段长度不超过2.然后dp即可. 考虑最后一个长度大于等于3的一段,如果划成$1 + 2$会和后面相同,那么划成$2 ...

  7. Python安装(64位Win8.1专业版)

    本文出处:http://www.cnblogs.com/leonwen/p/4700648.html 嗯,开始学Python. 我安装的是Python 2.7.10版本,安装的时候除了选了路径其他均n ...

  8. [转载]3.3 UiPath鼠标操作图像的介绍和使用

    一.鼠标(mouse)操作的介绍 模拟用户使用鼠标操作的一种行为,例如单击,双击,悬浮.根据作用对象的不同我们可以分为对元素的操作.对文本的操作和对图像的操作 二.鼠标对图像的操作在UiPath中的使 ...

  9. 用欧拉计划学习Rust编程(第13~16题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

  10. enum一个最不像class的class

    enum一个最不像class的classjava枚举类型是jdk5出现的.它的出现主要为了解决一些有特殊意义,已经确定的,长度不会改变的集合. //月份描述 public class Month { ...