帳票DXアクションとドキュメント生成メソッドの利用方法

自動処理について

帳票DX for Salesforceは、ドキュメント生成やD³Worker連携を自動的に実施する手段として、以下3種の機能を提供しています。

基本的には(A)をご利用下さい。

当資料は以下の(A)(B)について説明します。

帳票DXアクションの利用

導入方法

「出力定義」の作成方法

実行方法

実行結果

「設定」の種別や、「出力方法」によって「アクション」の「結果」に出力されるJSONの構成が変化します。
以下にサンプルを示しますが、「//」以降は説明であり、実際には出力されません。

「設定」がドキュメント出力の場合

出力方法として「出力元レコードに添付」か、「アクションレコードに添付(個別に添付)」を指定した場合

出力方法として「アクションレコードに添付(複数時zip圧縮)」を指定した場合
「出力元レコードに添付」の場合と比較して、「documentId」の出力箇所が違う点に注意が必要です。

「設定」がD³Worker連携の場合

出力方法の指定欄は無し。

実行結果をApex内で解釈

上記の処理結果をApex内で読解する場合、帳票DX for Salesforce が内蔵するglobalメソッドによって内容を読解する事ができます。 ドキュメント生成後の後続処理を実装する際にご利用ください。

「設定」がドキュメント出力の場合

Salesforceにて開発者コンソールを開き、Ctrl + E を押して、「Enter Apex Code」(実行匿名ウィンドウ)を開きます。 以下のコードを入力する事で docutizexa.GenerateResult型のインスタンスを生成する事ができます。

出力されたログを見ると、どのように解釈されたかを確認する事ができます。

「設定」がD³Worker連携の場合

Salesforceにて開発者コンソールを開き、Ctrl + E を押して、「Enter Apex Code」(実行匿名ウィンドウ)を開きます。 以下のコードを入力する事で docutizexa.D3WorkerActionResult型のインスタンスを生成する事ができます。

出力されたログを見ると、どのように解釈されたかを確認する事ができます。

 

ドキュメント生成メソッドの利用

概要

ドキュメント生成処理をApexによって同期的に実行する事が出来ます。ドキュメント生成が完了した後の処理を即座に作動させる事が可能になります。

「帳票DXアクション」を利用する場合であっても、「帳票DXアクション」のレコードの状態が「完了」になった際に発火するワークフロールールを設ける事で任意の後処理を作動させる事が可能ですので、基本的には「帳票DXアクション」を利用する事を推奨します。

D³Worker連携機能を提供するメソッドはありません。「帳票DXアクション」をご利用下さい。

準備

あらかじめ「出力定義」のレコードを作成しておく必要があります。作成方法は当ドキュメント内の『「出力定義」の作成方法』の欄を参照して下さい。

利用方法

ドキュメント生成

「帳票DXアクション」を利用せず、Apex上で、帳票DX for Salesforce が提供する global メソッドを利用して、ドキュメントを生成する事も可能です。

以下は実装例です。Salesforceにて開発者コンソールを開き、Ctrl + E を押して、「Enter Apex Code」(実行匿名ウィンドウ)を開き、そこに以下コードを入力する事で、実際の動作を確認する事が出来ます。

 

出力対象とするレコードが1件だけの場合は、generateメソッドの第2引数は単一の文字列にしても受け付けられます。

一覧型のドキュメントを生成する場合は、setAttachToメソッドによって添付先のレコードを指定して下さい。
一覧型かつIDの指定を不要とするよう設定した「帳票」を利用する場合、generateメソッドの第2引数は省略できます。

事前チェック

generateメソッドは、致命的なエラーが生じない限り、処理対象としたレコードの中にエラーとなるレコードが含まれていたとしても、その他のレコードは正常に処理します。処理対象の中にエラーとなるレコードが含まれるかを事前に確認したい場合は、check メソッドを利用して下さい。

一覧型の場合

ヘッダー明細型の場合

実装の際の注意点

ドキュメント生成を行う DocumentGenerator#generate は、以下の場合に「You have uncommitted work pending. Please commit or rollback before calling out」のエラーが発生します。

以下のように @future(callout=true) のアノテーションを付加したメソッドを設けて、これを呼び出すように実装する事で、上記の問題を回避する事ができます。