JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java Tools  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
己加入精華區
by koji at 2007-04-08 23:02
本主題所含的標籤
無標籤
作者 [JavaTool 教學] JasperServer 的介紹 [精華]
wahu





發文: 115
積分: 2
於 2007-04-08 22:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
看到在這裡寫Open Source工具的介紹可以拿到積分的公告, 那我也來貼一篇JasperServer的介紹好了

官方網站 http://www.jaspersoft.com/
下載地點 http://www.jaspersoft.com/
目前版本 1.2
或是參考我的 blog : http://wahu123.blogspot.com/

我將會分為以下章節介紹:

JasperServer introduction
i-Report
Uses i-Report and JasperServer together
Use Java persistence & ejb 3.0 entity classes as i-Report datasource
use Custom Data Source in JasperServer


wahu edited on 2007-04-08 23:16
reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
wahu





發文: 115
積分: 2
於 2007-04-08 22:58 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
JasperServer:

很多人用jasperreport 都是透過i-Report來設計report的畫面, 再用jasperreport 的API來呼叫使用

那jasperserver有什麼用途呢?

jasperserver 可以幫你管理帳號, 以及使用report的權限, 還能訂閱report, 自動產生report, 透過email 送給user, 或是讓使用者自行選擇要產生pdf, excel, rtf 等報表格式

而jasperserver 也是Jaspersoft BI suite 的一部份
你可以單獨使用jasperserver, 或是將來搭配Jaspersoft BI suite一起使用, 是一個很好的免費BI解決方案


wahu edited on 2007-04-08 23:51
reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
wahu





發文: 115
積分: 2
於 2007-04-08 23:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
i-Report:

我們可以透過 i-Report 來設計報表, 一般常用的方法是將設計的報表存為 .jrxml, compile 為. jasper 檔, 然後其他主程式透過jasperrerpot 的API 來使用這個 .jasper file. 然而我們的作法是要將.jrxml 放入jasperserver 內使用

不管哪種作法, 用i-Report 來設計報表的方式是一樣的

網路上介紹i-Report的文章很多, 因為我文章主要是要介紹jasperserver, 所以也不多加介紹i-Report了

簡單描述如何使用i-Report
1. 在Options 的 classpath 中設定你的library (例如 jdbc driver)

2. 在Data 的 "連結/資料來源" ("Connections/Datasources") 設定你的資料來源

3. 在Data 的 "報表查詢" 中的 Report Query Tab 中寫下你的 SQL (如果你不喜歡寫SQL, 你也可以用JavaBean Data Source, 然後再透過Custom Data Source 傳回結果)

4. 透過 item 3 的SQL 指令, 你可得到資料庫欄位, 選擇你要的欄位, 這些欄位將會出現在Library 視窗的 "Fields" 節點中

5. 然後透過drag & drop 的方式將這些Fields 放到你的 report 設計表單中, 也就是設計你的report將來要如何呈現

6. 如果希望你的report 中能讓使用者輸入些參數, 你可以在 Library 視窗的 "Parameters" 節點中加入你的參數, 在後在查詢的SQL 中使用這些參數


reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
wahu





發文: 115
積分: 2
於 2007-04-08 23:04 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Uses i-Report and JasperServer together:

我們可以透過 i-Report 來設計report, 然後放在Jasperserver 上, 讓 user 存取報表

簡單設定如下:
1. Setup JasperServer plug-in in i-Report
2. Set jdbc driver in i-Report Options/classpath
3. Set db connection in i-Report Data/Connections/Datasources
4. Write SQL in Data/Report Query
5. Get fields from Library windows
6. deploy your report to jasperserver (透過jasperserver plug-in 或是jasperserver 的管理介面)

比較需要注意的是
1. i-Report上的 parameter, 在jasperserver 上必須另外設定InputControl, 而InputControl 的名字就須取的跟parameter 一模一樣
2. 從jasperserver 1.1 版起, InputControl 也可以設定為從資料庫中抓資料, 成為下拉選單, 作法是在Reporsitory Management 設定一個Query, 然後再將這個Query 連結到InputControl 就可以了


reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
wahu





發文: 115
積分: 2
於 2007-04-08 23:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Use Java persistence & ejb 3.0 entity classes as i-Report datasource:

簡單的報表, 可以直接用SQL來寫, 但是複雜的報表, 可能就需要寫程式了. 這時可以考慮使用Custom Data Source.

