global
Обзор
Adobe Acrobat Sign для Salesforce: руководство для разработчиков призвано помочь разработчикам Salesforce узнать об объектах и параметрах, необходимых для интеграции вашего пакета Salesforce с Adobe Acrobat Sign.
Дополнительные сведения см. в следующих разделах:
Объекты Adobe Acrobat Sign for Salesforce могут измениться в будущем выпуске. Если вы создаете пользовательское решение, которое зависит от измененных объектов, вам может потребоваться обновить вашу настройку.
- Если вам нужно знать, когда соглашение полностью подписано, реализуйте триггер Apex на объекте echosign_dev1__SIGN_Agreement__c, после или до обновления (в зависимости от сценария использования и требований). Когда поле echosign_dev1__Status__c изменится на Подписано или Утверждено или другие окончательные статусы, соглашение будет завершено.
- Если вам нужно знать, когда каждый отдельный подписанный PDF вставлен, например, если вам нужно получить каждый промежуточный подписанный PDF, то реализуйте Apex триггер на объектах Attachment или ContentVersion, после вставки, и следите за родительским соглашением и именем, которое заканчивается на «- signed.pdf» или «- approved.pdf» или другим окончательным статусом.
- Если вам нужно знать, когда отдельный получатель подписал или одобрил, реализуйте триггер Apex на объекте echosign_dev1__SIGN_Recipients__c, после или до обновления (в зависимости от сценария использования и требований). Когда поле echosign_dev1__Status__c изменит статус Подписано или Утверждено или другие окончательные статусы, получатель будет завершен.
- Если вам нужно знать, когда происходит определенное событие, которое является частью процесса подписания, например, договор отправлен на подпись или отправлено напоминание, можно создать триггер на объекте событий договора (echosign_dev1__SIGN_AgreementEvent__c) и проверить тип события.
- Имена окончательного статуса соглашения для завершенного соглашения следующие: «Подписано», «Одобрено», «Принято», «Форма заполнена» и «Доставлено».
- Имена статусов окончательного соглашения для расторгнутого соглашения следующие: «Отменено/отказано», «Отменено/отказано», «Истекло».
В версии 21 порядок обновлений изменился. Ниже приведена последовательность обновления соглашения и связанных с ним объектов:
- Вложения
- Получатели
- Документ (состояние и другие атрибуты)
- События соглашения
- Каналы Chatter
Используемый метод Apex
Начиная с Acrobat Sign for Salesforce V 21.0, все асинхронные процессы (включая автоматические обновления и сопоставления данных) используют метод Queueable вместо метода Future, как рекомендует Salesforce.
С этим изменением все задания настройки, которые добавляются в очередь Salesforce для процесса автоматического обновления или сопоставления данных, будут завершаться с ошибкой: "System.LimitException: Too many queueable jobs added to queue:2."
Сбой происходит потому, что процесс с возможностью постановки в очередь может добавить только одно дочернее задание с возможностью постановки в очередь, которое уже занято Acrobat Sign. Подробности см. в разделе Лимиты очередей Apex.
Если состояние соглашения не изменяется или сопоставление данных выполняется некорректно, может отобразиться следующая ошибка: «При создании цепочки заданий можно добавить только одно задание из выполняемого задания с помощью System.enqueueJob. Это означает, что у каждого родительского задания, добавляемого в очередь, может быть только одно дочернее задание. Запуск нескольких дочерних заданий из одного и того же задания, добавляемого в очередь, не поддерживается».
Чтобы устранить эту ошибку, найдите ошибочный триггер, построитель процесса или рабочий процесс и деактивируйте его или переключите его на использование синхронного вызова или запланируйте его на более позднее время.
Служба шаблона соглашения
Служба шаблона соглашения отображается как глобальная служба Apex в управляемом пакете. Это позволяет коду Apex за пределами управляемого пакета загружать соглашения на основе существующих шаблонов соглашений. Класс и все открытые методы помечены как глобальные, чтобы разрешить такой доступ.
Служба Apex доступна через класс вызова: echosign_dev1.AgreementTemplateService
Методы
|
|
static Id load() |
Загружает соглашение с использованием шаблона соглашения, помеченного как шаблон по умолчанию и не имеющего типа основного объекта. |
|
global |
static Id load(String templateId) |
Загружает соглашение, используя указанный идентификатор шаблона соглашения, который не имеет типа основного объекта.
|
|
global |
static Id load(String templateId, String masterId) |
Загружает соглашение, используя указанный идентификатор шаблона соглашения и указанный идентификатор основной записи, тип которой должен соответствовать типу основного объекта, настроенного в указанном шаблоне соглашения. |
|
global |
static Id load(String templateId, String masterId, Map<String,AgreementTemplateVariable> agreementTemplateVariables) |
Загружает соглашение, используя указанный идентификатор шаблона соглашения и указанный идентификатор основной записи, тип которой должен соответствовать типу основного объекта, настроенного в указанном шаблоне соглашения. Также передает указанные переменные времени выполнения в виде пар имя-значение.
|
|
global |
static List<AgreementTemplateService.AgreementTemplateBasicInfo> getAgreementTemplateList(AgreementTemplateListOptions options) |
Получает список шаблонов соглашений на основе параметров фильтрации. Возвращает пустой список, если не найдено ни одного шаблона соглашения с заданными параметрами фильтрации. |
|
global |
static AgreementTemplateService.AgreementTemplateDetails getAgreementTemplateDetails(String templateId) |
Получает сведения о шаблоне соглашения для указанного идентификатора шаблона соглашения. Возвращает пустой объект, если шаблон соглашения не найден. |
|
global |
static String getAgreementTemplateUrl(String templateId) |
Получает url для редактирования шаблона соглашения, заданный идентификатором шаблона соглашения. |
|
global |
static String getNewAgreementTemplateUrl() |
Получает url для создания нового шаблона соглашения в Adobe Sign. |
Конструкторы
|
Доступ |
Подпись |
|---|---|
|
global |
AgreementTemplateListOptions() |
|
global |
AgreementTemplateListOptions(String masterObjectType, Boolean isActive, Boolean hasAttachment, Boolean hasRecipient, Boolean autoSend) |
Свойства глобального класса
|
Доступ |
Имя |
|---|---|
|
global |
masterObjectType |
|
global |
isActive |
|
global |
hasAttachment |
|
global |
hasRecipient |
|
global |
autoSend |
При запросе шаблонов договоров, если поле, указанное выше, имеет нулевое значение, фильтр по соответствующему полю не применяется.
|
Доступ |
Имя |
|---|---|
|
global |
name |
|
global |
recordId |
|
global |
url |
|
global |
isDefault |
|
global |
daysUntilExpiration |
|
global |
language |
|
Доступ |
Имя |
|---|---|
|
global |
message |
|
global |
ccList |
|
global |
dataMappingName |
|
global |
mergeMappingName |
|
global |
url |
|
global |
получатели |
|
Доступ |
Имя |
|---|---|
|
global |
recipientRole |
|
global |
recipientType |
|
global |
recipientName |
|
global |
signOrder |
Переменные среды выполнения
У глобального класса echosign_dev1.AgreementTemplateVariable есть два следующих глобальных поля:
- name: имя переменной, которое должно совпадать с именем переменной времени выполнения, настроенной в шаблоне соглашения.
- value: значение переменной, используемое во время загрузки шаблона. Значение зависит от того, где была использована переменная. Например, для получателя это должен быть идентификатор записи контакта, потенциального клиента или пользователя либо адрес электронной почты. Для переменной документа это должен быть идентификатор записи вложения.
Результат
Каждый метод либо возвращает идентификатор вновь созданной записи соглашения, либо вызывает исключение с подробным сообщением об ошибке, если что-то пошло не так во время операции загрузки.
Служба шаблона Adobe e-Sign API раскрывается как глобальная служба Apex управляемого пакета. Это позволяет коду Apex за пределами управляемого пакета вызывать набор API Adobe e-Sign через эти обертки. Обертки значительно упрощают вызов API, поскольку потребителям не нужно создавать модель данных запроса и ответа. Также потребителям не нужно обрабатывать преобразование данных Salesforce в модели данных e-Sign. Большая часть сложности абстрагируется от потребителя. Например, для отправки соглашения потребитель просто передает идентификатор записи соглашения, а сервис обрабатывает запрос, извлекает все необходимые данные, передает их по API и анализирует результат.
Класс и все открытые методы помечены как глобальные, чтобы разрешить такой доступ.
- v17 и ниже вызывает SOAP API
- v18 и выше использует REST API.
Служба Apex доступна через следующий класс вызова: echosign_dev1.EchoSignApiService
Улучшение Apex API для других получателей
Начиная с версии 24.14 или более поздней версии, обновленный Apex API позволяет заменить или добавить дополнительных получателей, а доступ осуществляется в рамках глобального класса EchoSignApiService. Уже введено два новых элемента:
- Глобальная функция:
/**
* Input params:
* toBeChangedRecipientId: SIGN_Recipient__c Id
* newRecipientStr: JSON string of SIGN_Recipient__c of a new recipient for recipient replacement or alternate
* changeType: REPLACE or ALTERNATE
*/
global static void changeRecipient(Id toBeChangedRecipientId, String newRecipientStr, RECIPIENT_CHANGE_TYPE changeType )
- Глобальное перечисление: RECIPIENT_CHANGE_TYPE {REPLACE, ALTERNATE}
Пример кода для вызова этого API для получателей (тип получателя: адрес электронной почты)
// сначала выполняется запрос всех получателей, связанных с соглашением
List<SIGN_Recipients__c> recipients = [SELECT Id, echosign_dev1__Agreement__c, echosign_dev1__Email_Address__c, echosign_dev1__ParticipantSet__c, echosign_dev1__Recipient_Type__c, echosign_dev1__Order_Number__c FROM echosign_dev1__SIGN_Recipients__c where echosign_dev1__Agreement__c = 'a0P7X000008Cc1GUAS'];
SIGN_Recipients__c newRecipient = null;
SIGN_Recipients__c replacedRecipient = null;
// поиск получателя, которого нужно заменить или изменить
// в этом случае поиск получателя следует выполнять по адресу электронной почты.
// Дополнительные условия можно добавить для поиска получателя, которого нужно заменить или изменить
for(SIGN_Recipients__c recipient: recipients) {
if (rep.echosign_dev1__Email_Address__c == 'someUser@example.com') {
newRecipient = recipient.clone(false, true, false, false);
replacedRecipient = recipient;
}
}
// обновление адреса электронной почты для нового получателя
newRecipient.echosign_dev1__Email_Address__c = ''someNewUser@abc.com';
// создание последовательности в строке json
String newRecipientStr = JSON.serialize(newRecipient);
Try {
echosign_dev1.EchoSignApiService.changeRecipient(replacedRecipient.Id, newRecipientStr, EchoSignApiService.RECIPIENT_CHANGE_TYPE.REPLACE);
} catch (Exception ex) {
// обработка исключения и повторное выведение при необходимости
}
Методы
global |
static void cancelDocument(Id agreementId) |
Отменяет соглашение с указанным идентификатором соглашения. |
global |
static echosign_dev1.EchoSignApiService.DocumentInfo getDocumentInfo(Id agreementId) |
Получает подробную информацию для указанного идентификатора соглашения. |
global |
static List<EchoSignApiService.SigningUrl> getSigningUrls(Id agreementId) |
Получает все URL-адреса подписания для указанного идентификатора соглашения. |
global |
static void removeDocument(Id agreementId) |
Отменяет соглашение с указанным идентификатором соглашения и удаляет запись соглашения в Salesforce (соглашение не удаляется из учетной записи Adobe e-Sign). |
| global | static void replaceSigner(Id replacementRecipientId) |
Устарел с версии V 24.14. Версии пакетов до v24.14 все еще могут использовать их, поскольку они полагаются на API V5. |
| global | static void replaceSigner(Id replacementRecipientId, String message) |
Устарел с версии V 24.14. Версии пакетов до v24.14 все еще могут использовать их, поскольку они полагаются на API V5. |
global |
static echosign_dev1.EchoSignApiService. SendDocumentResult sendDocument(Id agreementId) |
Отправляет соглашение с указанным идентификатором соглашения, возвращает результат с ключом документа и URL-адресами. |
global |
static void sendReminder(Id agreementId) |
Отправляет напоминание текущему подписанту для указанного идентификатора соглашения. |
| global | static void updateAgreement(Id agreementId) | Обновляет соглашение с указанным идентификатором agreementId |
| global | static EchoSignApiService.AgreementViewUrl getViewAgreementUrl(Id agreementId) |
Извлекает страницу просмотра/управления из Sign для указанного ID соглашения, которое имеет свойство просмотра. Примечание. По соображениям безопасности созданный URL соглашения имеет только временный срок действия, поэтому система генерирует REST-HTTPS вызов для получения нового URL из служб Adobe Sign. |
| global | static void changeRecipient(Id toBeChangedRecipientId, String newRecipientStr, EchoSignApiService.RECIPIENT_CHANGE_TYPE changeType ) | Доступно, начиная с версии 24.14. Этот API-интерфейс изменяет получателей соглашения. |
Внутренние классы
- Глобальный класс: DocumentHistoryEvent
|
Доступ |
Имя |
|---|---|
|
global |
String eventType |
|
global |
String participantEmail |
|
Доступ |
Подпись |
|---|---|
|
global |
DocumentHistoryEvent() |
- Глобальный класс: DocumentInfo
|
Доступ |
Имя |
|---|---|
|
global |
Map<string,list> historyByEmail |
|
global |
Map<String,EchoSignApiService.ParticipantInfo> |
|
global |
Map<String,EchoSignApiService.ParticipantInfo> |
|
global |
String senderEmail |
|
global |
String status |
|
Доступ |
Подпись |
|---|---|
|
global |
DocumentInfo() |
- Глобальный класс: ParticipantInfo
|
Доступ |
Имя |
|---|---|
|
global |
String company |
|
global |
String email |
|
global |
String name |
|
global |
String status |
|
global |
String title |
|
Доступ |
Подпись |
|---|---|
|
global |
ParticipantInfo() |
- Глобальный класс: SendDocumentResult
|
Доступ |
Имя |
|---|---|
|
global |
String documentKey |
|
global |
Exception error |
|
global |
String url |
|
Доступ |
Подпись |
|---|---|
|
global |
SendDocumentResult() |
- Глобальный класс: SigningUrl
|
Доступ |
Имя |
|---|---|
|
global |
String email |
|
global |
String esignUrl |
|
global |
String simpleEsignUrl |
|
Доступ |
Подпись |
|---|---|
|
Global |
|
Представляет основные действия с соглашениями e-Sign на массовом уровне, позволяя выполнить операцию над набором соглашений. Этот класс реализует интерфейс Salesforce Database.Batchable. Он может обрабатывать любое количество записей, которые будут разбиты на наборы по 5 и обрабатывать каждый набор как отдельную транзакцию, что позволяет соблюдать ограничения губернатора.
Служба пакетной обработки Apex доступна через следующий класс вызова: echosign_dev1.EchoSignActionBatch
Параметры
Для инициализации пакетной операции необходимо указать следующие параметры.
- Список идентификаторов записей соглашений, над которыми следует выполнить указанное действие: у действия могут быть любые из поддерживаемых значений: напомнить, отправить, отменить, удалить или обновить.
- Идентификатор сеанса текущего пользователя: требуется только для типа действия «Обновить».
- Запись пользователя отправителя: используется для уведомления этого пользователя по электронной почте после завершения массовой обработки.
Пример использования
User submitterUser = UserInfo.getUserId();
EchoSignActionBatch batch = new EchoSignActionBatch( agreementIds, 'Remind', UserInfo.getSessionId(), submitterUser); Id syncProcessId = Database.executeBatch(batch, 5);
Принимает SOQL-запрос и идентификатор записи шаблона соглашения. Запрос выполняется для получения набора записей основных объектов, каждая из которых затем проходит через предоставленный шаблон соглашения для создания записи соглашения. Этот класс реализует интерфейс Salesforce Database.Batchable. Он может обрабатывать любое количество записей, которые будут разбиты на наборы по 5 и обрабатывать каждый набор как отдельную транзакцию, что позволяет соблюдать ограничения губернатора.
Типы записей, возвращаемые запросом SOQL, должны соответствовать типу основного объекта шаблона соглашения. Для каждой записи вызывается служба шаблона соглашения.
Служба пакетной обработки Apex отображается через следующий класс вызова:
echosign_dev1.AgreementTemplateBatch
Параметры
Для инициализации пакетной операции необходимо указать следующие параметры.
- SOQL-запрос для выполнения: должен содержать идентификатор записи в качестве выбранного поля. Остальные поля не являются обязательными.
- Идентификатор записи шаблона соглашения: используется вместе с идентификатором основной записи для загрузки соглашения.
Пример использования
String agreementTemplateId = [SELECT Id from echosign_dev1__Agreement_Template__c where Name = 'Default Template']; String soqlQuery = 'SELECT Id from Contact where Account.IsActive = true';
AgreementTemplateBatch batch = new AgreementTemplateBatch(soqlQuery, agreementTemplateId); Id syncProcessId = Database.executeBatch(batch, 5);
Принимает список идентификаторов записей основных объектов и тип основного объекта, которые затем запрашиваются, и каждый из них затем прогоняется через предоставленный шаблон соглашения для создания записи соглашения. Этот класс реализует интерфейс Salesforce Database.Batchable. Он может обрабатывать любое количество записей, которые будут разбиты на наборы по 5 и обрабатывать каждый набор как отдельную транзакцию, что позволяет соблюдать ограничения губернатора.
Предоставленный тип основного объекта должен соответствовать предоставленному типу основного объекта шаблона соглашения. Для каждой записи вызывается служба шаблона соглашения.
Служба пакетной обработки Apex отображается через следующий класс вызова:
echosign_dev1.AgreementTemplateServiceBatch
Параметры
Для инициализации пакетной операции необходимо указать следующие параметры.
- Список идентификаторов основных записей.
- Идентификатор записи шаблона соглашения: используется вместе с основными записями для загрузки соглашения.
- Имя основного объекта для запроса основных записей.
Пример использования
String agreementTemplateId = [SELECT Id from echosign_dev1__Agreement_Template__c where Name = 'Default Template'];
AgreementTemplateBatch batch = new AgreementTemplateServiceBatch(new List<Id>{'01p50000000HoMB'}, agreementTemplateId, 'Contact');
Id syncProcessId = Database.executeBatch(batch, 5);
Служба шаблона соглашения
Служба шаблонов соглашений отображается как веб-служба Salesforce REST в управляемом пакете. Это позволяет внешним системам за пределами Salesforce org загружать соглашения на основе существующих шаблонов соглашений. Обратитесь к статье Создание REST API с помощью Apex REST для получения более подробной информации о том, как получить доступ и вызвать пользовательские REST Apex сервисы из Salesforce. При вызове необходимо предоставить действительный идентификатор сеанса для аутентификации и авторизации.
Веб-служба открывается по следующему URL-адресу:
https://<instance_name>.salesforce.com/services/apexrest/echosign_dev1/template/load/<template_id>?masterId=<master_id>&varName1=var Value1&varName2=varValue2
- Имя экземпляра зависит от вашего экземпляра org.
- https://_<instance_name>_.salesforce.com/services/apexrest/echosign_dev1/template/load/<template_id> is a POST HTTP method for package versions 20.0 and later.
- В версиях до v20 используется метод GET.
ID шаблона
Последняя часть URL — это ID записи шаблона соглашения в текущей организации Salesforce, которая должна использоваться для загрузки соглашения. Эта часть URL является необязательной. Если она опущена, будет загружен шаблон соглашения, отмеченный как шаблон по умолчанию. Если идентификатор шаблона опущен и не существует идентификатора шаблона соглашения по умолчанию, будет выдана ошибка.
Идентификатор шаблона может быть в формате 15 или 18 символов.
Идентификатор основной записи
Параметр masterId указывает, какая основная запись должна использоваться для загрузки соглашения из конкретного шаблона соглашения. Этот параметр является необязательным, но должен быть указан для любого шаблона соглашения, который определяет тип мастер-объекта и ссылается на этот мастер-объект в шаблоне.
Идентификатор основной записи может быть в формате 15 или 18 символов.
Переменные среды выполнения
Любые дополнительные параметры используются как переменные времени выполнения, как пары имя-значение, используемые для заполнения любых переменных времени выполнения, указанных в шаблоне соглашения.
Результат
Веб-служба REST возвращает объект LoadResult, который содержит следующие поля:
- agreementId : Если операция загрузки соглашения прошла успешно, это поле содержит идентификатор вновь созданной записи соглашения.
- error : Если во время загрузки соглашения произошла какая-либо ошибка, это поле будет содержать подробное сообщение об ошибке.
Возможность фонового обслуживания позволяет потребителям пакета вызывать различные действия над объектом соглашения путем обновления поля Background Action (echosign_dev1 Background_Actions c) до соответствующего значения. Как только значение поля изменяется с пустого значения или другого значения на одно из следующих значений, действие запускается от триггера, который является частью управляемого пакета e-Sign.
- Напомнить
- Отправить
- Отменить
- Удалить
- Обновить
Все действия выполняются в асинхронном режиме будущего, поэтому статус будет сохранен в поле Ошибка в соглашении.
- Состояние соглашения теперь обновляется после обновления документа и получателей.
- До версии 21 состояние обновлялось заранее.
- Объект подписанного документа (в нем сохранены URL-адреса изображений) теперь не вставляется.
- До версии 21 он вставлялся после завершения всех остальных обновлений.
- Максимальный размер запроса или ответа выноски ограничен до 12 МБ для асинхронного Apex в пределах возможностей руководителя Salesforce: https://developer.salesforce.com/docs/atlas.ru-ru.210.0.apexcode.meta/apexcode/apex_gov_limits.htm
- Документы размером более 12 МБ невозможно получить из Sign из-за указанного выше ограничения.
- Описания события документа изменены. Теперь оно совпадает с описанием, возвращенным Sign API, и содержит отчеты об аудите.
- Процесс обновления теперь выполняется как встроенный пакетный процесс Apex (асинхронный процесс) в приложении Salesforce.
- Ранее обновление выполнялось с помощью API-вызовов за пределами Salesforce.
- Триггеры этих обновлений состояния, которые запускают асинхронные процессы, теперь не выполняются, поскольку Salesforce ограничивает вызов другого асинхронного процесса из уже запущенного асинхронного процесса.
- До версии 21 обновления атрибутов документа разделялись на несколько вызовов; теперь объект документа обновляется одной операцией.
- До версии 21 документы со сбоями повторно запускались только путем обновления вручную в приложении Salesforce.
- Теперь обновления стали более надежными, так как внутренний сервер Sign повторяет попытку запуска событий со сбоями указанное число раз.
- Обновление, запускаемое вручную, теперь включает все аспекты документов, включая связанные объекты.
- Передача документов теперь запускается в асинхронном режиме (так же, как регулярные обновления); при этом аналогично регулярным обновлениям дополнительные атрибуты обновляются.
- Реализованы новые параметры, которые позволяют включить и отключить обновление различных аспектов документа.
- После сохранения подписанного документа в Salesforce в конце имени файла PDF больше не будет добавляться дескриптор (-подписано или -утверждено).
Связанные материалы
- Руководство по установке Adobe Acrobat Sign для Salesforce
- Руководство по расширенной настройке Adobe Acrobat Sign для Salesforce
- Сопоставления полей и шаблоны в Adobe Acrobat Sign для Salesforce
- Руководство по обновлению Adobe Acrobat Sign для Salesforce
- Руководство пользователя Adobe Acrobat Sign для Salesforce
Оптимизируйте свою работу с помощью Acrobat Sign
Легко и быстро управляйте документами и подписывайте их в Интернете.