Report Engine Developer Guide

Report Engineのプログラミングインターフェイス

Report Engineを使用すると、以下の操作を実行できます。

これらの操作を実行するアプリケーションを構築するために、Report Engineは2種類のAPIを提供しています。
URL API
実行パラメーターをセットしたURLを呼び出すことで操作を実行できます。
Apex API
実行パラメーターを引数として、Report EngineのApexクラスのメソッドを呼び出すことで操作を実行できます。

URL API

実行パラメーターをセットしたURLを呼び出すことでReport Engineの操作を実行できます。URLは以下のような形式です。

https://oprarts020.[instance].visual.force.com/apex/reportEngine?[parameters]

ここで、[instance]は、Saleforce組織によって異なる文字列で、ログインしたときのドメイン名から抽出できるものです。ご利用の組織で具体的にどのような文字列になるかは、Saleforceにログインして、OPROARTS Connectorの[OPROARTS]タブを開いたときのURLのドメイン名を確認してください。

[instance]を見付ける代わりに、Saleforce組織にログインしたときのドメイン名[domain]をそのまま使用して、

https://[domain]/apex/OPROARTS020__reportEngine?[parameters]

のような形式でも呼び出すことが可能な場合もあります。この場合は、以下のメソッドでReport EngineのURLを作成できます。

public PageReference toReportEngineUrl(Map<String, String> parameterMap) {
    String host = ApexPages.CurrentPage().getHeaders().get('Host');
    String url = 'https://' + host + '/apex/OPROARTS020__reportEngine';
    PageReference pr = new PageReference(url);
    pr.getParameters().putAll(parameterMap);
    return pr;
}

必要なパラメーターは以下のようにセットします。

public PageReference getQuotePdfUrl() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('action', 'download');
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId', '0067000000H4wnK');
    parameterMap.put('targetIds', '00390000001j2Kw');
    PageReference pr = toReportEngineUrl(parameterMap);
    return pr;
}

URLの具体例としては、[商談]オブジェクトから見積書テンプレート(Quote)を使ってPDFを作成してダウンロードする場合、以下のようになります([instance]がap0の場合)。

https://oprarts020.ap0.visual.force.com/apex/reportEngine?action=download&templateControllerId={!Opportunity.Id}&templateName=Quotation

Apex API

実行パラメーターを引数として、Report EngineのApexクラスのメソッドを呼び出すことで操作を実行できます。Report EngineのApexクラスであるReportEngineControllerが、操作を呼び出すのに必要なメソッドを提供します。

例えば、PDFダウンロードは、以下のように呼び出すことができます。

public PageReference downloadPdf(Map<String, String> parameterMap) {
    OPROARTS020.ReportEngineController engine = new OPROARTS020.ReportEngineController();
    PageReference pr = engine.downloadPdf(parameterMap);
    return pr;
}

public PageReference downloadQuotePdf() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId', '0067000000H4wnK');
    parameterMap.put('targetIds', '00390000001j2Kw');
    PageReference pr = downloadPdf(parameterMap);
    return pr;
}

Report Engine の使い方

基本的な使い方

手順

URL APIを利用すると、そのURLを開くだけで操作を実行できるので、そのURLのカスタムリンクやカスタムボタンを作成することで簡単に呼び出せるようになります。基本的な使用方法は以下の4ステップです。

a)Visualforceテンプレートの作成
はじめに、OPROARTS Designerを使用して、Visualforceテンプレートを作成します。[OPROARTS]タブからOPROARTS Designerへログインすると、いくつかのサンプルテンプレートが用意されていますので、それを参考にしてテンプレートを作成してください。出力したいドキュメントに合わせてコンポーネントをレイアウトしたあと、Salesforceのオブジェクトの項目をマッピングして、テンプレートを完成させます。
b)URL APIを呼び出すためのカスタムボタン・カスタムリンクの作成
URL APIに従ったURLを作成して、そのURLを呼び出すための、カスタムボタン、または、カスタムリンクを作成します。テンプレートにマッピングした主となるオブジェクトの設定ページから、カスタムボタン、または、カスタムリンクを新規作成して、URLを呼び出すようにしてください。
c)作成したカスタムボタン・カスタムリンクをページレイアウトへ配置
作成したカスタムボタン・カスタムリンクは、オブジェクトのページレイアウトに配置しなければ、使用することはできませんので、適切なページレイアウトにカスタムボタン、または、カスタムリンクを配置してください。
d)実行
対象オブジェクトのレコードを開いて、カスタムボタン、または、カスタムリンクをクリックすると、URL APIが呼び出されて、PDFの出力や送信が実行されます。

