X5的主从报表制做 php
这两天学习X5平台对照着手册练习主从报表的时候出现一些问题,因此写个博客记录下来,本篇博文重点放在建立主从报表上,对于其余步骤一代而过,因此若是有人看到的话不要喷我写的不详细,嘿嘿~~ java
首先咱们要进行数据建模,这是必须的,这里我用商品表做为主表和商品价格表(商品不一样日期的价格)做为从表,以fGoodsID做为外键,关联主从表,进行数据建模。 sql
这里须要你自行建立功能模块去输入一些信息,这里我就不浪费文字去按步骤一步一步写了(我不吝啬的其实)。 apache
下面开始进行报表的建立了: tomcat
一、 新建action: app
报表Action有两种类型,一种是KSQLAction,平台针对报表特别提供的,简单易用的Action;另外一种是Action,这是通用的Action,当KSQLAction不能知足需求时使用。 函数
打开模块中的逻辑模块中的action文件,分别添加商品信息以及商品价格的KSQLAction,而后添加相关信息,如图: 工具
注意:这里的procedure属性要选择系统提供的“ksqlQueryProcedure”。 布局
ksqlQueryProcedure中有四个参数: 学习
l 参数ksql是查询报表数据的ksql语句,语句中可使用占位符变量,即用在变量名前加冒号的方式标记;
l 参数variables指定ksql语句中的参数的值,能够从界面传入;
l 参数dataModal须要指定ksql语句中概念所在的数据模块;
l 参数fnModal指向ksql语句中使用的函数模块,若是没有使用函数,不用赋值。
二、 新建process文件:
建立一个process文件,在动做设置中添加上你上面建立的两个KSQLAction。
三、 建立w文件:
这里我建立一个空白页,一步一步进行设计,如图:
从右侧工具栏中,拖入一个名称为report的报表组件,而后设置左下角src属性,这时开发工具的左侧导航栏会生成一个xls文件。
而后拖入两个名称为reportData的数据源组件到数据模型中,分别设置其id(能够任意起一个)以及source属性设置为以前在逻辑模块中添加的两个KSQLAction(分别为goodsReportAction’和priceReportAction)。
以后就能够右键点击“切换到报表设计”进入excel进行报表的设计了:
如上图:
按照你想要的布局输入你要显示的字段名称以及根据数据源id引用对应的业务字段,上面是我设计的一个比较挫的布局,我的感受还能够了,为了显示清晰我顺便给每一个字段名加了一个背景色。
这里有几个须要注意的点:
1)、在商品颜色名称(主表)的引用字段中要使用select()函数,使其纵向循环输出数据,而且设置其属性(添加批注)is-master-dataset:true,这里文档让其添加individual-table:true,表示该区域独立成一张表,不知道为啥在我这不行,会报错,不知道是个人问题仍是原本就不该该加这个批注。错误信息以下:
[ERROR] 2013-07-18 23:35:29,737 com.justep.report.controller.ReportController - 报表执行失败
null
com.justep.report.exception.ReportServerException
at com.justep.report.controller.ReportController.execute(Unknown Source)
at com.justep.report.controller.GenericControllerChain.execute(Unknown Source)
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: java.lang.NullPointerException
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:991)
at java.lang.Double.parseDouble(Double.java:482)
at com.justep.report.core.XReportHelper.a(Unknown Source)
at com.justep.report.core.XReportHelper.executeXReport(Unknown Source)
... 22 more
2)、在商品价格(从表)的 引用字段中这样写:r2.select(r2.fPrice,'fGoodsID=r1.GO_Goods'),这里select的第二个参数表示从表的外键fGoodsID关联等于主表的主键(这里KSQL语句获取主键直接用数据源.概念名,不能使用fID)。
最后添加功能,设置权限访问便可查看效果,以下图是我制做的一个效果:
在这里说明下:(当前的X5平台为5.2.4版本版本)我尝试求各个商品的平均价格,可是并无成功,后来我解决未果,将这个问题发到X5平台的论坛里(http://bbs.justep.com/forum.php?mod=viewthread&tid=48836),X5的老师也帮我看了,说是平台的一个缺陷,已经提交到平台开发组解决。