バーチャルリストで目次を生成する

いつもお世話になっているFM-Chubuの次回の勉強会で、バーチャルリストについてお話しすることになりました。と言っても現場での経験の少ない私が諸先輩方にお伝えできることは、それほど多くありません。そこで、ちょうどfilemakerhacksでもバーチャルリストの高度な応用例が取り上げられていましたのでご紹介します。


FileMaker Hacks logo

Virtual List Table Of Contents

(元記事はこちら)

Kevin Frank
2017/1/31

4年前になりますが、目次付きのPDFカタログの作り方についての記事を書きました。目次部分はメーカーテーブルから、カタログ部分は製品テーブルから作成するというものでしたが、今回の記事では、目次部分を違うアプローチを使って生成してみます。今回の手法は、昨年のバーチャルリストによるレポート生成シリーズで紹介したものです。具体的には、9個のレポートを結合して1つのPDFを生成し、その最初に目次をつけます。

2017-01-30_173715

デモファイル: virtual-list-toc-v1.zip, virtual-list-toc-v2.zip

2017-01-30_201617

 

繰り返しを避けるために、今回の記事はバーチャルリストの手法を理解していることを前提とします。(参考記事: Virtual List Reportingのパート1に技術の概要の紹介と2~6のレポートの詳細、パート2に7~9のレポートの詳細を書いています。)

デモ1

今回の記事は、スクリプト「generate master report w/ t.o.c. (目次付きのマスターレポートを生成)」を主な対象とします。このスクリプトは、目次を生成し、それに各レポートを追加して、最後にPDFを表示します。

2017-01-31_083657

レポート1は、今月の売り上げのうち$500以上のものを単純に一覧にしたリストです。ここでの主な目的は、目次の後ろに可変のページ数のレポートをつけることです。月末には8~10ページになりますが、月初めにまだ$500の基準に合う売り上げがなければ0ページということになります。その場合はレポート1そのものが生成されず、目次にもあらわれません。

上で説明したように、レポート2~9については「バーチャリストによるレポート生成」のパート1パート2で詳しく説明しています。

下図は目次をレイアウトモードで表示したものです (このレイアウトはバーチャルリストテーブルに対して設定されています)。

2017-01-30_200641

そしてこれは、目次を生成中のバーチャルリストのテーブルです。

2017-01-30_200341

基本計画:

  • レポートのファイル名を設定(ユーザに対し入力ダイアログを表示)
  • レポート#1のページ数を取得
    (その他のレポートのページ数はすでにわかっていることとします)
  • 目次を生成して出力
  • 各レポートを生成し、順に追加
    (そのときにページ番号が正しく付けられていること)
  • PDFを表示

デモに関する考察:

1. グローバル変数 $$StartPage を使って、各レポートページの下部に正しいページ番号を表示させます。

2017-01-30_214556

2. 単純に”レポート1”,”レポート2″というように9回呼び出してページ番号を足していくのではなく、ループを使用してページ番号を増やしていき、「URLを開く」を使ってレポートを生成します。この小技が「スクリプトを名前で実行」の機能を実現します。

2017-01-30_220319

デモ2

このデモも基本的に”v1″と同じですが、v1のハードコーディングされたスクリプト名を使う方法は壊れやすいと思いませんか? スクリプトを名前で呼び出す代わりに、動的にIDで起動すればどうでしょうか? これをこの通り作ることもできますが、それをさらに改良します。検出したIDを蓄積し、スクリプトの実行時に動的にスクリプト名に変換します。

ここでは、FabriceNordmannのカスタム関数FM_Name_IDの改造版を使用してIDを検出します。

2017-01-30_212556

(詳細は、こちらの記事を参照してください: Avoiding Brittleness)マスターレポートの実行時に、スクリプトのIDがローカル変数に格納されます。

2017-01-30_221941

そしてidは実行時に変換されてスクリプト名に戻されます。

2017-01-30_222212

もちろん利点としては、デモ2の場合、”レポート”スクリプトの名前を変更したとしても、メインの生成ルーチンが動かなくなることはありません。

最後に

1. 改めて、バーチャルリストを発明しFileMakerコミュニティで共有してくれたBruce Robertsonに感謝します。

2. レポートに目次をつけることはできました。次に、目次の各行にPDF内の対応するレポートへのハイパーリンクを設定できたらいいと思いませんか?

FileMakerの標準機能ではこれは不可能ですが、MonkeyBreadプラグインとDynaPDF Liteを組み合わせることで可能になります。この方法を次回の記事で紹介します。

Leave a Reply