この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Apex からの PDF としての Visualforce ページの表示

Apex で PageReference.getContentAsPDF() メソッドを使用して、Visualforce ページを PDF データとして表示できます。次に、Apex コードを使用して、その PDF データをメールの添付ファイル、ドキュメント、Chatter 投稿などに変換します。
次の例は、取引先とレポート形式を選択して、生成されたレポートを指定されたメールアドレスに送信する 3 つの簡単な要素フォームです。

このページは、シンプルなユーザインターフェースです。Apex から PDF ファイルを生成する場合、すべてのアクションは Apex コード内にあります。

この例では、ページのコントローラとして指定された PdfEmailerController クラスにそのコードがあります。
この Apex コントローラは、概念的に次の 4 つの部分に分割できます。
  • 先頭にある 3 つの公開プロパティは、フォームの 3 つの入力要素により送信された値を取得します。
  • sendReport() アクションメソッドは、[取引先の概要を送信] ボタンをクリックしたときに起動されます。
  • 2 つの公開ヘルパープロパティは、選択リストの 2 つの入力要素に使用する値を提供します。
  • 末尾にある非公開ヘルパーは、使用可能な PDF レポート形式のリストをカプセル化します。Visualforce ページを作成してから、そのエントリをこのセクションに追加することにより、独自のレポートを追加できます。
sendReport() アクションメソッドが起動されると、コードで次の操作が行われます。
  • フォーム項目に意味のある値があることを確認するため、基本的なエラーチェックが実行されます。

    このエラーチェックは、実際のユーザを含む取引先責任者に対応する必要があるフォームには不十分です。本番コードでは、さらに包括的なフォーム検証が実行されます。

    メモ

  • 次に、選択された取引先の値を使用して、その取引先の名前が検索されます。取引先名は、メールメッセージに追加されるテキストで使用されます。また、この検索では、実際の取引先が選択されたことを確認するため、フォームの値がさらに検証されます。
  • 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 ブロックにラップしてください。

もれがないようにするため、次に Apex コードで PDF データとして表示するレポートテンプレートページを示します。