以上が、コードやクラスを書かずに利用する基本的な使い方です。SalesforceやVisualforceの基本的な知識があるユーザーであれば、短時間でReport EngineのテンプレートをPDFに変換することができます。

利用シナリオ

コードやクラスを書かずに利用する方法は、特に、Apexクラスを直接作成できない、SalesforceのProfessional Editionで有用です。また、他のEditionであっても、コードを書く手間を省くことができるので、迅速にPDF出力のソリューションを実現したい場合にも活用できます。

高度な使い方

Report Engineのすべての機能を使用するためには、カスタムApexクラスを作成し、動的パラメータを渡して各動作を呼び出す必要があります。少量のコードを記述することで、開発者は既存のアプリケーションとReport Engineを統合できます。また、新しいカスタムアプリケーションを簡単に作成することも可能です。

手順

高度な使用方法は以下の5ステップです。

a)Visualforceテンプレートの作成
これは、基本的な使用方法と同じです。
b)カスタムApexクラスの作成

ApexクラスからReport Engineを呼び出すには、URL APIを使用する方法と、Apex APIを使用する方法があります。

・URL APIを使用

public PageReference toReportEngineUrl(Map<String, String> parameterMap) {
    String host = ApexPages.CurrentPage().getHeaders().get('Host');
    String url = 'https://' + host + '/apex/OPROARTS020__reportEngine';
    PageReference pr = new PageReference(url);
    pr.getParameters().putAll(parameterMap);
    return pr;
}

public PageReference getQuotePdfUrl() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('action', 'download');
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId', '0067000000H4wnK');
    parameterMap.put('targetIds', '00390000001j2Kw');
    PageReference pr = toReportEngineUrl(parameterMap);
    return pr;
}

・Apex APIを使用

public PageReference downloadPdf(Map<String, String> parameterMap) {
    OPROARTS020.ReportEngineController engine = new OPROARTS020.ReportEngineController();
    PageReference pr = engine.downloadPdf(parameterMap);
    return pr;
}

public PageReference downloadQuotePdf() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId', '0067000000H4wnK');
    parameterMap.put('targetIds', '00390000001j2Kw');
    PageReference pr = downloadPdf(parameterMap);
    return pr;
}
c)Apexクラスを呼び出すためのカスタムボタン・カスタムリンクの作成
Apexクラスを呼び出すための、カスタムボタン、または、カスタムリンクを作成します。テンプレートにマッピングした主となるオブジェクトの設定ページから、カスタムボタン、または、カスタムリンクを新規作成してください。
d)作成したカスタムボタン・カスタムリンクをページレイアウトへ配置
作成したカスタムボタン・カスタムリンクは、オブジェクトのページレイアウトに配置しなければ、使用することはできませんので、適切なページレイアウトにカスタムボタン、または、カスタムリンクを配置してください。
e)実行
対象オブジェクトのレコードを開いて、カスタムボタン、または、カスタムリンクをクリックすると、URL APIが呼び出されて、PDFの出力や送信が実行されます。

開発組織に合わせたパッケージング

本番組織で使用するには、Sandbox組織、または、開発組織でコードを作成し、テストしたものをパッケージングする必要があります。 そのとき、Report Engineは、作成したパッケージが依存するパッケージとして自動的に追加されます。パッケージングしたものを本番組織にデプロイしてください。

Report Engine でサポートされている配信方法

以下ではReport Engineで実行できる主な操作について説明します。

ダウンロード

下記の手順に従って、操作を実行してください。

アクションの指定

操作として、actionパラメーターに「download」を指定します。actionパラメーターの値が省略されると、既定の動作としてダウンロードが実行されます。

例) action=download

テンプレートの指定

以下のいずれかでテンプレートを指定することができます。

a)templateId

templateIdパラメーターにVisualforceページのIDを指定します。

例) templateId=06670000000TnaV

b)templateName, templateNameSpace

templateNameパラメーターとtemplateNameSpaceパラメーターに、Visualforceページの名前と名前空間プレフィックスを指定します。

例) templateName=Quote&templateNamesapce=

