logo

サイト内検索
ココログ最強検索 by 暴想

最近のトラックバック

無料ブログはココログ

« Reports Connect for Salesforce ユーザー外字、IPAmjフォントの使用法 | トップページ | Reports Connect for Salesforce ダウンロード画面のカスタマイズ »

Reports Connect for Salesforce:Subreportで複合的な帳票を作成

Reports Connectサポートフォーラムを公開しました。

技術的質問はこちらへどうぞ

今回の記事で作成したjrxmlファイルは↓からダウンロードできます。

accounts.jrxml

contacts.jrxml

optunities.jrxml

Reports Connect for Salesforceの使い方シリーズも5回目になりました。
今回は、Subreportの設定方法に関して解説します。
なお、Reports Connect for Salesforceの基本的な使用法に関しては、こちらの記事から順番に読んでみてください。

iReportではSubreportを使用する事により、リポート上に複数のリポートを組み合わせて配置する事ができます。

Rc3dev00
たとえば、Salesforceの標準オブジェクトで言うと、取引先、取引先責任者、商談の関係は以下のようになっています。

Rc3dev01
取引先から見ると、1個の取引先に対してn個の取引先責任者およびn個の商談が関連づけられています。
これを、取引先を中心にして関連する取引先責任者と商談のリストを1枚で表示するレポートをSubreportの機能を使用して作成してみます。

Rc3dev01_2

まず、新規帳票として「取引先商談」を作成しました。

Rc3dev01_1
SOQLとしては、以下のようなサブクエリーを持った構造のものを使用します。

 SELECT Name, Type, Industry, Rating,
    (SELECT Name, Phone, Email, Title FROM Contacts),
    (SELECT Name, StageName, Amount, CloseDate FROM Opportunities)
  FROM Account

SOQLを設定して、データの確認ボタンを押すと、今回は3つのFile CSV Datasourceが出力されます。

Rc3dev02
一つ目が親のReport用、他の二つが子のReport用のDatasourceです。
この3つのDatasourceをそれぞれダウンロードします。

次にiReportを使用して、三つのDatasourceを取り込みます。

File CSV Datasourceの取り込み方法は、こちらの記事を参考にしてください。

次に、まず一つ目の子供のReport用の ContactsからReport作成を始めます。
今回は、Wizardを使用せずに、ファイル→Newと開いてBlank A4 Landscapeのテンプレートを選択して、Open This Templateボタンを押します。

Rc3dev02_1
すると、A4横のブランクの空のReportが開きます。

Rc3dev02_2

次に、先ほど取り込んだContactsのDatasourceを使用してFieldを作成します。
メニューの直下の現在のDatasourceをContactsに設定し、現在作成中のレポートのタブのPreviewの右にあるReport Queryボタンを押し、開いたダイアログの、CSV DatasourceのタブのGet fields from datasourceボタンを押すと、このデータソースからFieldを取り込む事ができます。

Rc3dev02_3

Fieldを取り込むと、画面左のReport InspectorのFieldsの中に取り込んだFieldが表示されます。
これをすべて選択して、ReportのDetail 1のbandへドラッグアンドドロップします。

Rc3dev02_4

この時点ですでにContactsのReportは一応Preview可能な状態まで出来ていますが、この後実用的なデザインにするために、不要なband(Title,Column Footer,Page Footer,Summary)を消して高さを調整し、Page Headerに「取引先責任者」というStatic Textを追加しました。

Rc3dev03_1

なお、この他にいつものように、languageをJavaに設定、漢字用のFontの設定等を行います。そのあたりの方法についてはこちらの記事を参考にしてください。

これで、contactsのReportは出来上がりです。

同様に、OptunitiesのReportも作成します。

Rc3dev03_2

さて、ここで親のReportの作成に取り掛かります。

同様にA4横の空のReportの状態から、親のデータソースからFiledを取り込んで、Page HeaderのbandにName,Type,Industory,RatingのFiledを配置しました。

