起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5768|回复: 10

自定义查询功能

  [复制链接]

6

主题

4万

帖子

8420

积分

版主

Rank: 7Rank: 7Rank: 7

积分
8420
QQ
发表于 2013-8-8 10:28:57 | 显示全部楼层 |阅读模式
本帖最后由 liangyongfei 于 2013-8-8 15:57 编辑

1,如果用录入数据进行查询:效果如图:
4S0GRV@VI`0F8JR5C]}HVZP.jpg
首先,在w文件拖入一个静态的data组件,设置它的属性columns,为它添加列,‘TName'表示对应您需要过滤的那个列的字段。点击确定。如图:
Y4RZ@K3N%`]5V]RX~)0}QUJ.jpg [0{R8O})J3RKF~[HN(S[3NQ.jpg

注意:store-type:simple。auto-new:true.
然后在w文件的一个位置拖入一个input输入框,设置其ref,选择data中对应的列名。如图
14.jpg 8ED_(DI{NGKD{YF5_H{_E[X.jpg BU92GR}@I7EG_KDT{[Q{Z)A.jpg

然后在w文件中拖入一个trigger按钮,在它的点击事件中写如下代码:
  1.         //找到要被过滤数据的data组件
  2.         var data = justep.xbl("dataMain");
  3.         //找到去过滤其他数据的data组件
  4.         var data2 = justep.xbl("filterData");
  5.          // 定义要过滤的ksql的条件语句
  6.         var filter = "";
  7.         //判断是否有需要过滤的数据
  8.         if (data2.getValue('TName').trim() != '') {      //模糊过滤字段‘fCGMC’
  9.                 filter += " KJ_Reward.fCGMC like '%" + data2.getValue('TName') + "%' and";
  10.         }
  11.         filter += " 1=1";
  12.          //为被过滤数据设置过滤条件
  13.         data.setFilter("filter", filter);
  14.         // 刷新就可以生成过滤后的结果了。
  15.         data.refreshData();
复制代码
2,查询时间段内的数据,效果图如下:
QUR8Q9`5B`U1(MOX1M@QI0F.jpg

操作过程和上边相似,还是在那个静态data组件属性columns上添加列‘startTime’和‘stopTime’。然后拖入两个input组件,以次设置其ref为
data中对应的列名:
]K5WS[%`OZFBT0OH~}N9OTA.jpg

因为我的时间是DataTime类型的,所以要给data添加规则。右击data组件,选择“编辑规则”。选择‘startTime’和‘stopTime’,确定,点级规则设置它的type类型为dataTime。如图:
WM(YP9FC}BI89]737AVX640.jpg
然后在查询按钮上点击事件添加代码如下:
  1. if(data2.getValue('startTime').trim() != ''){
  2.                 var d1 = data2.getValue('startTime');
  3.                 d1 = d1.substr(0, 22);
  4.                 d1 = d1.replace("T", " ");
  5.                 filter += " KJ_Reward.fRewardDate >= stringToDateTime('" + d1 + "') and" ;
  6.         }
  7.         
  8.         if(data2.getValue('stopTime').trim() != ''){
  9.                 var d2 = data2.getValue('stopTime');
  10.                 d2 = d2.substr(0, 22);
  11.                 d2 = d2.replace("T", " ");
  12.                 filter += " KJ_Reward.fRewardDate <= stringToDateTime('" + d2 + "') and";
  13.         }
复制代码
可以给它设定默认时间,选择model,在onload事件中添加如下代码


ASNEMN)F$Z14G{[QG}9C){B.jpg IO@)W)5N%WDV`P(ITOX(JWY.jpg
       //还是找到那个静态的data组件
  1. var data = justep.xbl("filterData");
  2.         var nowDateTimeStr = justep.Date.toString(new Date(),'yyyy-MM-ddThh:mm:ss.000Z');// 今天的时间
  3.         
  4.         var yDate = justep.Date.decrease(new Date(), 1, 'd');
  5.         var yDateStr = justep.Date.toString(yDate, 'yyyy-MM-ddThh:mm:ss.000Z');// 昨天的时间
  6.         data.setValue('stopTime', nowDateTimeStr);
  7.         data.setValue('startTime', yDateStr);
复制代码
3,下拉框实现如图:

XNE50M49NDD7RQWA~MW]}WD.jpg

流程和上边相似,还是在那个静态data组件属性columns上添加列‘JLType’。然后拖入gridSelect组件,以次设置其ref为data中对应的列名,label-ref也一样设置。data-ref选择下拉框所在的数据集,auto-load-data:true  ,  如果有别的组件共用这个数据集,那么把independence也设置为true。如图:
U0X2TL_9]2VPK{@[P{(K`8N.jpg SKTB@(5{Y26RN{`RKCR7G44.jpg F4OXW(G90P{[U[88T0E]2}Y.jpg
点击columns的属性值,添加要在下拉框中显示的列,列名要和bizData2中的要显示列名一致。然后设置value和label的属性值:



然后在查询的点击时间中添加如下代码:
  1. if (data2.getValue('JLType').trim() != '') {
  2.                 filter += " KJ_Reward.fJLLB='" + data2.getValue('JLType') + "' and";
  3.         }
复制代码
,然后就可以过滤查询数据了

最后总的代码为:
  1.       //找到要被过滤数据的data组件
  2. var data = justep.xbl("dataMain");
  3. //找到去过滤其他数据的data组件
  4. var data2 = justep.xbl("filterData");
  5. // 定义要过滤的ksql的条件语句
  6. var filter = "";
  7. //判断是否有需要过滤的数据
  8. if (data2.getValue('TName').trim() != '') { //模糊过滤字段‘fCGMC’
  9. filter += " KJ_Reward.fCGMC like '%" + data2.getValue('TName') + "%' and";
  10. }
  11. // 先判断,在静态data中拿出开始时间,并修改成数据库中的存储格式,然后加到ksql上。
  12. if(data2.getValue('startTime').trim() != ''){
  13. var d1 = data2.getValue('startTime');
  14. d1 = d1.substr(0, 22);
  15. d1 = d1.replace("T", " ");
  16. filter += " KJ_Reward.fRewardDate >= stringToDateTime('" + d1 + "') and" ;
  17. }

  18. if(data2.getValue('stopTime').trim() != ''){
  19. var d2 = data2.getValue('stopTime');
  20. d2 = d2.substr(0, 22);
  21. d2 = d2.replace("T", " ");
  22. filter += " KJ_Reward.fRewardDate <= stringToDateTime('" + d2 + "') and";
  23. }
  24. if (data2.getValue('JLType').trim() != '') {
  25. filter += " KJ_Reward.fJLLB='" + data2.getValue('JLType') + "' and";
  26. }
  27. filter += " 1=1";
  28. //为被过滤数据设置过滤条件
  29. data.setFilter("filter", filter);
  30. // 刷新就可以生成过滤后的结果了。
  31. data.refreshData();<div></div>
复制代码
A~K5Z[3`XGW903QMQ7`}}54.jpg
WN(}@(AJ`ADW%OPKL_ML0.jpg
CH_(R06UAB6AAEIC{UL(9O0.jpg
DE{FFIMMUQIHFJCXF9@EQ~4.jpg
]ID_UZ1~]5JR)KYDGQ%WR`C.jpg
`A](3)NG77C7S8[GUX_1D@I.jpg
[8)%RR%%TN0W22`%(IM)F_D.jpg
7_EX)75R3MF1`(29EY29J%S.jpg
WH0}V@1XQG~BSO$S%C%O{86.jpg
16.jpg
15.jpg
13.jpg
12.jpg
qq:1912779713
WeX5教程--WeX5下载

6

主题

4万

帖子

8420

积分

版主

Rank: 7Rank: 7Rank: 7

积分
8420
QQ
 楼主| 发表于 2013-8-8 11:10:33 | 显示全部楼层

智能过滤查询组件的应用

本帖最后由 liangyongfei 于 2013-8-8 15:07 编辑

本例子效果图和楼上相似,制作过程简单如下:
1普通文本输入框可以用smartFilter,将一个smartFilter组件拖入w文件,设置它的filter-data属性值,选择要过滤的data组件,设置filter-relations:选择要过滤的列。如图: NO_[VQCI0_Y_DRKY[Y{JA8W.jpg $[_2N)OZBFHNZ9J1{WGJPB2.jpg

2日期过滤可以用dateFilter,同上,将一个dateFilter组件拖入w文件,设置它的filter-data属性值,选择要过滤的data组件,设置filter-relations:选择要过滤的列。如图:
KANJ84511R]CIO~~~4[}M.jpg JA[8226~ULQ@}6X`{K~XZGX.jpg
3:gridFilter(下拉列表过滤),将一个gridFilter组件拖入w文件,设置它的filter-data属性值,选择要过滤的data组件,设置filter-relations:选择要过滤的列, Q%PDJ(8_2_7EWOIR0RLO.jpg ~K4X)K1CD`NH7(8(A7DLWNG.jpg

然后选择下拉框数据所在的data,在data-ref中选择,columns添加要显示的列,然后设置value和label,如图:
1}NCL@TEFYF1(BBZP3K1F[U.jpg K64{ZKYGKZ06N7Y5%%)`R1O.jpg
点击事件中直接调用data组件的.refreshData()方法即可。
点击查询按钮,
便可以查得要生成的数据了。
{E0LR%EIWR3L{{~55EH_I3T.jpg
qq:1912779713
WeX5教程--WeX5下载

43

主题

129

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2013-8-9 16:27:26 | 显示全部楼层
liangyongfei 发表于 2013-8-8 11:10
本例子效果图和楼上相似,制作过程简单如下:
1普通文本输入框可以用smartFilter,将一个smartFilter组件拖 ...

再按照liangyongfei 的帖子智能过滤查询组件的应用的方法,使用gridFilter(下拉列表过滤)组件,放到工具栏之后,
按照你的图示设置完成后,运行,下拉不出列表数据,提示错误如下图:求解,急用
QQ图片20130809162045.jpg

6

主题

4万

帖子

8420

积分

版主

Rank: 7Rank: 7Rank: 7

积分
8420
QQ
 楼主| 发表于 2013-8-9 16:44:52 | 显示全部楼层
jk1963 发表于 2013-8-9 16:27
再按照liangyongfei 的帖子智能过滤查询组件的应用的方法,使用gridFilter(下拉列表过滤)组件,放到工具 ...

如果有别的组件共用这个数据集,那么把independence也设置为true。看下是不是这个问题,另外比对下我的截图看看什么属性设错了
qq:1912779713
WeX5教程--WeX5下载

43

主题

129

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2013-8-9 22:32:27 | 显示全部楼层
liangyongfei 发表于 2013-8-9 16:44
如果有别的组件共用这个数据集,那么把independence也设置为true。看下是不是这个问题,另外比对下我的截 ...

ok了
谢谢

3

主题

13

帖子

25

积分

新手上路

Rank: 1

积分
25
QQ
发表于 2013-10-11 18:16:23 | 显示全部楼层
求助,我定义了一个leaveSumActivity.w,参照上述步骤想做一个过滤时间的报表,参数为 begin和end 。但是运行时均报错 “ leaveSumActivity is not define" 在js里已有注明var leaveSumActivity = {};
错误代码为
[ERROR] 2013-10-11 18:13:57,688 com.justep.report.controller.DataController - 报表数据获取失败
执行ksql:select DEMO_LeaveApply.fCreateDeptName as fCreateDeptName,DEMO_LeaveApply.fCreatePerName as fCreatePerName,SA_OPOrg.sCode as sCode,case when DEMO_LeaveApply.fLeaveTypeName = '休假' then DEMO_LeaveApply.fLeaveDays else 0 end as vacation,case when DEMO_LeaveApply.fLeaveTypeName = '出差' then DEMO_LeaveApply.fLeaveDays else 0 end as travel,case when DEMO_LeaveApply.fLeaveTypeName = '病假' then DEMO_LeaveApply.fLeaveDays else 0 end as sick,case when DEMO_LeaveApply.fLeaveTypeName = '事假' then DEMO_LeaveApply.fLeaveDays else 0 end as leaveApply,case when DEMO_LeaveApply.fLeaveTypeName = '产假' then DEMO_LeaveApply.fLeaveDays else 0 end as maternity,DEMO_LeaveApply.fStartTime as fStartTime from DEMO_LeaveApply DEMO_LeaveApply  optional  join SA_OPOrg SA_OPOrg on DEMO_LeaveApply.fCreateDeptID = SA_OPOrg optional  join SA_Task SA_Task on DEMO_LeaveApply = SA_Task.sData1 where SA_Task.sStatusID = 'tesFinished' AND SA_Task.sParent is null AND DEMO_LeaveApply.fStartTime > :begin AND DEMO_LeaveApply.fStartTime < :end order by SA_OPOrg.sCode asc时出错!
com.justep.report.exception.ReportServerException: 报表数据获取失败
        at com.justep.report.controller.DataController.execute(Unknown Source)
        at com.justep.report.controller.GenericControllerChain.execute(Unknown Source)
        at com.justep.report.controller.InitController.execute(Unknown Source)
        at com.justep.report.controller.GenericControllerChain.execute(Unknown Source)
        at com.justep.report.Servlet.a(Unknown Source)
        at com.justep.report.Servlet.doPost(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:595)
Caused by: com.justep.report.exception.ReportServerException: 执行ksql:select DEMO_LeaveApply.fCreateDeptName as fCreateDeptName,DEMO_LeaveApply.fCreatePerName as fCreatePerName,SA_OPOrg.sCode as sCode,case when DEMO_LeaveApply.fLeaveTypeName = '休假' then DEMO_LeaveApply.fLeaveDays else 0 end as vacation,case when DEMO_LeaveApply.fLeaveTypeName = '出差' then DEMO_LeaveApply.fLeaveDays else 0 end as travel,case when DEMO_LeaveApply.fLeaveTypeName = '病假' then DEMO_LeaveApply.fLeaveDays else 0 end as sick,case when DEMO_LeaveApply.fLeaveTypeName = '事假' then DEMO_LeaveApply.fLeaveDays else 0 end as leaveApply,case when DEMO_LeaveApply.fLeaveTypeName = '产假' then DEMO_LeaveApply.fLeaveDays else 0 end as maternity,DEMO_LeaveApply.fStartTime as fStartTime from DEMO_LeaveApply DEMO_LeaveApply  optional  join SA_OPOrg SA_OPOrg on DEMO_LeaveApply.fCreateDeptID = SA_OPOrg optional  join SA_Task SA_Task on DEMO_LeaveApply = SA_Task.sData1 where SA_Task.sStatusID = 'tesFinished' AND SA_Task.sParent is null AND DEMO_LeaveApply.fStartTime > :begin AND DEMO_LeaveApply.fStartTime < :end order by SA_OPOrg.sCode asc时出错!
        at com.justep.report.controller.DataController.a(Unknown Source)
        at com.justep.report.controller.DataController.a(Unknown Source)
        ... 20 more
Caused by: java.lang.Exception
        ... 22 more

QQ截图20131011181327.png

50

主题

168

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
QQ
发表于 2014-5-13 00:02:33 | 显示全部楼层
好贴!

240

主题

1415

帖子

2306

积分

金牌会员

批判主义者

Rank: 6Rank: 6

积分
2306
QQ
发表于 2014-5-13 08:41:50 | 显示全部楼层
能贴 牛呀
如果我说对了 请别忘记点赞.

9

主题

29

帖子

126

积分

初级会员

Rank: 2

积分
126
QQ
发表于 2014-7-24 14:36:46 | 显示全部楼层
收藏
点评回复

使用道具 举报

104

主题

308

帖子

566

积分

高级会员

Rank: 4

积分
566
QQ
发表于 2015-7-27 17:38:47 | 显示全部楼层
//找到要被过滤数据的data组件
        var data = justep.xbl("dataMain");
        //找到去过滤其他数据的data组件
        var data2 = justep.xbl("filterData");
         // 定义要过滤的ksql的条件语句
        var filter = "";
        //判断是否有需要过滤的数据
        if (data2.getValue('TName').trim() != '') {      //模糊过滤字段‘fCGMC’
                filter += " KJ_Reward.fCGMC like '%" + data2.getValue('TName') + "%' and";
        }
        filter += " 1=1";
         //为被过滤数据设置过滤条件
        data.setFilter("filter", filter);
        // 刷新就可以生成过滤后的结果了。
        data.refreshData();


KJ_Reward是什么啊???

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2019-2-16 21:59 , Processed in 0.148084 second(s), 28 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表