対象バージョン:Thinreports 0.11
元々メモ書きで残していたものに若干の追記修正を行っただけなので一部表現がおかしくなっているかもしれません
アップグレード
Thinreports自体のアップグレードはGemを更新するだけで可能
ただ、テンプレートファイルについても同様にアップグレードを行う必要がある
テンプレートファイルのアップグレード方法はバージョンを上げたエディタで開き直す
この時、一気に最新バージョンのエディタで開こうとするとそもそもファイル自体開くことができない
一つ一つバージョンを上げて確認しないと上手くいかないので要注意
Thinreportsのバージョンが0.7 <= 0.8のThinreports Editorで開いてバージョンアップ
↓
Thinreportsのバージョンが0.8 <= 0.9のThinreports Editorで開いてバージョンアップ
↓
Thinreportsのバージョンが0.9 <= 0.11のThinreports Editorで開いてバージョンアップ
バージョンアップに伴う修正部分
帳票の作成
0.7系での書き方は0.11系では以下のように変換できる
reports_path = File.join(Rails.root, 'app', 'reports')
# 帳票の作成
reports = Thinreports::Report.generate do |report|
~
end
# あるいは
report = Thinreports::Report.new layout: File.join(reports_path, 'test.tlf')
# generate時のレイアウト指定
report.use_layout File.join(reports_path, 'test.tlf'), default: true
# 新しいページの作成
report.start_new_page do |page|
~
end
# ページを作成するたびに実行されるcallback
report.on_page_create do |page|
~
end
Report.new
で帳票の作成を行う場合、処理完了後にreport.generate
をしないとsend_file
などでファイル送信しても正しくファイルが読み込まれないため注意
callback
eventsが廃止されているため、該当部分を置き換える作業も必要となる
events.on :page_create do |e|
if e.page.layout.id == :test_id
e.page.list(:details).add_row do
(1..10).each do |cnt|
item("test_#{cnt}").hide
end
↓
report.on_page_create do |page|
if page.layout.id == :test_id
page.list(:details).add_row do |row|
(1..10).each do |cnt|
row.item("test_{cnt}").hide
end
events
部分はすべて必要なくなり、代わりにitem
で選択する際にrow.
指定が必要となった
ページ番号について
- item(:hogehoge).value(hoge)
- itemはテンプレートファイルに記載した変数指定
- valueは変数に挿入する値のことで、"hoge"などで直接文字列を挿入することも可能
report.on_page_create do |page|
page.item(:page).value(page.no)
end
ヘッダ・フッタについて
- list(:hogehoge) do |list|
- リスト表⽰された変数に順番に値を⼊れる
- リスト表⽰は⾏で区切られた表形式のようなもの
- on_footer_insert
- リストの最後に挿⼊される合計等に値を挿⼊する際に使⽤するもの
page.list(:details) do |list|
list.on_footer_insert do |footer|
footer.values total_count: user.size,
price: price, total_price: total_price
end
end
また、以下のようにlambda式を用いることで一括でデータを入れることも可能
report_header_value = lambda do |page|
page.values date_start date_st,
date_end: data_ed,
section: section,
name: user.name,
title: "HOGE"
end
lambda式で入れられたデータはreport_header_value.call(page)
のように記述することで呼び出すことができる