5-3-1. 個別に送信する

1件ずつ書類を個別に送信する Apex クラス実装例を示します。
例では、送信先の取引先責任者に対して、[ファイル] 関連リストにアップロードされた添付ファイルを送信します。

注意事項

この例を実行するには、ユーザ設定に Apex クラス実行ユーザのクラウドサインクライアント ID を保存しておく必要があります。

解説

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

// 取引先責任者を【送信先】にする
Contact sendObject = [SELECT Id, AccountId FROM Contact WHERE Name = '山田 太郎' Limit 1];

// 送信先リスト
List<CloudSign.ApiExecutor.Participant> participants = new List<CloudSign.ApiExecutor.Participant>();
// 【送信先】と同じ取引先の取引先責任者を送信先リストに追加
for (Contact contact : [SELECT Id, Name, Email, Account.Name
                        FROM Contact
                        WHERE AccountId = :sendObject.AccountId
                        ORDER BY CreatedDate ASC]) {
    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);

    participants.add(participant);
}

// 添付ファイルリスト
List<Id> contentVersionIds = new List<Id>();
// 【送信先】に関連付けられたファイルの最新バージョンを添付(ContentVersionのレコードIDをリストに追加)
for (ContentDocumentLink contentDocumentLink : [SELECT Id, ContentDocument.LatestPublishedVersionId
                                                FROM ContentDocumentLink
                                                WHERE LinkedEntityId = :sendObject.Id
                                                ORDER BY ContentDocument.CreatedDate ASC]) {
    contentVersionIds.add(contentDocumentLink.ContentDocument.LatestPublishedVersionId);
}

// 書類
CloudSign.ApiExecutor.Document document = new CloudSign.ApiExecutor.Document();
document.setTitle('契約書の送付');
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(sendObject.Id);
sendParam.setDocument(document);

// 送信処理API実行
CloudSign.ApiExecutor.Result result = apiExecutor.send(sendParam);
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());
        }
    }
}