LoginSignup
1
1

More than 1 year has passed since last update.

Thinreportsのアップグレードに際して注意する点

Posted at

対象バージョン: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)のように記述することで呼び出すことができる

参考

Thinreport - Github

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1