また、Page Headerとdetail以外のbandを削除し、detailのフィールドを最大限広げておきます。

Rc3dev04_3

残りのField、contactsとoptunitiesはサブクエリーからContactとOptunityのコレクションオブジェクトが返るFieldです。そこで、このFieldのプロパティField Classを、java.lang.Objectに変更します。

Rc3dev04_4_2

同様に、Field OptunitiesのField Classも変更してください。

次に、Detail上をFrameで縦に二つのエリアに分割し、そこにパレットのウィンドウからSubreportをドラッグアンドドロップします。

Rc3dev04_2

すると、Subreport Wizardのダイアログが開きます。

WizardのStep1では、Use an existing reportをチェックして先ほど作成したContactsのjrxmlファイルを指定します。

Rc3dev05

Step2ではUse a JRDatasource Expressionを選択し、横のボタンを押します。

Rc3dev06

Expression Editorが開きますので、ここに以下のような記述を設定してください。

$F{Contacts}!=null&&!$F{Contacts}.equals("null")?new JRBeanCollectionDataSource((Collection)$F{Contacts}):null

Rc3dev07_2
これは、ContactsのFieldに返ってくるContactオブジェクトのコレクションを、このサブリポートがDatasourceとして使用するための指定です。コレクションの中身が空の時はサブリポートに空値を与えます。
Applyを押して保存します。

この先のStep3、Step4は次へを押してとりあえずWizardを終了します。

できたSubreportは大きさを広げてDetailの上部半分を占める大きさに調整します。

次に、先ほど指定した、JRBeanCollectionDataSourceを参照できるように、Importsの指定を行います。

Report accountsのプロパティのImportsの横のボタンを押して設定を追加します。

開いたダイアログのAddボタンを押して、以下のパッケージを設定してください。

net.sf.jasperreports.engine.data.*

Rc3dev10

次に、Subreportのjrxmlファイルの指定を変更します。SubreportのプロパティのSubreport Expressionの横のボタンを押してExpression Editorを開きます。

開いた状態では、個々の記述は以下のようになっていると思います。

 $P{SUBREPORT_DIR} + "contacts.jasper"

ここの、$P{SUBREPORT_DIR} + の部分を消します。

Rc3dev08

Reports ConnectではSubreportは親のReportと同じフォルダーに保存されるため、上記のような設定にする必要があります。

了解を押して保存します。

同様にして、Subreport OptuinitiesをContactsの下の位置に設定します。

これで、Report accountsができました、この段階で、Previewを押して結果を確認したいところですがPreviewは

  Unable to get value for field 'Contacts' of class 'java.util.Collection'

というエラーになってしまします。

これは、Files CSV Datasourceでは入れ子になったCollectionの構造を表現できないためです。

では、実際に出来上がったjrxmlファイルをReports Connectの帳票オブジェクトに添付して印刷してみましょう。

出来上がった3つのjrxmlファイルを帳票、取引先商談に添付します。

Subreportを使用する場合は、親のjrxmlファイルの名前を「親JRXMLファイル名」に指定してください。

Rc3dev09

出来上がった帳票は、こんな感じ↓

Rc3dev13

今回は、Subreportの作り方を解説するのが目的なので、デザインはパッとしませんが、仕組みは理解できたかと思います。

 

« Reports Connect for Salesforce ユーザー外字、IPAmjフォントの使用法 | トップページ | Reports Connect for Salesforce ダウンロード画面のカスタマイズ »

Force.com」カテゴリの記事

Reports Connect」カテゴリの記事

Salesforce」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1482716/47740926

この記事へのトラックバック一覧です: Reports Connect for Salesforce:Subreportで複合的な帳票を作成:

« Reports Connect for Salesforce ユーザー外字、IPAmjフォントの使用法 | トップページ | Reports Connect for Salesforce ダウンロード画面のカスタマイズ »