2022年5月19日木曜日

APEX_MAIL.PREPARE_TEMPLATEを呼び出し、送信するメールをプレビューする

 メール送信前に、電子メール・テンプレートの穴埋めを行なった結果を画面に表示して確認できないか、との相談がありました。調べてみたところ、プロシージャAPEX_MAIL.PREPARE_TEMPLATEを使うと、送信するメールのプレビューができそうです。

試しに実装してみました。


アプリケーションの作成は、Always FreeのAutonomous Database上のAPEX 21.2を使って行います。また、ソースとなるデータとして、サンプル・データセットEMP/DEPTに含まれる表EMPを使用します。

以下より、サンプルの実装を紹介します。

アプリケーション作成ウィザードを起動します。名前メール・プレビューとします。ホーム・ページは、編集をクリックして設定画面を開き、削除します。


ページの追加を実行し、ファセット検索を選択します。


ページ名従業員検索とします。レポートの表示形式はレポートとしてEMPを選択します。フォームを含めるチェックを入れ、表EMPの編集ページも作成します。この編集ページを、電子メールのプレビューのページに作り直します

ページの追加をクリックします。


アプリケーションの作成を実行します。


アプリケーションが作成されます。

フォームのページEmployeesを開き、メールのプレビューに作り直します。


リージョンEmployeesボタン削除します。これらのリージョンに配置されているページ・アイテムやボタンも削除します。


すべてのリージョンが無くなったところで、Content Bodyに新たにリージョンを作成します。

新規に作成したリージョンの識別名前プレビューとし、タイプPL/SQL動的コンテンツを選択します。ソースPL/SQLコードとして、以下を記述します。コード中で使っている電子メール・テンプレートORDERMAILは、この後に作成します。


プレビューに影響を与える装飾をできるだけ無くすため、外観テンプレート- 選択 -に変更して、テンプレートを使わないようにします。


リージョンプレビューにページ・アイテムP2_EMPNOを作成します。タイプ非表示とします。このページ・アイテムに指定された従業員番号の従業員の情報を使って、電子メール・テンプレートの穴埋めを行います。

以上で、プレビューを行うページは作成できました。

共有コンポーネント電子メール・テンプレートを開いて、テンプレートORDERMAILを作成します。


電子メール・テンプレートの作成を実行します。


テンプレート名ORDERMAIL(これはもっと読みやすい名前にできます)、静的識別子ORDERMAIL(これはコード中で使用しているので変更不可です)とします。電子メールの件名HTMLフォーマットヘッダー本文フッタープレーン・テキスト・フォーマットコンテンツを以下を参考に埋めていきます。(APIの動作さえ確認できればよかったので、正直、かなり手抜きです)。

テンプレートが決まったら、電子メール・テンプレートの作成を実行します。


電子メール・テンプレートORDERMAILが作成されます。


以上でアプリケーションは完成です。アプリケーションを実行すると、本記事の先頭にあるGIF動画のような動作をします。

今回のサンプルで表示しているのは、HTML本文のみです。件名プレーン・テキストはプレビューに含めていません。それでも、確認した範囲ではAPEX_MAIL.PREPARE_TEMPLATEより得られたHTML本文は、十分、プレビューの役に立ちそうです。

今回作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/email-preview.sql

Oracle APEXのアプリケーション作成の参考になれば幸いです。