0. INDEX
- つづきだよ!
- UltimatePDFでPDFデータを生成する
- あとがき
1. つづきだよ!
こっちの記事の続き。基本的な使い方から知りたい場合はどうぞ。
PDFバイナリデータをサクッと得たい人は今見ているページだけでOK!
もっと言うと、結論だけ欲しい人はプロジェクトファイルを入手して、あとがきへGO!
2. UltimatePDFでPDFデータを生成する
1つ目の記事と同じプロジェクトファイルだが貼っておく。Service Studio
で内容を確認しながら記事を読むと良いかと。
PDFOutput.oml - GitHub
デモページも同様デス。スリープされてアクセス不可だったら諦めて下さいω
https://personal-ppneswkx.outsystemscloud.com/PDFOutput/Home
2.1. 概要
バイナリデータを得る為には、このインターフェースのURLを指定しなければならない。
で、試行錯誤した所、ユーザがブラウザで設定するURLの形で良さそうなので、こういう感じにサンプルを作ってみた。
- 画面から、サーバアクションを起動するだけのボタンを置く
- サーバアクションで
PrintToPDF
を呼び出す -
PrintToPDF
で生成したバイナリデータを、Download
ウィジェットで保存させる
2.2. 実装
2.2.1. 画面と処理のインターフェースを整える
ボタンや空のアクションの側を作っていく。
サーバアクション経由でダウンロード
という何のひねりもないボタンをおく。
更にクリックイベントには、任意の名前でClient Actionを紐づけておく。(ここではDownloadViaActButtonOnClick
とした)
作成したClient Actionから、生成したPDFバイナリデータをやり取りするServer Actionを作る。(ここではDownloadPdfAction
とした)
引数はないが、戻り値にはOutData
という名前でBinary Data
型のデータを用意した。
最初に作ったClient Actionに、Server Actionの呼び出しと受け取ったデータのダウンロードの処理を追記する。
これで、後はServer Action側で正しくPDFバイナリが出来ればファイルダウンロード処理が走るハズ。
2.2.2. PrintToPDF用のURLを作り、Server Actionを完成する
まずは、PrintToPDF
またはPrintToPDF_Advanced
を追加する。
ちなみに、下の画像がそうだが、PrintToPDF
に設定するURLは、べた書きで良いならPDF用Screenのプレビューをブラウザで開いて、アドレスバーからクエリストリングを除いたものをコピーして使えば目的は達成できる。
まあ、それではアレなのでちゃんと作るが、↑をすると正しいURLは分かるので、APIから動的生成するURLはこんな書式になりそうだ。
https://(ドメイン名)/(アプリ名)/(スクリーン名)
そこで、リファレンスを見るとこの辺が使えそうなので、APIをDependencyしておく。
HTTPRequestHandler API
Text API
実際にURLを作る為にこういう変数の構成にした
変数名 | 型 | 用途 |
---|---|---|
OutData | Binary Data | PDFデータ |
Message | Text | エラーメッセージなどがあったら入れる |
IsSuccess | Boolean | Actionの実行成否 |
PDFScrrenInternalURL | Text | Screenの一時URLを格納する為に使用 |
PDFScreenURL | Text | PrintToPDF Actionの引数URLに使用 |
実装したフローについては次のようにAPIを組み合わせて作った。
1つ目のAssign
ではこんな感じの文字列が得られる
https://personal-ppneswkx.outsystemscloud.com/PDFOutput/BlankPDF.aspx
しかし、拡張子が付いた状態のURLは内部的なものなので、2つ目のAssign
で拡張子以降を除去してこの形の文字列になる。
https://personal-ppneswkx.outsystemscloud.com/PDFOutput/BlankPDF
出来上がったURLをPrintToPDF
のURL
に割り当て、その戻り値を3つ目のAssign
でOutData
に割り当てたら完了だ。
2.3. 動作確認
ファイルがダウンロード出来て、内容も確認出来たらOK。
そういえば、サーバアクションを使っているせいか、JSTでなくUTCになってるようで9時間ズレてますね。
3. あとがき
…という事で、さっくりまとめると
PrintToPDFのサーバアクションに、適切にPDF用スクリーンのURLを渡せればバイナリが得られるよ!
って事でした。
自身のメモでもあるので過剰なまでに細かくグダグダ書いてますが、やる事はこれだけだした。
PDF出力についてはこれで終わり。
さて、とりあえずこれで何か作りたい欲求に駆られてるけどなんかあるかなあ…。
以上。