複数レコードをinvoiceAgent 文書管理にアーカイブする
商談オブジェクトの複数レコードのデータを、レコードごとにPDFファイルに出力し、クラウド版のinvoiceAgent 文書管理(以下、iA文書管理)にアーカイブします。
完了予定日(CloseDate)が、プロシージャーを実行時の年月と同じレコードを出力対象とします。クエリー条件で使用するパラメーターの値をApex クラスで指定し、プロシージャーのSOQLにより対象レコードを絞り込みます。
参考
一度に処理できる総レコードの数の上限は、SVF Cloudのプランごとに決まっています。上限の詳細は、「総レコード数の上限」を参照してください。
プロシージャーの実行1回あたりの処理時間が長すぎると、エラーになります。
その場合は、「複数レコードをプリンターから印刷する」のように、1回のプロシージャー実行で処理するレコード数を調整する方法を検討してください。
ボタンとプロシージャーの設定のポイント
PDFファイルをiA文書管理にアーカイブするために、次の設定をします。
ボタンの作成時
[SVFボタン設定]画面-[SVFボタン情報]-
-[アクション]タブで、
を有効化
プロシージャーの作成時
[プロシージャー]画面-[アクション]で、「invoiceAgent」を選択
レコードごとにファイルを区切るために、次の設定をします。
ボタンの作成時
[SVFボタン設定]画面-[SVFボタン情報]-
-[ファイル]タブ-[帳票レイアウトの切り替え]で、[レコード単位で切り替える]を有効化
パラメーターを設定します。
パラメーターの設定時
名前
既定値
クォーテーション
説明
limit
1000
なし
対象レコード数の上限を指定します。
month
(設定なし)
なし
Apex クラス「SvfCloudIAQueueable」によって、実行時点の日付を元にした値が指定されます。
メインクエリー条件の[フィルター]に使用します。
year
(設定なし)
なし
Apex クラス「SvfCloudIAQueueable」によって、実行時点の日付を元にした値が指定されます。
メインクエリー条件の[フィルター]に使用します。
レコードの抽出条件を、メインクエリー条件で設定します。
クエリー条件の設定時
フィルター
ソート
リミット
オフセット
メインクエリー条件
CALENDAR_YEAR(CloseDate)=${year} and CALENDAR_MONTH(CloseDate)=${month} *1
(設定なし)
${limit}
${offset}
*1 商談の完了予定日(CloseDate)で対象レコードを絞り込みます。
Apex クラスのサンプル

Apex クラス「SvfCloudIAQueueable」の呼び出しを、Apex ジョブキューに追加します。
SVF Cloud Managerで作成したプロシージャー「OpportunityProcedure_IA」を呼び出します。
SvfCloudProcedure(共通のApex クラス)
すべてのサンプルが使用する、共通のApex クラスです。
enqueueJob
// Apex ジョブキューにプロシージャー呼び出し処理を追加し、非同期に実行します。 SvfCloudProcedure proc = new SvfCloudProcedure ( 'a0xxxXXX', // テナントID 'svfCloudCertName', // 「証明書と鍵の管理」に登録した証明書の名前 UserInfo.getUserName(), // SVF CloudからSalesforce RESTを実行するSalesforceユーザ名 'OpportunityProcedure_IA' // SVF Cloud Managerで定義したプロシージャーの名前 ); System.enqueueJob( new SvfCloudIAQueueable( proc ));
SvfCloudIAQueueable
global with sharing class SvfCloudIAQueueable implements Queueable, Database.AllowsCallouts{ private SvfCloudProcedure proc; global SvfCloudIAQueueable(SvfCloudProcedure proc){ this.proc = proc; } public void execute(QueueableContext context) { try { // クエリー条件のパラメーターを設定します。 // 実行時点の年と月を送信します。 Date today = Date.today(); Map<String,String> params = new Map<String,String>{ 'year' => String.valueOf(today.year()), 'month' => String.valueOf(today.month()) }; // プロシージャーを実行します。 String actionId = proc.executeProcedure(null, params); System.debug('actionID: '+actionId); // 処理状況を確認します。 proc.waitStatus(60); } catch (SvfCloudProcedure.SvfCloudException e){ System.debug(e); throw e; } catch (CalloutException e){ System.debug(e); throw e; } } }