OutSystems自体には、直接帳票を出力する方法がありません。
しかし、企業の業務をサポートする情報システムには帳票を出力する方法が必要です。
そこで、OutSystemsを帳票出力を実現する方法を整理してみました。
Table of Contents
おすすめは何らかの帳票基盤と連携
手間とライセンス費用がかかりますが、何らかの帳票基盤を準備し、OutSystemsと効率よく連携する部品を用意するのがおすすめです。
理由は、
- 帳票基盤にはLow-Code的に帳票を作成するためのGUIの開発ツールが付属している
- 帳票に必要な表現能力を備えている(改ページとか、印刷向きのレイアウト能力とか)
- 帳票は画面と同様に大量に作ることになるので、ライセンスとインフラのコストに見合う可能性が高い
です。
使い慣れた帳票基盤がある場合は、ライセンスや導入工数の問題がなく、帳票作成スキルが流用できるので特に。
帳票基盤との連携手段は、基盤が備えているI/Fに合わせて
- SOAP/RESTでOutSystemsのデータを公開する
- OutSystemsでデータファイルを作成して引き渡す
- RDB経由
- この場合、できればOutSystemsのEntityに外部DBを使っておくとテーブル名が安定して帳票を作りやすいです
などが考えられます。
ScreenをPDFに変換する方法
ScreenをヘッドレスブラウザでPDF化するForge部品があります。
などです。UltimatePDFのほうが扱いやすく日本語もうまく処理できるのでこちらを簡単に説明します。
メリット
OutSystemsの画面作成スキルで帳票を作れます。更に、帳票基盤を別途導入しなくてよいため、ライセンスやインフラのコストが低くて済むのもいいですね。
デメリットとしては、やはり元来が帳票出力用でない技術を使うので、帳票に求められる表示を実現するのに余計な手間がかかることです。
帳票作成のボリュームや要求レベルが高くないときはこの選択もありだと思います。
仕組み
UltimatePDFは内部でExtensionを持っています。
Extensionは、PuppeteerSharpというライブラリを使って画面をPDF化。
最初のPDF化処理の際に、Chromium (Chromeのサブセットで、ヘッドレスで動作できる)を内部的にダウンロードし、利用します。
作り方の例
- Traditional Webのモジュールを作成する
- UltimatePDFを参照する
- 画面のLayoutにPrintLayoutを指定する
- 普通の画面と同じようにPlaceholerに各要素を配置
- Header:帳票のヘッダ
- MainContent:帳票本体
- Footer:帳票のフッタ(ページ番号をフッタに表示したいときは、ここにUltimatePDFのPageNumber Web Blockを配置する)
- PrintToPDF ActionのURLに作成したScreenのURLを渡せば、Output ParameterにPDFのバイナリデータが渡るため、Downloadのパラメータにする
画面の例 (Widget Tree)
画面上にButtonを配置し、そのButtonをクリックしたときにPDFをダウンロードさせる実装例。HideOnPrint Block内はブラウザで表示しているときには中のUIが表示され、PDFに出すときには非表示になります。
(PrintToPDF Actionに渡しているGetRawURL()は今の画面のURLを取得して設定している)
Officeを編集するツール
ExcelやWordでテンプレートをResources等に登録しておき、実行時にパラメータから取得したデータを埋めた上でダウンロードさせる方法です。
変更可能な原本をダウンロードさせても大丈夫で、ExcelやWordで帳票を作成するスキルを持つ人がいるときに向いていますね。
Forgeコンポーネントとして、Excelであれば、Advanced Excelがあります。
Wordであれば、MSWordUtilsというものがありますが、自由度が低いのでもしかしたら、Word操作ができる.NETのライブラリを組み込んだほうがいいかもしれません。
モバイルアプリケーションからオフラインで帳票出力
HTMLとCSSで帳票出力用のページデザインをする。モジュールにデータとしてその結果を組み込んでおき、実行時にデータを埋め込んでプラグインを使ってPDF化する方法です。
この方法であれば、オフラインでも(クライアントサイドだけで)帳票出力が可能です。
ちょっと古いですが、PDF Generator PluginというForgeコンポーネントで実現可能です。