単一レコードをPDFファイルに出力する
商談オブジェクトのレコードのうち、Apex クラスが指定したレコードをPDFファイルに出力し、レコードにアップロードするサンプルです。
参考
プロシージャーは、出力したPDFファイルをレコードに添付できません。そのため、ダウンロードしたPDFファイルをレコードにアップロードする処理は、Apex クラスが行います。
ボタンとプロシージャーの設定のポイント
PDFファイルを出力するために、次の設定をします。
ボタンの作成時
[SVFボタン設定]画面-[SVFボタン情報]-
-[アクション]タブで、
を有効化
プロシージャーの作成時
[プロシージャー]画面-[アクション]で、「PDF」を選択
パラメーターを設定します。
パラメーターの設定時
名前
既定値
クォーテーション
説明
id
(設定なし)
なし *1
データを出力するレコード IDのリストです。
*1 Apex クラスでidのリストを作成時にクォーテーションを付加するため、ここではクォーテーションは付加しません。
レコードの抽出条件を、メインクエリー条件で設定します。
クエリー条件の設定時
フィルター
ソート
リミット
オフセット
メインクエリー条件
id = ${id}
(設定なし)
${limit}
${offset}
Apex クラスのサンプル

Apex クラス「SvfCloudPDFAttachmentQueueable」の呼び出しを、Apex ジョブキューに追加します。出力対象のレコードも指定します。
SvfCloudPDFAttachmentQueueable
SVF Cloud Managerで作成したプロシージャー「OpportunityProcedure_PDF」を呼び出します。ダウンロードしたPDFファイルのレコードへの添付も行います。
SvfCloudProcedure(共通のApex クラス)
すべてのサンプルが使用する、共通のApex クラスです。
enqueueJob
// Apex ジョブキューにプロシージャー呼び出し処理を追加し、非同期に実行します。 SvfCloudProcedure proc = new SvfCloudProcedure( 'a0xxxXXX', // テナントID 'svfCloudCertName', // 「証明書と鍵の管理」に登録した証明書の名前 UserInfo.getUserName(), // SVF CloudからSalesforce RESTを実行するSalesforceユーザ名 'OpportunityProcedure_PDF' // SVF Cloud Managerで定義したプロシージャーの名前 ); System.enqueueJob( new SvfCloudPDFAttachmentQueueable( proc, '006xxxxxxxxxxxx' // レコードID ));
SvfCloudPDFAttachmentQueueable
global with sharing class SvfCloudPDFAttachmentQueueable implements Queueable, Database.AllowsCallouts{ private SvfCloudProcedure proc; private String recordId; global SvfCloudPDFAttachmentQueueable(SvfCloudProcedure proc, String recordId){ this.proc = proc; this.recordId = recordId; } public void execute(QueueableContext context) { List<String> recordIds = new List<String>{ recordId }; Blob pdf = null; try { // プロシージャーを実行します。 String actionId = proc.executeProcedure(recordIds, null); System.debug('actionID: '+actionId); // 処理状況を確認します。 proc.waitStatus(60); // PDFファイルを取得します。 pdf = proc.downloadArtifact(); // レコードに添付します。 Attachment attachment = new Attachment(); attachment.Name = proc.action.artifact.path; // SVF CloudのSVFボタン設定に基づくファイル名 attachment.ParentId = recordId; attachment.Body = pdf; attachment.ContentType = proc.artifactContentType; Database.SaveResult saveResult = Database.insert(attachment, false); if (!saveResult.isSuccess()) { // ERROR System.debug('error attachement.'); } } catch (SvfCloudProcedure.SvfCloudException e){ System.debug(e); throw e; } catch (CalloutException e){ System.debug(e); throw e; } } }