LoginSignup
0
0

More than 1 year has passed since last update.

【OutSystems】UltimatePDFでPDFデータを生成する②

Posted at

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. 概要

image.png

バイナリデータを得る為には、このインターフェースのURLを指定しなければならない。
で、試行錯誤した所、ユーザがブラウザで設定するURLの形で良さそうなので、こういう感じにサンプルを作ってみた。

  1. 画面から、サーバアクションを起動するだけのボタンを置く
  2. サーバアクションでPrintToPDFを呼び出す
  3. PrintToPDFで生成したバイナリデータを、Downloadウィジェットで保存させる

2.2. 実装

2.2.1. 画面と処理のインターフェースを整える

ボタンや空のアクションの側を作っていく。

サーバアクション経由でダウンロードという何のひねりもないボタンをおく。

image.png

更にクリックイベントには、任意の名前でClient Actionを紐づけておく。(ここではDownloadViaActButtonOnClickとした)

image.png

作成したClient Actionから、生成したPDFバイナリデータをやり取りするServer Actionを作る。(ここではDownloadPdfActionとした)
引数はないが、戻り値にはOutDataという名前でBinary Data型のデータを用意した。

image.png

最初に作ったClient Actionに、Server Actionの呼び出しと受け取ったデータのダウンロードの処理を追記する。

image.png

これで、後はServer Action側で正しくPDFバイナリが出来ればファイルダウンロード処理が走るハズ。

2.2.2. PrintToPDF用のURLを作り、Server Actionを完成する

まずは、PrintToPDFまたはPrintToPDF_Advancedを追加する。
ちなみに、下の画像がそうだが、PrintToPDFに設定するURLは、べた書きで良いならPDF用Screenのプレビューをブラウザで開いて、アドレスバーからクエリストリングを除いたものをコピーして使えば目的は達成できる。

image.png

まあ、それではアレなのでちゃんと作るが、↑をすると正しいURLは分かるので、APIから動的生成するURLはこんな書式になりそうだ。

https://(ドメイン名)/(アプリ名)/(スクリーン名)

そこで、リファレンスを見るとこの辺が使えそうなので、APIをDependencyしておく。

HTTPRequestHandler API

Text API

実際にURLを作る為にこういう変数の構成にした

image.png

変数名 用途
OutData Binary Data PDFデータ
Message Text エラーメッセージなどがあったら入れる
IsSuccess Boolean Actionの実行成否
PDFScrrenInternalURL Text Screenの一時URLを格納する為に使用
PDFScreenURL Text PrintToPDF Actionの引数URLに使用

実装したフローについては次のようにAPIを組み合わせて作った。

image.png

1つ目のAssignではこんな感じの文字列が得られる
https://personal-ppneswkx.outsystemscloud.com/PDFOutput/BlankPDF.aspx

しかし、拡張子が付いた状態のURLは内部的なものなので、2つ目のAssignで拡張子以降を除去してこの形の文字列になる。
https://personal-ppneswkx.outsystemscloud.com/PDFOutput/BlankPDF

出来上がったURLをPrintToPDFURLに割り当て、その戻り値を3つ目のAssignOutDataに割り当てたら完了だ。

2.3. 動作確認

ファイルがダウンロード出来て、内容も確認出来たらOK。
そういえば、サーバアクションを使っているせいか、JSTでなくUTCになってるようで9時間ズレてますね。

image.png

3. あとがき

…という事で、さっくりまとめると
PrintToPDFのサーバアクションに、適切にPDF用スクリーンのURLを渡せればバイナリが得られるよ!
って事でした。
自身のメモでもあるので過剰なまでに細かくグダグダ書いてますが、やる事はこれだけだした。

PDF出力についてはこれで終わり。
さて、とりあえずこれで何か作りたい欲求に駆られてるけどなんかあるかなあ…。

以上。

0
0
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
0
0