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的老師也幫我看了,說是平臺的一個缺陷,已經提交到平臺開發組解決。