Skip to main content

単一レコードをPDFファイルに出力する

商談オブジェクトのレコードのうち、Apex クラスが指定したレコードをPDFファイルに出力し、レコードにアップロードするサンプルです。

参考

プロシージャーは、出力したPDFファイルをレコードに添付できません。そのため、ダウンロードしたPDFファイルをレコードにアップロードする処理は、Apex クラスが行います。

ボタンとプロシージャーの設定のポイント

  • PDFファイルを出力するために、次の設定をします。

    • ボタンの作成時

      icon_menu_Button.png[SVFボタン設定]画面-[SVFボタン情報]-icon_setting.png-[アクション]タブで、icon_pdf.pngを有効化

    • プロシージャーの作成時

      icon_menu_procedure.png[プロシージャー]画面-[アクション]で、「PDF」を選択

  • パラメーターを設定します。

    • パラメーターの設定時

      名前

      既定値

      クォーテーション

      説明

      id

      (設定なし)

      なし *1

      データを出力するレコード IDのリストです。

      *1 Apex クラスでidのリストを作成時にクォーテーションを付加するため、ここではクォーテーションは付加しません。

  • レコードの抽出条件を、メインクエリー条件で設定します。

    • クエリー条件の設定時

      フィルター

      ソート

      リミット

      オフセット

      メインクエリー条件

      id = ${id}

      (設定なし)

      ${limit}

      ${offset}

Apex クラスのサンプル

illust_procedure_PDFAttachemnt.png
  • enqueueJob

    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;
        }
    }
}