はじめに
JPAUG 広島に参加した際にお話が出たので記事化しておこうと思います。
時々、Power Apps に表示されている画面を印刷したいという要望をいただくことがあります。
一番単純な実現方法としては、Print
関数を使うことです。
例えば、以下のような問い合わせの案件内容画面を印刷したいとします。
しかし、Print 関数の場合、今画面に映っている範囲、つまり、このケースの場合、フォームコントロールの下の方は印刷されないことになります。それ以外にも、ギャラリーでスクロールが必要な場合などにも、今映っている画面しか印刷できません。
今回は、このような際の対策について記事化します。
対策
結論から言うと、PDF 関数を使います。PDF 関数では、画面または画面の一部を選択して、PDF オブジェクト (blob) にエクスポートすることができます。
※以下の設定をオンにしておく必要があります
例えば、以下のように、アイコンを押すとフォームコントロールを配下に含むコンテナーを PDF オブジェクトにして変数に格納します。
Set(
varWorkOrderPDF,
PDF(
con_Detail,
{ExpandContainers: true}
)
);
Navigate('PDF Viewer Screen');
ExpandContainers オプションを true にしておくこともポイントです。
そうすると、以下のような PDF オブジェクトが作成されます。※PDF ビューアーコントロールで表示しています
あとはこちらを基に印刷する感じなのですが、私が調べる限り、少しこちらが難しかったです。
最終的には、Power Automate に情報を渡して、SharePoint ドキュメントライブラリに保存して、その URL を Power Apps に返してダウンロードするようにしました。
Power Automate 側では、ファイルを受け取って、以下のようにして、SharePoint ドキュメントライブラリにファイルを保存します。
ファイル名の方は、以下のように指定しています。
ダウンロード用の URL ですが、調べたところ、以下のような感じで URL を生成することで実現できました。難しい場合は、ファイル保存先のドキュメントライブラリの URL だけ返して、そちらを開いて、PDF 開く形でも良いかと思います。
https://テナント名.sharepoint.com/sites/サイト名/_layouts/15/download.aspx?SourceUrl=/sites/サイト名outputs('ファイルの作成')?['body/Path']
サイトのところだけ動的な値を使っています。
最後に、Power Apps 側では、以下のようにして、PDF ファイルを Power Automate に渡して、返ってきた URL を使ってファイルをダウンロードします。
Download(
PDFSaveフロー.Run(
{
file: {
name: $"Toiawase_{Text(
Now(),
"yyyymmddhhmmss"
)}.pdf",
contentBytes: varWorkOrderPDF
}
}
).url
);
実行すると、PDF ファイルが開けたため、印刷をします。
まとめ
今回は、Power Apps で表示されている画面を PDF 関数を使って印刷する方法を紹介しました。どうしても印刷できるようにしたいものの、Print 関数では、スクロールが必要な場合全て表示されないため、一つの対策になると考えます。参考になれば幸いです。