VisualforceページのID、名前、名前空間プレフィックスは、[設定]から[開発]|[ページ]を開き、出力したいテンプレートのページを開くことで確認できます。

文書出力対象レコードの指定

templateControllerIdパラメーターに文書に表示するオブジェクトのIDを指定します。通常のVisualforceページにオブジェクトの内容を表示させるときに指定する「id」パラメータのようなものです。指定できるオブジェクトIDは、使用するテンプレート(Visualforceページ)のStandardControllerに設定されているオブジェクトのものです。

例) templateControllerId=0067000000H4wnK

文書出力対象者の指定

Report Engineは、文書出力対象者の指定として、[ユーザ]、[取引先責任者]、[リード]の項目値の差し込みに対応しています。複数対象者を指定することができて、その場合は各対象者のページが連なったひとつのPDFが生成されます。生成時にtargetIdsパラメーターに指定する値は、[ユーザ]、[取引先責任者]、[リード]のIDです。[ユーザ]のID、[取引先責任者]のID、[リード]のIDを混在させて指定することはできません。

例) targetIds=00390000001j2Kw,00390000001j2Kx

基本的な使用方法で実行する場合

URLの例は、以下のようになります([instance]がap0の場合)。

https://oproarts020.ap0.visual.force.com/apex/reportEngine?action=download&templateName=Quote&templateControllerId=0067000000H4wnK&targetIds=00390000001j2Kw

高度な使用方法で実行する場合

URL APIを使用する場合のコード例は以下のようになります。

public PageReference toReportEngineUrl(Map<String, String> parameterMap) {
    String host = ApexPages.CurrentPage().getHeaders().get('Host');
    String url = 'https://' + host + '/apex/OPROARTS020__reportEngine';
    PageReference pr = new PageReference(url);
    pr.getParameters().putAll(parameterMap);
    return pr;
}

public PageReference getQuotePdfUrl() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('action', 'download');
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId', '0067000000H4wnK');
    parameterMap.put('targetIds', '00390000001j2Kw');
    PageReference pr = toReportEngineUrl(parameterMap);
    return pr;
}

Apex APIを使用する場合のコード例は以下のようになります。

public PageReference downloadPdf(Map<String, String> parameterMap) {
    OPROARTS020.ReportEngineController engine = new OPROARTS020.ReportEngineController();
    PageReference pr = engine.downloadPdf(parameterMap);
    return pr;
}

public PageReference downloadQuotePdf() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId', '0067000000H4wnK');
    parameterMap.put('targetIds', '00390000001j2Kw');
    PageReference pr = downloadPdf(parameterMap);
    return pr;
}

添付ファイルに保存

作成したPDFをオブジェクトの添付ファイルに保存することができます。ここではダウンロード操作を実行し、動作が確認できたものして、添付ファイルに保存の機能を追加する方法を説明します。

アクションの指定

操作として、actionパラメーターに「attach」を指定します。

例) action=attach

添付ファイル名の指定

attachmentNameパラメーターに添付ファイルに保存するときのファイル名を指定します。

例) attachmentName=Quote20150314

添付先オブジェクトの指定

attachParentIdパラメーターにオブジェクトIDを指定します。

例) attachParentId=0067000000H4wnK

このパラメータが省略された場合、PDFはtemplateControllerIdで指定したレコードに添付されます。

一括添付ファイル

複数のtemplateControllerIdを指定して、複数のPDFを生成し、各オブジェクトに別々のファイル名で添付することも可能です。

ひとつを指定する場合のtemplateControllerIdパラメーターに対して、一括リクエスト時のtemplateControllerIdパラメーターは、templateControllerId_Nのように指定します。Nは正の整数を表します。例えば、一度に3個のtemplateControllerIdを指定するには、パラメーター名をtemplateControllerId_1、templateControllerId_2、templateControllerId_3のようにしてリクエストしてください。

例) templateControllerId_1=0067000000H4wnK&templateControllerId_2=0067000000VmgR8&templateControllerId_3=00670000009tHJ6

複数targetIdsの指定

一括リクエストにおけるtargetIdsの指定も、templateControllerIdと同様にtargetIds_Nのようなパラメーター名になります。Nは正の整数を表します。カンマ区切りの値で、ひとつのtemplateControllerIdに対して、複数のtargetIdsを指定できます。例えば、templateControllerId_1,templateControllerId_2でふたつのtemplateControllerIdを一括リクエストするときに、templateControllerId_1にはtargetIdをひとつ、templateControllerId_2にはtergetIdをふたつ指定したい場合は、以下のように指定してください。