很多人都是用jdbc 或 hibernate來寫Jasper report 的 Custom Data Source, 但我想用EJB 3.0 的 JPA 來寫, 也是不錯的一個選擇, 畢竟它是屬於Java EE 5 的一個標準

我是用Netbeans 5.5 & Oracle 資料庫 (注意: 要用最新的oracle 10.2.xx jdbc driver, 否則你無法在netbeans db explorer 中看到db tables)

1. In the Netbeans 5.5 Runtime windows, add an Oracle driver

2. connect your db in the netbeans db explorer

3. In netbeans 5.5 menu, select New File/Persistence/Entity Classes from Database

4. Generate entity classes from the tables

5. 接下來就是用JPA 的API 來寫Query, 然後將其包在Custom Data Source, 最後再回傳給i-Reort 或 jasper server.

簡單範例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class ProjectsByExemptionDataSource implements JRDataSource {
 
  private Vector data = new Vector();
  private int index = -1;
  Map ds;
 
public ProjectsByExemptionDataSource(Map parameterValues) {
  String exemptionNumber = (String)parameterValues.get("Exemption");
  EntityManagerFactory emf =  Persistence.createEntityManagerFactory("myPU");
  EntityManager em = emf.createEntityManager();
  data = getProjectsByExemption(exemptionNumber, em);
  em.close();
  emf.close();
}
 
private Vector getProjectsByExemption(String exemptionNumber, EntityManager em) {
  Vector vector = new Vector();
  Query query = em.createNamedQuery("Pdmproject.findByNumber");
  query.setParameter("wtdocumentnumber", exemptionNumber);
  List projects = query.getResultList();
  for (Object obj : projects) {
    vector.add(obj);
  }
  return vector;
}
 
public boolean next() throws JRException
{
  index++;
  return (index < data.size());
}
 
public Object getFieldValue(JRField field) throws JRException
{
  Object value = null;
  String fieldName = field.getName();
  Pdmproject dto = (Pdmproject)data.elementAt(index);
  if (dto == null)
    return null;
  if (fieldName.equals("projectnumber"))
    value = dto.getProjectnumber();
  return value;
}


6. 另外寫一個Factory class (ex. SampleJRDataSourceFactory) 然後在這個class 中寫一個static method (ex. createDatasource), 於這個method 中回傳你的Custom Data Source

7. 於 i-Report 的 Data 的 "連結/資料來源" 中選擇"Custom JRDataSource", 填入item 6 中的Factory class 以及method.

8. 最後在 i-Report 的 Data 的 "報表查詢" 中設定你的 JavaBean Data Source 為回傳的Java Bean, 然後得到Fields, 作為報表設計用


wahu edited on 2007-04-17 15:17
reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
wahu





發文: 115
積分: 2
於 2007-04-08 23:15 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Use Custom Data Source in JasperServer:

我們已經知道如何使用Custom Data Soruce 了, 那又要如何將custom data source 放入jasperserver 中使用呢?

我們需要額外幾個動作
1. 多寫一個wrapper 程式 CustomDataSourceService
2. 在 applicationContext.xml 中註冊
3. deploy你的report到Jasperserver 裏, 同時設定 Data Source 為 Bean Data Source

所以我們的程式如下
1
2
3
4
5
public class CustomDataSourceServiceFactory {
    public ReportDataSourceService myDataSourceService() {
        return new CustomDataSourceService();
    }
}


然後多個wrapper 程式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class CustomDataSourceService implements ReportDataSourceService {
 
    JRDataSource ds;
 
    public CustomDataSourceService() {
        this.ds = new CustomDataSource();
    }
 
    public CustomDataSourceService(JRDataSource ds) {
        this.ds = ds;
    }
 
    public void closeConnection() {
    // Do nothing
    }
 
    public void setReportParameterValues(Map parameterValues) {
        this.ds =new CustomDataSource(parameterValues);
        parameterValues.put(JRParameter.REPORT_DATA_SOURCE, ds);
    }
}


然後在applicationContext.xml 註冊
<bean id="CustomDataSourceServiceFactory" class="mypackage.CustomDataSourceServiceFactory" singleton="true"/>

最後 Deploy 你的 report到 jasperserver 後, 需設定Bean Data Source
Bean Name: CustomDataSourceServiceFactory
Beam Method: myDataSourceService


wahu edited on 2007-04-17 15:17
reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
worookie

Small Ship

版主

發文: 2092
積分: 21
於 2007-04-08 23:43 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請教一下, JasperReports 有支援 MS Word (.doc) 的格式嗎?
我看他的說明, 最接近的好像只有 rtf 哩.


reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
wahu





發文: 115
積分: 2
於 2007-04-08 23:55 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
喔, 沒錯, 它是只支援 .rtf, 不是 .doc

因為在jasperserver 中, 他選擇格式的icon 是MS-word 的icon, 所以我之前文章就直接寫成word, 我已將它修正了


reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
wahu





發文: 115
積分: 2
於 2007-04-12 17:11 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
"Multi-select List of Values" input control in JasperServer:

Jaserserver 還有個好處是它會讀取你定義的 InputControl, 然後自動產生Input UI, 讓使用者輸入值後, 對應到你 report 的 parameter.

在Input control 中, 我們可以用Single select & multi-select list of values

如果是Single select, 我們必須
1. Define report patameter class type as "java.lang.String"
2. Create "Single Select List of Values" inputcontrol in jasperserver
3. In custom data source, get the parameter value as "java.lang.String" type

如果是Multiple select, 我們必須
1. Define report patameter class type as "java.util.Set"
2. Create "Multi-select List of Values" inputcontrol in jasperserver
3. In custom data source, get the parameter value as "org.apache.commons.collections.set.ListOrderedSet" type


reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
brucetsay





發文: 24
積分: 1
於 2007-08-06 16:46 user profilesend a private message to usersend email to brucetsayreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
拜讀您的介紹,自己抓了一份jasper server下來試裝,
感覺雖然不至於拿他與一些像是Oracle出的BI產品相比較,但基本功能齊備,是個好產品。
有二個問題請您不吝指導。

1.
因為習慣用war管理專案,所以下載的是1.2.1版,最新版的war沒有找到,雖然說明文件上有,
不知道您是用ant build,或是真的存在最新版的war?

2.
Oracle或M$的產品中,有一個重要的功能是,不同權限(角色)使用者觀看同一張 report or cube 時,會看到不同資料(相同format),
比方說 [銷售業績報表]

業務員A   :只看到A本人資料
業務員B   :只看到B本人資料
業務一科科長:只看到業務一科同仁資料,二科、三科....資料看不到
總經理   :全公司員工資料

翻遍說明文件與google找不到相關資訊,不知道您是不是有這方面的心得,或是這部分仍然需要自行coding?


reply to postreply to post
生死去來 | 棚頭傀儡 | 一線斷時 | 落落磊磊
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
wahu





發文: 115
積分: 2
於 2007-08-15 19:25 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我們之前是用jasperserver 1.2.0版, 也是用war檔 deploy

第二個問題, 我目前也沒有看到可以設定的功能


reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
boxnoodle





發文: 8
積分: 0
於 2007-10-26 14:56 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請問下如何編譯和運行JasperServer 的的源碼?我看網路上說走下面這三步,可是我第一步就出錯了
cd ji-x.x.x-src/jasperserver
mvn clean install

cd ji-x.x.x-src/jasperserver/jasperserver-repository-hibernate/build-db
mvn clean install

cd ji-x.x.x-src/jasperserver/jasperserver-unit-test
mvn clean install
之後會生成jasperserver.war文件?


reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:boxnoodle]
wahu





發文: 115
積分: 2
於 2007-12-01 16:52 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
boxnoodle wrote:
請問下如何編譯和運行JasperServer 的的源碼?我看網路上說走下面這三步,可是我第一步就出錯了
cd ji-x.x.x-src/jasperserver
mvn clean install

cd ji-x.x.x-src/jasperserver/jasperserver-repository-hibernate/build-db
mvn clean install

cd ji-x.x.x-src/jasperserver/jasperserver-unit-test
mvn clean install
之後會生成jasperserver.war文件?


不了解你為何要自己編譯source code?
如果只是要用jasperserver, 直接下載安裝程式, 或是war 檔即可.


reply to postreply to post
作者 Re:[JavaTool 教學] JasperServer 的介紹 [Re:wahu]
jiechu





發文: 6
積分: 0
於 2008-08-19 11:39 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
怎样操作inputcontrol 连接 query呢? 能不能给个截图?

reply to postreply to post
明月几时有,把酒问青天
» JWorld@TW »  Java Tools

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8