5-3-2. 複数の書類を一括送信する
送信処理の1回の呼び出しで、1件以上の書類を一括で送信する Apex クラス実装例を示します。
例では、1件以上の取引先責任者に対して、取引先責任者ごとに [ファイル] 関連リストにアップロードされた添付ファイルを送信します。
注意事項
この例を実行するには、ユーザ設定に Apex クラス実行ユーザのクラウドサインクライアント ID を保存しておく必要があります。
ガバナ制限を超えると実行時例外が発生します。「送信処理APIで書類を送信する」より、 [送信およびリマインド処理で消費するコールアウト数] を参考に、コールアウト数を考慮の上でご利用ください。
解説
ApiExecutor.beforeExecute() で送信に必要な事前設定をチェックします。
エラーがない場合は、取引先責任者ごとに、送信先および添付ファイルの情報から ApiExecutor.Document オブジェクトを生成し、送信パラメータをリストに設定します。ApiExecutor.send() で書類の送信に成功すると、送信した書類情報がクラウドサイン管理に追加されます。
書類送信後、取引先責任者ごとに、ApiExecutor.Result オブジェクトを確認し、成功した場合はクラウドサイン管理の追加属性(カスタム項目)の更新、失敗した場合はエラーメッセージの表示などを行います。
クラスやメソッドの詳細は、「API リファレンス」をご参照ください。
// 送信処理APIインスタンス生成 CloudSign.ApiExecutor apiExecutor = new CloudSign.ApiExecutor(); // 送信処理API実行前処理 List<String> messages = apiExecutor.beforeExecute(); if (messages.size() > 0) { System.debug(String.join(messages, '\r\n')); return; } // 取引先責任者を【送信先】にする List<Contact> contacts = new List<Contact>([SELECT Id, Name, Email, Account.Name FROM Contact WHERE Name LIKE '山田%']); // 【送信先】に関連付けられたファイルの最新バージョンを取得 List<Id> sendObjectIds = new List<Id>(new Map<Id, Contact>(contacts).keySet()); List<ContentDocumentLink> contentDocumentLinks = [SELECT Id, LinkedEntityId, ContentDocument.LatestPublishedVersionId FROM ContentDocumentLink WHERE LinkedEntityId IN :sendObjectIds ORDER BY ContentDocument.CreatedDate ASC]; // 送信パラメータリスト List<CloudSign.ApiExecutor.SendParam> sendParams = new List<CloudSign.ApiExecutor.SendParam>(); // 【送信先】ごとに書類情報を生成 for (Contact contact : contacts) { // 送信先 CloudSign.ApiExecutor.Participant participant = new CloudSign.ApiExecutor.Participant(); participant.setId(contact.Id); participant.setName(contact.Name); participant.setEmail(contact.Email); participant.setOrganization(contact.Account.Name); // 送信先リスト List<CloudSign.ApiExecutor.Participant> participants = new List<CloudSign.ApiExecutor.Participant>(); participants.add(participant); // 添付ファイルリスト List<Id> contentVersionIds = new List<Id>(); for (ContentDocumentLink contentDocumentLink : contentDocumentLinks) { if (contact.Id == contentDocumentLink.LinkedEntityId) { contentVersionIds.add(contentDocumentLink.ContentDocument.LatestPublishedVersionId); } } // 書類 CloudSign.ApiExecutor.Document document = new CloudSign.ApiExecutor.Document(); document.setTitle('契約書の送付 ' + contact.Name); document.setAccessCode('3txqufj7o0'); document.setLanguageCode(CloudSign.ApiExecutor.MailLanguage.JAPANESE); document.setCanTransfer(false); document.setParticipants(participants); document.setContentVersionIds(contentVersionIds); // 送信パラメータを生成(【送信先】と書類情報を設定) CloudSign.ApiExecutor.SendParam sendParam = new CloudSign.ApiExecutor.SendParam(); sendParam.setSendObjectId(contact.Id); sendParam.setDocument(document); // 送信パラメータリストにパラメータを追加 sendParams.add(sendParam); } // 送信処理API実行(複数処理) List<CloudSign.ApiExecutor.Result> results = apiExecutor.send(sendParams); // 結果取得 for (CloudSign.ApiExecutor.Result result : results) { if (result.isSuccess()) { // 成功 System.debug('クラウドサイン管理レコードID:' + String.valueOf(result.getCloudSignControlId())); } else { // パラメータエラー for (String error : result.getParamErrors()) { System.debug(error); } // クラウドサインWebAPIレスポンス if (result.getApiResponse() != null) { CloudSign.ApiExecutor.ApiResponse response = result.getApiResponse(); System.debug('method:' + response.getMethod()); System.debug('endpoint:' + response.getEndpoint()); System.debug('code:' + response.getCode()); System.debug('error:' + response.getError()); System.debug('message:' + response.getMessage()); } // DML エラー if (result.getDmlErrors().size() > 0) { for (Database.Error error : result.getDmlErrors()) { System.debug('DMLError statusCode:' + error.getStatusCode()); System.debug('DMLError message:' + error.getMessage()); System.debug('DMLError fields:' + error.getFields()); } } } }