例) targetIds_1=00390000001j2Kw&targetIds_2=00390000001j2Kw,00390000001j2Kx

注:templateControllerId_Nを指定せずにtergetIds_N(NはtemplateControllerIdと同じ番号)を指定しても無効になります。

複数attachParentIdの指定

attachParentIdパラメーターも同様に、attachParentId_1, attachParentId_2, attachParentId_3、……のように指定してください。これにより、templateControllerId_1はattachParentId_1に、templateControllerId_2はattachParentId_2に指定されたレコードにPDFを添付します。

例) attachParentId_1=00690000002Ctb7&attachParentId_2=0067000000VmgR8

注:templateControllerId_Nを指定せずattachParentId_N(NはtemplateControllerIdと同じ番号)を指定しても無効になります。

複数attachmentNameの指定

attachmentNameパラメータも同様です。attachmentName_1, attachmentName_2, attachmentName_3、……のように指定してください。これにより、templateControllerId_1はattachParentId_1に、templateControllerId_2はattachParentId_2に指定されたファイル名でPDFを添付します。

例) attchmentName_1=Quote20150314a&attchmentName_2=Quote20150314b

注:templateControllerId_Nを指定せずattachmentName_N(NはtemplateControllerIdと同じ番号)を指定しても無効になります。

基本的な使用方法で実行する場合

URLの例は、以下のようになります([instance]がap0の場合)。

https://oproarts020.ap0.visual.force.com/apex/reportEngine?action=attach&templateName=Quote&templateControllerId=0067000000H4wnK&targetIds=00390000001j2Kw&attachParentId=0067000000H4wnK&attachmentName=Quote20150314

高度な使用方法で実行する場合

URL APIを使用する場合のコード例は以下のようになります。

public PageReference toReportEngineUrl(Map<String, String> parameterMap) {
    String host = ApexPages.CurrentPage().getHeaders().get('Host');
    String url = 'https://' + host + '/apex/OPROARTS020__reportEngine';
    PageReference pr = new PageReference(url);
    pr.getParameters().putAll(parameterMap);
    return pr;
}

public PageReference getQuotePdfUrl() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('action', 'attach');
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId', '0067000000H4wnK');
    parameterMap.put('targetIds', '00390000001j2Kw');
    parameterMap.put('attachParentId', '066900000004PfH');
    parameterMap.put('attachmentName', 'Quote20150314');
    PageReference pr = toReportEngineUrl(parameterMap);
    return pr;
}

Apex APIを使用する場合のコード例は以下のようになります。

public PageReference attachPdf(Map<String, String> parameterMap) {
    OPROARTS020.ReportEngineController engine = new OPROARTS020.ReportEngineController();
    PageReference pr = engine.attachPdf(parameterMap);
    return pr;
}

public PageReference downloadQuotePdf() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId_1', '0067000000H4wnK');
    parameterMap.put('templateControllerId_2', '0067000000VmgR8');
    parameterMap.put('targetIds_1', '00390000001j2Kw');
    parameterMap.put('targetIds_2', '00390000001j2Kx');
    parameterMap.put('attachParentId_1', '0067000000H4wnK');
    parameterMap.put('attachParentId_2', '0067000000VmgR8');
    parameterMap.put('attachmentName_1', 'Quote20150314a');
    parameterMap.put('attachmentName_2', 'Quote20150314b');
    PageReference pr = attachPdf(parameterMap);
    return pr;
}

添付メール送信

作成したPDFを添付ファイルとしてメールに添付してメールを送信することができます。targetIdsパラメーターを使用する方法と、emailToパラメーターを使用する方法の2種類があります。

targetIdsパラメーターを使用する方法

この方法は生成したPDFを[ユーザ]か[取引先責任者]か[リード]へ送信する場合に使用します。各targetIdsの宛先が、それぞれのオブジェクトのデータを差し込んだPDFのコピーを受け取ります。この方法では、Salesforceのメールテンプレートを利用することが可能です。メールテンプレートはメールの件名と本文として機能します。メールテンプレートに差し込むオブジェクトのレコードは、whatIdパラメーターで指定します。

