メニュー最初の一歩基本的な仕組み機能サンプル
プログラム仕様デザイン仕様機能拡張その他関連製品開発・運営会社 |
データの部分割り当てこのページでは、以下の帳票を作成します。 この帳票には、商品のリストと、承認者のリストという2つの明細が含まれています。 帳票の各部に個別のデータを割り当てることで、このような帳票も実現可能になります。 完成したサンプルが example フォルダ内に以下の名前で含まれています。
帳票定義ファイル: example_dataprovider.rrpt ここでは、商品と承認者に割り当てるサンプルのデータを、以下のように定義します。 // C# // 商品リスト private static DataTable getDataTable(){ DataTable ret = new DataTable(); ret.Columns.Add("HAT_ID", typeof(int)); ret.Columns.Add("TOKUI_NM", typeof(String)); ret.Columns.Add("TOKUI_TANTO_NM", typeof(String)); ret.Columns.Add("HIN_NM", typeof(String)); ret.Columns.Add("HIN_CD", typeof(String)); ret.Columns.Add("SURYO", typeof(Decimal)); ret.Columns.Add("TANKA", typeof(Decimal)); ret.Columns.Add("SHUKKABI", typeof(DateTime)); ret.Rows.Add(1, "○○精密", "担当太郎", "パイロットパンチ", "AAA-BBB-CCC-DDD-1000", 1, 600, DateTime.ParseExact("2011/06/07", "yyyy/MM/dd", null)); ret.Rows.Add(1, "○○精密", "担当太郎", "ガイドプレート", "AIUEO-999.999", 5, 1050, DateTime.ParseExact("2011/06/15", "yyyy/MM/dd", null)); ret.Rows.Add(1, "○○精密", "担当太郎", "イジェクタピン", "1234-5678-9999", 1, 7340, DateTime.ParseExact("2011/06/13", "yyyy/MM/dd", null)); ret.Rows.Add(2, "△△機械", "担当花子", "ブロックダイ", "9999-8888-7777", 10, 1600, DateTime.ParseExact("2011/06/10", "yyyy/MM/dd", null)); ret.Rows.Add(2, "△△機械", "担当花子", "ブランジャ", "ZZZZZ-YYYYY-XXXXX", 5, 800, DateTime.ParseExact("2011/06/10", "yyyy/MM/dd", null)); return ret; } // 承認者リスト private static DataTable getShoninDataTable(){ DataTable ret = new DataTable(); ret.Columns.Add("HAT_ID", typeof(int)); ret.Columns.Add("SHONIN_NM", typeof(String)); ret.Rows.Add(1, "承認一郎"); ret.Rows.Add(1, "承認二郎"); ret.Rows.Add(1, "承認三郎"); ret.Rows.Add(1, "承認四郎"); ret.Rows.Add(2, "承認花子"); return ret; } ' VisualBasic ' 商品リスト Private Function getDataTable() As DataTable Dim ret As New DataTable ret.Columns.Add("HAT_ID", GetType(Integer)) ret.Columns.Add("TOKUI_NM", GetType(String)) ret.Columns.Add("TOKUI_TANTO_NM", GetType(String)) ret.Columns.Add("HIN_NM", GetType(String)) ret.Columns.Add("HIN_CD", GetType(String)) ret.Columns.Add("SURYO", GetType(Decimal)) ret.Columns.Add("TANKA", GetType(Decimal)) ret.Columns.Add("SHUKKABI", GetType(Date)) ret.Rows.Add(1, "○○精密", "担当太郎", "パイロットパンチ", "AAA-BBB-CCC-DDD-1000", _ 1, 600, DateTime.ParseExact("2011/06/07", "yyyy/MM/dd", Nothing)) ret.Rows.Add(1, "○○精密", "担当太郎", "ガイドプレート", "AIUEO-999.999", _ 5, 1050, DateTime.ParseExact("2011/06/15", "yyyy/MM/dd", Nothing)) ret.Rows.Add(1, "○○精密", "担当太郎", "イジェクタピン", "1234-5678-9999", _ 1, 7340, DateTime.ParseExact("2011/06/13", "yyyy/MM/dd", Nothing)) ret.Rows.Add(2, "△△機械", "担当花子", "ブロックダイ", "9999-8888-7777", _ 10, 1600, DateTime.ParseExact("2011/06/10", "yyyy/MM/dd", Nothing)) ret.Rows.Add(2, "△△機械", "担当花子", "ブランジャ", "ZZZZZ-YYYYY-XXXXX", _ 5, 800, DateTime.ParseExact("2011/06/10", "yyyy/MM/dd", Nothing)) Return ret End Function ' 承認者リスト Private Function getShoninDataTable() As DataTable Dim ret As New DataTable ret.Columns.Add("HAT_ID", GetType(Integer)) ret.Columns.Add("SHONIN_NM", GetType(String)) ret.Rows.Add(1, "承認一郎") ret.Rows.Add(1, "承認次郎") ret.Rows.Add(1, "承認三郎") ret.Rows.Add(1, "承認四郎") ret.Rows.Add(2, "承認花子") Return ret End Function // Java // 商品リスト private static DataTable getDataTable() throws Throwable{ DataTable ret = new DataTable(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); ret.setFieldNames("HAT_ID", "TOKUI_NM", "TOKUI_TANTO_NM", "HIN_NM", "HIN_CD", "SURYO", "TANKA", "SHUKKABI"); ret.addRecord().puts(1, "○○精密", "担当太郎", "パイロットパンチ", "AAA-BBB-CCC-DDD-1000", 1, 600, sdf.parse("2011/06/07")); ret.addRecord().puts(1, "○○精密", "担当太郎", "ガイドプレート", "AIUEO-999.999", 5, 1050, sdf.parse("2011/06/15")); ret.addRecord().puts(1, "○○精密", "担当太郎", "イジェクタピン", "1234-5678-9999", 1, 7340, sdf.parse("2011/06/13")); ret.addRecord().puts(2, "△△機械", "担当花子", "ブロックダイ", "9999-8888-7777", 10, 1600, sdf.parse("2011/06/10")); ret.addRecord().puts(2, "△△機械", "担当花子", "ブランジャ", "ZZZZZ-YYYYY-XXXXX", 5, 800, sdf.parse("2011/06/10")); return ret; } // 承認者リスト private static DataTable getShoninDataTable(){ DataTable ret = new DataTable(); ret.setFieldNames("HAT_ID", "SHONIN_NM"); ret.addRecord().puts(1, "承認一郎"); ret.addRecord().puts(1, "承認次郎"); ret.addRecord().puts(1, "承認三郎"); ret.addRecord().puts(1, "承認四郎"); ret.addRecord().puts(2, "承認花子"); return ret; } 今回の例では商品リストのほうが、この帳票にとって主要なデータであると見なします。 つまり、Fillメソッドに渡すデータソースには商品リストのデータを渡します。 この帳票のデザイン上において、 承認者のリストは"group_shonin"という識別子が振られたグループ以下に配置されています。 そこで、このグループに対しては承認者データが割り当てられるようにします。 このような操作は、データプロバイダというオブジェクトを利用することで可能になります。 今回の例のように、あらかじめ用意されたデータを割り当てるならば、 GroupDataProviderというオブジェクトを利用できます。 まず、GroupDataProviderオブジェクトを生成し、GroupDataMapというメンバに、 データを割り当てるグループの識別子をキーとして承認者データを表すデータソースを登録します。 作成したGroupDataProviderオブジェクトはFillメソッドの第2引数に渡します。 "group_shohin"という識別子の振られたGroupは、 "HAT_ID"列をキーとして分割されるグループの子として定義されています。 そこで、承認者データも"HAT_ID"をキーに分割された上で該当するページに割りつけられます。 帳票出力のコードは以下のようになります。 // C# Report report = new Report(Json.Read("report\\example_dataprovider.rrpt")); // "group_shonin"という識別子を持ったグループには、 // getShoninDataTableから得られるデータを割り当てます GroupDataProvider dataProvider = new GroupDataProvider(); dataProvider.GroupDataMap.Add("group_shonin", new ReportDataSource(getShoninDataTable())); // 第2引数にdataProviderを渡します report.Fill(new ReportDataSource(getDataTable()), dataProvider); ReportPages pages = report.GetPages(); // PDF出力 using (FileStream fs = new FileStream("output\\example_dataprovider.pdf", FileMode.Create)) { PdfRenderer renderer = new PdfRenderer(fs); renderer.Setting.ReplaceBackslashToYen = true; pages.Render(renderer); } ' VisualBasic Dim report As New Report(Json.Read("report\example_dataprovider.rrpt")) ' "group_shonin"という識別子を持ったグループには、 ' getShoninDataTableから得られるデータを割り当てます Dim dataProvider As New GroupDataProvider dataProvider.GroupDataMap.Add("group_shonin", New ReportDataSource(getShoninDataTable)) ' 第2引数にdataProviderを渡します report.Fill(New ReportDataSource(getDataTable), dataProvider) Dim pages As ReportPages = report.GetPages() ' PDF出力 Using fs As New FileStream("output\example_dataprovider.pdf", IO.FileMode.Create) pages.Render(New PdfRenderer(fs)) End Using // Java Report report = new Report(ReadUtil.readJson("report/example_dataprovider.rrpt")); // "group_shonin"という識別子を持ったグループには、 // getShoninDataTableから得られるデータを割り当てます GroupDataProvider dataProvider = new GroupDataProvider(); dataProvider.groupDataMap.put("group_shonin", new ReportDataSource(getShoninDataTable())); // 第2引数にdataProviderを渡します report.fill(new ReportDataSource(getDataTable()), dataProvider); ReportPages pages = report.getPages(); |
Copyright (c) 2013, SystemBase Co.,Ltd. All rights reserved. |