Skip to main content

複数レコードをinvoiceAgent 文書管理にアーカイブする

商談オブジェクトの複数レコードのデータを、レコードごとにPDFファイルに出力し、クラウド版のinvoiceAgent 文書管理(以下、iA文書管理)にアーカイブします。

完了予定日(CloseDate)が、プロシージャーを実行時の年月と同じレコードを出力対象とします。クエリー条件で使用するパラメーターの値をApex クラスで指定し、プロシージャーのSOQLにより対象レコードを絞り込みます。

参考

  • 一度に処理できる総レコードの数の上限は、SVF Cloudのプランごとに決まっています。上限の詳細は、「総レコード数の上限」を参照してください。

  • プロシージャーの実行1回あたりの処理時間が長すぎると、エラーになります。

    その場合は、「複数レコードをプリンターから印刷する」のように、1回のプロシージャー実行で処理するレコード数を調整する方法を検討してください。

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

  • PDFファイルをiA文書管理にアーカイブするために、次の設定をします。

    • ボタンの作成時

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

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

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

  • レコードごとにファイルを区切るために、次の設定をします。

    • ボタンの作成時

      icon_menu_Button.png[SVFボタン設定]画面-[SVFボタン情報]-icon_setting.png-[ファイル]タブ-[帳票レイアウトの切り替え]で、[レコード単位で切り替える]を有効化

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

    • パラメーターの設定時

      名前

      既定値

      クォーテーション

      説明

      limit

      1000

      なし

      対象レコード数の上限を指定します。

      month

      (設定なし)

      なし

      Apex クラス「SvfCloudIAQueueable」によって、実行時点の日付を元にした値が指定されます。

      メインクエリー条件の[フィルター]に使用します。

      year

      (設定なし)

      なし

      Apex クラス「SvfCloudIAQueueable」によって、実行時点の日付を元にした値が指定されます。

      メインクエリー条件の[フィルター]に使用します。

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

    • クエリー条件の設定時

      フィルター

      ソート

      リミット

      オフセット

      メインクエリー条件

      CALENDAR_YEAR(CloseDate)=${year} and CALENDAR_MONTH(CloseDate)=${month} *1

      (設定なし)

      ${limit}

      ${offset}

      *1 商談の完了予定日(CloseDate)で対象レコードを絞り込みます。

Apex クラスのサンプル

illust_procedure_SPACloud.png

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