emailCcパラメーターでCc:のメールアドレスを指定できます。また、emailBccパラメーターでBcc:のメールアドレスを指定できます。これらを指定すると、指定されたすべての宛先が、targetIds毎に1通のメールを受け取ります。例えば、アクションURLに3個のtargetIdパラメーターと2個のemailCcパラメーターがあった場合、Report Engineにより送信されるメールは9通です。

  • 各targetIdのアドレスに1通ずつ送信 → 3通
  • ひとつめのemailCcのアドレスに送信 → 3通
  • ふたつめのemailCcのアドレスに送信 → 3通

emailSubjectパラメーターでメールの件名を指定できます。emailBodyパラメーターでメールの本文を指定できます。また、emailTemplateIdパラメーターでメールテンプレートを指定できます。emailTemplateIdパラメーターは、emailSubjectとemailBodyよりも優先されます。

emailToパラメーターを使用する方法

この方法では生成したPDFをどの外部ユーザにでも配信できます。この場合にtargetIdsを指定すると、各targetIdsのデータの差し込んだすべてのページを持つひとつのPDFを生成します。

emailToパラメーターが使用されると、targetIdsに属する宛先は、メールを受信しません。代わりに、emailTo、emailCc、emailBccで指定された宛先はメールを1通受信します。例えば、3個のtargetId、1個のemailTo、2個のemailCcがあった場合、Report Engineにより送信されるメールは3通です。

emailSubjectパラメーターでメールの件名を指定できます。emailBodyパラメーターでメールの本文を指定できます。また、emailTemplateIdパラメーターでメールテンプレートを指定できます。emailTemplateIdパラメーターは、emailSubjectとemailBodyよりも優先されます。メールテンプレートを使用することも可能ですが、この場合、whatId、targetIdsの差し込み項目は使用できません。

アクションの指定

操作として、actionパラメーターに「email」を指定します。

例) action=email

添付ファイル名の指定

attachmentNameパラメーターにメールに添付するときのファイル名を指定します。省略された場合、添付ファイル名にはテンプレート名が使用されます。

例) attachmentName=Quote20150314

メールテンプレートの指定

メールテンプレートを使用する場合、emailTemplateIdパラメーターにメールテンプレートのIDを指定してください。[設定]から[管理]|[コミュニケーションテンプレート]|[メールテンプレート]を開いて、使用するメールテンプレートの詳細ページを開き、IDを取得してください。

関連オブジェクトIDの指定

メールテンプレートを使用する場合、whatIdパラメーターにメールテンプレートに関連付けるオブジェクトのIDを指定してください。

件名と本文の指定

メールテンプレートを使用しない場合、emailSubjectパラメーターでメールの件名を指定でき、emailBodyパラメーターでメールの本文を指定できます。

追加の宛先の指定

Ccメール、Bccメールを送信する場合は、emailCcパラメーター、emailBccパラメーターにメールアドレスを指定してください。

一括メール送信

複数のtemplateControllerIdを指定して、複数のPDFを生成し、一度にそれぞれ異なる宛先の対象へ、添付ファイルとしてメール送信することが可能です。添付ファイルに保存と同様、パラメーター名のあとに、_N(Nは正の整数)を付加してください。

基本的な使用方法で実行する場合

メールテンプレートを使用する場合のURLの例は、以下のようになります([instance]がap0の場合)。

https://oproarts020.ap0.visual.force.com/apex/reportEngine?action=email&templateId=06690000000L1S6&templateControllerId=0067000000H4wnK&targetIds=00390000001j2Kw,00390000001j2Kx&displayName=OPROARTS&emailTemplateId=00X700000012nWS&whatId=0067000000H4wnK

メールテンプレートを使用しない場合のURLの例は、以下のようになります([instance]がap0の場合)。

https://oproarts020.ap0.visual.force.com/apex/reportEngine?action=email&templateId=06690000000L1S6&templateControllerId=0067000000H4wnK&targetIds=00390000001j2Kw,00390000001j2Kx&displayName=OPROARTS&emailSubject=EmailSampleSubject&emailBody=EmailSampleBody&emailCc=

高度な使用方法で実行する場合

URL APIを使用する場合のコード例は以下のようになります。

public PageReference toReportEngineUrl(Map<String, String> parameterMap) {
    String host = ApexPages.CurrentPage().getHeaders().get('Host');
    String url = 'https://' + host + '/apex/OPROARTS020__reportEngine';
    PageReference pr = new PageReference(url);
    pr.getParameters().putAll(parameterMap);
    return pr;
}

