CSVDataAdapterのパスの指定方法

1,049 views
Skip to first unread message

Keisuke Yamanaka

unread,
Mar 5, 2013, 5:59:21 PM3/5/13
to japan-jasperse...@googlegroups.com
おはようございます,山中です。

iReportとJasperServerを学習しているのです
が,
JasperServer上で指定したcsvファイルを読み込んでjrprintとpdfの生成において
困っている部分があります。お知恵を貸していただけないでしょうか。

■やりたいこと

・JasperServerのローカルディスク上にあるcsvファイルを読み込んでjrprintとPDFを生成すること
・csvファイルは,指定したパス・ファイル名で読み込む

■現在困っていること

・CSVDataAdapterとcsvファイルのパス・ファイル名の指定方法がわからない。
・サンプルでも使われているCSVDataAdapterを試してみたが、
  csvファイルの内容が読み込まれないままjrprintとPDFが生成されてしまう
・生成時にエラーは発生せず,パスのパラメータに不当な値(repo:/aaa/aaa など)を入れてもエラーがでない
  - CSVDataAdapterは,jrxmlからSubDatasetとして指定し,SubDatasetのデータはテーブルから読み込み
  - csvファイルはCSVDataAdapterから指定

■利用しているバージョンや実行環境

・iReport 5.0.1 on Windows 7
・JasperServer コミュニティ版 5.0.0 on CentOS 6.2


■調べたこと

・jaspersoftのコミュニティとインストール時のサンプルから,
  JasperServer上でcsvファイルを読み込むときには,
  CSVDataAdapterとなるxmlファイルとcsvファイルを拡張子xmlにしたファイルを
  アップロードして読みこませればいいことが判明
  cf)http://community.jaspersoft.com/questions/802580/how-create-excel-data-source-jasperreports-server

■試してみたこと
・iReport上でjrxml,CSVDataAdapterを用いてcsvファイルの内容を読み込み,帳票を生成 → 成功
  - jrxmlからCSVDataAdapterを絶対パスで指定
  - CSVDataAdapterからcsvファイルを相対パスで指定

・iReportにおいて自分で作成したjrxml・CSVDataAdapter・csvファイルを,
  iReportを用いてJasperServerにアップロードして帳票を生成 → 失敗
  - CSVDataAdapterはrepo:/Reports/CSVImportTest/Adapterと指定
  - csvファイルはrepo:/Reports/CSVImportTest/CSVと指定

■ディレクトリ構成
-
 |-Analysis Components
 |-Content Files
 |-Data Sources
 |-Reports
     |
     |--CSVImportTest(*現在の作業ディレクトリ)
          |
          |--Adapter(CSVDataAdapterを記述したxml)
          |--CSV(csvファイルの内容を記述したxml)
          |--CSVImportTest
               |
               |-Main jrxml(jrxmlファイル)
               |--Input Controls
               |--Resources


■ログ
tomcatの/webapps/jasperserver/WEB-INF/logs/jasperserver.logには
記録なし。



現状は,以上のようになっております。
パスの指定の仕方,もしくは,JasperServer上でcsvファイルを読みこませるときに,
別の方法があれば教えていただきたいです。

よろしくお願いします。

荒川雄介

unread,
Mar 6, 2013, 9:35:36 PM3/6/13
to japan-jasperse...@googlegroups.com
JasperReports Serverは勉強中の荒川です。

DataSourceの登録にCSVの項目が無いようですね。
CSVを読み込んでくれるJDBCドライバを探して組み込んでやれば、
とりあえず動くのかもと思っていたりします。


JasperReports Server Ultimate Guide 5.0
には、データソースにCSVの記述(p75)があるので素直に取り込めるとは思うのですが。

尚、このマニュアルはJaspersoft Comunity に登録すればDownload可能です。
別に無料ですので登録しておくといいでしょう。

もうちょっと探ってみます。

荒川雄介

unread,
Mar 7, 2013, 9:42:23 PM3/7/13
to japan-jasperse...@googlegroups.com
おはようございます。
結局、同じように迷宮に迷い込んでいる荒川です。

JasperReports Server Ultimate Guide 5.0
には、データソースにCSVの記述(p75)があるので素直に取り込めるとは思うのですが。

CSVの記述をきっちり読みましたが、「CSVはこのJavaクラスで扱えるよ 」といった記述程度でした。(T T
だから「GUIでどう扱うねん!」と突っ込みを入れながら、
山中さんの示した
を熟読中です。

荒川雄介

unread,
Mar 8, 2013, 3:23:45 AM3/8/13
to japan-jasperse...@googlegroups.com
You have some examples using CSV as a data adapter in the standard Jasper Server Samples (under /Reports/Interactive).
と書いてあったから、Reports/interactive にあるCSVデータをレポートにするjrxmlファイルを作って試してみます。

 cf)http://community.jaspersoft.com/questions/802580/how-create-excel-data-source-jasperreports-server

Keisuke Yamanaka

unread,
Mar 10, 2013, 9:27:33 AM3/10/13
to japan-jasperse...@googlegroups.com
荒川さん

見ていただいていたのに,ありがとうございます。
お返事するのが遅くなってしまい,申し訳ありません。
今日なんとか,Report/Interacticeにある方法をもとに動かすことができました。

まだ,手順の整理中なのですが,
整理が完了し次第,アップします。



2013年3月8日金曜日 17時23分45秒 UTC+9 荒川雄介:

Keisuke Yamanaka

