X5的主从报表制作练习

X5的主从报表制作

这两天学习X5平台对照着手册练习主从报表的时候出现一些问题,所以写个博客记录下来,本篇博文重点放在创建主从报表上,对于其他步骤一代而过,所以如果有人看到的话不要喷我写的不详细,嘿嘿~~

首先我们要进行数据建模,这是必须的,这里我用商品表作为主表和商品价格表(商品不同日期的价格)作为从表,以fGoodsID作为外键,关联主从表,进行数据建模。

这里需要你自行创建功能模块去输入一些信息,这里我就不浪费文字去按步骤一步一步写了(我不吝啬的其实)。

下面开始进行报表的创建了:

1、  新建action:

报表Action有两种类型,一种是KSQLAction,平台针对报表特别提供的,简单易用的Action;另一种是Action,这是通用的Action,当KSQLAction不能满足需求时使用。

       打开模块中的逻辑模块中的action文件,分别添加商品信息以及商品价格的KSQLAction,然后添加相关信息,如图:


注意:这里的procedure属性要选择系统提供的“ksqlQueryProcedure”。

ksqlQueryProcedure中有四个参数:

l         参数ksql是查询报表数据的ksql语句,语句中可以使用占位符变量,即用在变量名前加冒号的方式标记;

l         参数variables指定ksql语句中的参数的值,可以从界面传入;

l         参数dataModal需要指定ksql语句中概念所在的数据模块;

l         参数fnModal指向ksql语句中使用的函数模块,如果没有使用函数,不用赋值。

 

2、  新建process文件:

创建一个process文件,在动作设置中添加上你上面创建的两个KSQLAction。

3、  创建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的老师也帮我看了,说是平台的一个缺陷,已经提交到平台开发组解决。

转载于:https://my.oschina.net/u/912681/blog/145767

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值