public PageReference getQuoteEmailUrl() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('action', 'email');
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId', '0067000000H4wnK');
    parameterMap.put('targetIds', '00390000001j2Kw');
    parameterMap.put('attachmentName', 'Quote20150314');
    parameterMap.put('displayName', UserInfo.getFirstName() + ' ' + UserInfo.getLastName());
    parameterMap.put('emailTemplateId', '00X700000012nWS');
    parameterMap.put('whatId', '0067000000H4wnK');
    PageReference pr = toReportEngineUrl(parameterMap);
    return pr;
}

Apex APIを使用する場合のコード例は以下のようになります。

public PageReference emailPdf(Map<String, String> parameterMap) {
    OPROARTS020.ReportEngineController engine = new OPROARTS020.ReportEngineController();
    PageReference pr = engine.emailPdf(parameterMap);
    return pr;
}

public PageReference sendEmailQuotePdf() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('displayName', UserInfo.getFirstName() + ' ' + UserInfo.getLastName());
    parameterMap.put('emailTemplateId', '00X700000012nWS');
    List<ID> templateControllerIds = getTemplateControllerIds();
    List<ID> targetIds = getTargetIds();
    List<ID> whatIds = getTargetIds();
    List<String> attachmentNames = getAttachmentNames();
    for (integer i = 0, ni = templateControllerIds.size(); i < ni; ++i) {
        parameterMap.put('templateControllerId_' + (i + 1), templateControllerIds[i]);
        parameterMap.put('targetIds_' + (i + 1), targetIds[i]);
        parameterMap.put('whatIds_' + (i + 1), whatIds[i]);
        parameterMap.put('attachmentNames_' + (i + 1), attachmentNames[i]);
    }
    PageReference pr = emailPdf(parameterMap);
    return pr;
}

Fax送信

作成したPDFを添付ファイルとしてメールに添付してメールを送信することができるので、メールに添付されたPDFをFax送信するインターネットFaxサービスと連携すれば、Fax送信も実行できます。targetIdsパラメーターを使用する方法と、faxToパラメーターを使用する方法の2種類があります。Faxを使用するには、いずれかのインターネットFaxサービスに加入しなければなりません。

targetIds パラメータを使用したFax送信

この方法は生成したPDFを[ユーザ]か[取引先責任者]か[リード]へ送信する場合に使用します。各targetIdsの宛先が、それぞれのオブジェクトのデータを差し込んだPDFのコピーを受け取ります。この方法では、Salesforceのメールテンプレートを利用することが可能です。メールテンプレートはメールの件名と本文として機能します。メールテンプレートに差し込むオブジェクトのレコードは、whatIdパラメーターで指定します。

faxTo パラメータを使用したFax送信

この方法では生成したPDFをどの外部ユーザにでも配信できます。この場合にtargetIdsを指定すると、各targetIdsのデータの差し込んだすべてのページを持つひとつのPDFを生成します。faxToパラメーターが使用されると、targetIdsに属する宛先は、Faxを受信しません。代わりに、faxToで指定された宛先がFaxを1通受信します。例えば、3個のtargetId、1個のemailTo、2個のemailCcがあった場合、Report Engineにより送信されるFaxは3通です。

メールテンプレート利用時の注意

いくつかのFax送信するインターネットFaxサービスは、メールの件名を指定するとき、定められた構文に従う必要があります。メール件名の設定に関する詳しい情報については、それぞれのインターネットFaxサービスのガイドを参照してください。

メールテンプレートの本文によって、静的なFaxカバーページを使用することが可能です。しかし、この場合whatIdとtargetIdsの差し込み用フィールドは使用できません。これによってテキストテンプレートによる静的コンテンツ、またはカスタムテンプレートによりフォーマットされた静的HTMLしか使用できないことを意味します。

アクションの指定

操作として、パラメーターに「fax」を指定します。

例) action=fax

インターネットFaxサービスの指定

faxServiceパラメーターの指定は必須です。インターネットFaxサービスが宛先メールアドレスにFax番号を指定するタイプの場合、Fax番号を挿入するルールを指定します。

例)faxService=#213{faxNumber}@olink.ne.jp

Fax送信の一括操作