unread,
Apr 15, 2013, 7:14:38 PM4/15/13
to japan-jasperse...@googlegroups.com
山中です。

遅くなってしまい、申し訳ありません。
CSVDataAdapterを使って、Jasper Server上でcsvファイルを読み込み
帳票を生成する方についてです。

まず、フォルダの構成は以下のようになります。
HogeFolder(サンプルではReport/
Interactive/CSVDataAdapter)
    |--Adapter(CSVDataAdapterを記述したxml。 サンプルではReport/Interactive/CSVDataAdapter)
    |--CSV(csvファイルの内容を記述したxml。サンプルではReport/Interactive/CSVDataAdapter)
    |--ReportUnit(レポートユニット。サンプルではReport/Interactive/CSVDataAdapter)
       |
       |--Main jrxml(jrxmlファイル。サンプルではReport/Interactive/CSVDataAdapter)
       |--Input Controls
       |--Resources

作成するものは、jrxmlとadapterの2つです。
読み込ませたいcsvファイルは拡張子をxmlにして用意します。

adapterは以下の内容で作成します。

<?xml version="1.0" encoding="UTF-8"?>
<csvDataAdapter class="net.sf.jasperreports.
data.csv.CsvDataAdapterImpl">
        <name>csv</name>
        <!-- JasperServer上の読み込ませたいcsvのファイル名を指定
         このファイル名は、iReportのRepositoryBrowserで指定したいファイルを右クリックすると
         見られるプロパティから参照できる -->
        <fileName>repo:/path/to/your/csv.xml</fileName>
        <!-- csvのフィールドの区切り文字の設定。この例では\t -->
        <fieldDelimiter>&#09;</fieldDelimiter>
        <!-- csvの改行文字の設定。この場合はCRLF -->
        <recordDelimiter>&#13;&#10;</recordDelimiter>
        <useFirstRowAsHeader>false</useFirstRowAsHeader>
        <queryExecuterMode>true</queryExecuterMode>
        <datePattern>yyyyMMdd</datePattern>
        <columnNames>商品コード</columnNames>
        <columnNames>商品名</columnNames>
        <columnNames>受注日</columnNames>
        <columnNames>受注金額</columnNames>
</csvDataAdapter>


jrxmlでは、subdatasetを作成します。
subdatasetの詳細は、jrxmlに直書きします。

jrxmlでは、読み込むadapterの指定と、
読み込んだデータの内容をテーブルで表示します。


読み込むadapterの指定は以下のようになります。

まず、subdatasetを追加します。
次に、jrxmlのxmlの編集モードにして以下のように
テーブルの部分を修正します。

修正は以下のように行います。

 <subDataset name="Table Dataset 1" whenResourceMissingType="Error" uuid="b942ac65-dc78-4aec-bcc9-55149f314195">
        <!-- adapterの指定。csvdataadapterのロケーションはiReportのRepositoryBrowserで指定したいファイルを右クリックすると見られるプロパティから参照できる -->
        <property name="net.sf.jasperreports.data.adapter" value="repo:/reports/SequenceTest/sequeceTestAdapter"/>
        <queryString language="csv">
                <![CDATA[]]>
        </queryString>
        <!--  読み込むcsvのカラム名 adapterの記述と合わせる-->
        <field name="商品コード" class="java.lang.Integer"/>
        <field name="商品名" class="java.lang.String"/>
        <field name="受注日" class="java.lang.Date"/>
        <field name="受注金額" class="java.lang.Integer"/>
</subDataset>


読み込んだデータの内容を以下のようにします。
まず、パレットからテーブル(表)を挿入します。
Table作成時に設定するconnectionはDon’t use any connection or data sourceとします。

テーブルの挿入先はsummaryにしました。
なぜかはわからなかったのですが、
detailではうまくできなかったので。

次に、挿入したら、jrxmlのxmlの編集モードにして以下のように
テーブルの部分を修正します。
なお、csvとのバインドは長いので、略しています。

<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" whenNoDataType="
AllSectionsNoDetail">
        <!-- subDatasetの値は先程作成したsubDataset -->
        <datasetRun subDataset="Table Dataset 1" uuid="8fd0b30c-518b-4f8d-a52e-ef893562ff21">
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
        </datasetRun>
        <!-- 以下、csvとのバインド -->
        <jr:column width="60" uuid="be0991a7-fb7b-46b0-a608-9972fea89e1e">
                <jr:columnHeader style="table 1_CH" height="30" rowSpan="1">
                        <staticText>
                                <reportElement uuid="e33d7bb9-a84c-4202-bba6-e1519913de57" x="0" y="0" width="60" height="30" isPrintWhenDetailOverflows="true"/>
                        <textElement>
                                <font fontName="MS 明朝" pdfFontName="HeiseiMin-W3" pdfEncoding="UniJIS-UCS2-H" isPdfEmbedded="true"/>
                        </textElement>
                        <text><![CDATA[商品コード]]></text>
                        </staticText>
                </jr:columnHeader>


作成は以上となります。
これをiReportからアップロードすると
サーバ上で生成できます。


また、ここまではJasperServer上でadapterを使ってcsvを読み込む
方法ですが、
iReport上でadapterを使ってcsvを読み込むには、
jrxml・adapter・csv(拡張子はxml)を同じフォルダに入れて、
adapterで、csvを相対パスで指定します。

以上となります。
よろしくお願いいたします。



2013年3月10日日曜日 22時27分33秒 UTC+9 Keisuke Yamanaka:
Reply all
Reply to author
Forward
0 new messages