Apex からの PDF としての Visualforce ページの表示
このページは、シンプルなユーザインターフェースです。Apex から PDF ファイルを生成する場合、すべてのアクションは Apex コード内にあります。
- 先頭にある 3 つの公開プロパティは、フォームの 3 つの入力要素により送信された値を取得します。
- sendReport() アクションメソッドは、[取引先の概要を送信] ボタンをクリックしたときに起動されます。
- 2 つの公開ヘルパープロパティは、選択リストの 2 つの入力要素に使用する値を提供します。
- 末尾にある非公開ヘルパーは、使用可能な PDF レポート形式のリストをカプセル化します。Visualforce ページを作成してから、そのエントリをこのセクションに追加することにより、独自のレポートを追加できます。
- フォーム項目に意味のある値���あることを確認するため、基本的なエラーチェックが実行されます。
- 次に、選択された取引先の値を使用して、その取引先の名前が検索されます。取引先名は、メールメッセージに追加されるテキストで使用されます。また、この検索では、実際の取引先が選択されたことを確認するため、フォームの値がさらに検証されます。
- Messaging.SingleEmailMessage クラスを使用して、メールメッセージの宛先、件名、本文の値を設定してメールメッセージが作成されます。
- 選択されたレポート形式に対してコードで PageReference が作成され、ページ要求パラメータが設定されます。パラメータは指定された「ID」で、その値は選択された取引先の ID に設定されます。この PageReference は、指定された取引先のコンテキストでこのページにアクセスするための特定の要求を表します。getContentAsPdf() がコールされると、参照された Visualforce ページから指定の取引先にアクセスでき、その取引先の詳細を使用してページが表示されます。
- 最後に、PDF データが添付ファイルに追加され、前に作成したメールメッセージに添付ファイルが追加されます。そして、メッセージが送信されます。
PageReference.getContentAsPdf() を使用する場合、メソッドコールの戻り値の型は「大きなバイナリオブジェクト」を表す Blob です。Apex では、Blob データ型は型指定のないバイナリデータを表します。バイナリデータが PDF ファイルになる「application/pdf」コンテンツタイプで reportPdf 変数を Messaging.EmailFileAttachment に追加する場合にのみ、このようになります。
さらに、getContentAsPdf() へのコールは try/catch ブロックにラップされます。コールに失敗すると、catch により、期待される PDF データが例外メッセージテキストの Blob バージョンで置き換えられます。
PDF データとしての Visualforce ページの表示は、さまざまな理由により、意味的には外部サービスへのコールアウトとして処理されます。その理由の 1 つとして、外部サービスが失敗するのとまったく同じように表示サービスが失敗する可能性があることが挙げられます。たとえば、使用できない外部リソースをページで参照する場合があります。別の例としては、(通常は複数の画像によって) ページに含まれるデータが多すぎたり、表示時間が制限を超えたりする場合です。この理由により、Visualforce ページを Apex で PDF データとして表示する場合は、getContentAsPdf() 表示コールを常に try/catch ブロックにラップしてください。