複数のtemplateControllerIdを指定して、複数のPDFを生成し、一度にそれぞれ異なる宛先の対象へFax送信することが可能です。添付ファイルに保存と同様、パラメーター名のあとに、_N(Nは正の整数)を付加してください。

基本的な使用方法で実行する場合

メールテンプレートを使用する場合のURLの例は、以下のようになります([instance]がap0の場合)。

https://oproarts020.ap0.visual.force.com/apex/reportEngine?action=fax&templateId=06690000000L1S6&templateControllerId=0067000000H4wnK&targetIds=00390000001j2Kw,00390000001j2Kx&emailTemplateId=00X700000012nWS&faxService=%23213%7BfaxNumber%7D%40olink.ne.jp

メールテンプレートを使用しない場合のURLの例は、以下のようになります([instance]がap0の場合)。

https://oproarts020.ap0.visual.force.com/apex/reportEngine?action=fax&templateId=06690000000L1S6&templateControllerId=0067000000H4wnK&targetIds=00390000001j2Kw,00390000001j2Kx&emailSubject=EmailSampleSubject&emailBody=EmailSampleBody&faxService=%23213%7BfaxNumber%7D%40olink.ne.jp

高度な使用方法で実行する場合

URL APIを使用する場合のコード例は以下のようになります。

public PageReference toReportEngineUrl(Map<String, String> parameterMap) {
    String host = ApexPages.CurrentPage().getHeaders().get('Host');
    String url = 'https://' + host + '/apex/OPROARTS020__reportEngine';
    PageReference pr = new PageReference(url);
    pr.getParameters().putAll(parameterMap);
    return pr;
}

public PageReference getQuoteFaxUrl() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('action', 'fax');
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('templateControllerId', '0067000000H4wnK');
    parameterMap.put('targetIds', '00390000001j2Kw');
    parameterMap.put('emailTemplateId', '00X700000012nWS');
    parameterMap.put('faxService', '#213{faxNumber}@olink.ne.jp');
    PageReference pr = toReportEngineUrl(parameterMap);
    return pr;
}

Apex APIを使用する場合のコード例は以下のようになります。

public PageReference faxPdf(Map<String, String> parameterMap) {
    OPROARTS020.ReportEngineController engine = new OPROARTS020.ReportEngineController();
    PageReference pr = engine.faxPdf(parameterMap);
    return pr;
}

public PageReference sendFaxQuotePdf() {
    Map<String, String> parameterMap = new Map<String, String>();
    parameterMap.put('templateId', '066900000004PfH');
    parameterMap.put('faxService', '#213{faxNumber}@olink.ne.jp');
    parameterMap.put('emailTemplateId', '00X70000001ZZHQ');
    parameterMap.put('emailSubject', 'Quote20150314a');
    List<ID> templateControllerIds = getTemplateControllerIds();
    List<String> faxNumbers = getFaxNumbers();
    for (integer i = 0, ni = templateControllerIds.size(); i < ni; ++i) {
        parameterMap.put('templateControllerId_' + (i + 1), templateControllerIds[i]);
        parameterMap.put('faxTo_' + (i + 1), faxNumbers[i]);
    }
    PageReference pr = faxPdf(parameterMap);
    return pr;
}

メール本文を使用するインターネットFaxサービスに関する注意点

NTTコミュニケーションズのBizFAX等、認証情報を指定する等のためにメール本文を使うインターネットFaxサービスでは注意が必要です。emailBodyパラメーターでメールの本文を指定した場合、HTMLメールとなってメールが送信されるため、認証情報が受け付けられないことがあります。その場合は、emailBodyパラメーターを使用せず、emailTemplateIdパラメーターでメールテンプレートを指定して使用してください。[設定]から[管理]|[コミュニケーションテンプレート]|[メールテンプレート]を開いて、[新規テンプレート]ボタンをクリックし、[作成するメールテンプレートの種別]として[テキスト]を選択して、メール内容に認証情報を指定したメールテンプレートを作成し、そのメールテンプレートをemailTemplateIdパラメーターで指定するようにしてください。

BizFAXの場合のメール内容例:

#userid=9998887777
#passwd=ABCDEFGHIJKLMN

以上。

関連ヘルプ

お問い合わせ

疑問・質問などございましたら、サポートページよりお問い合わせください。

OPROARTS Connector / Report Engine

Copyright: © 2010-2016 OPRO Co., Ltd. All rights reserved.