メール送信前に、電子メール・テンプレートの穴埋めを行なった結果を画面に表示して確認できないか、との相談がありました。調べてみたところ、プロシージャ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のアプリケーション作成の参考になれば幸いです。
完