Я создал шаблон с документом внутри приложения DocuSign, и я хотел бы использовать его при создании конверта.Хитрость в том, что мне нужно заполнить все поля (tabs
) из моей формы.Итак, вот шаги, которые я выполняю при создании конверта:
- Сначала я получаю шаблон от
TemplateApi
- Я надуваю этот конверт полями, которые пришли ко мне из внешнего интерфейса,Это обычный цикл for на
TextTabs
.Все вкладки являются текстовыми типами, сделано намеренно. - Создание
EnvelopeDefinition
объекта со всеми необходимыми полями: documentBase64, заполненными вкладками и т. Д. Поскольку объект, возвращаемый из TemplateApi
, имеет тип EnvelopeTemplate
, а для создания конверта требуется EnvelopeDefinition
Мне нужно отобразить еговручную - есть ли другой способ добиться этого?Это очень утомительно и требует много времени.
К сожалению, сейчас все вещи я делаю вручную.Это означает циклический просмотр текстовых вкладок и заполнение значения coresponding объектами из формы со стороны внешнего интерфейса.Недостаток здесь в том, что я действительно не знаю, какое поле я на самом деле задуваю.В идеале было бы как-то получить от API метку, которая отвечает на его текстовую вкладку.
Тем временем я придумываю решение для заполнения ex.метка с предопределенным значением метки для соответствующей текстовой вкладки.В некотором смысле это обходной путь, но с точки зрения пользовательского опыта было бы очень странно устанавливать его каждый раз при создании новой вкладки. Есть ли у вас рекомендации, как с этим бороться?
Код:
TemplatesApi templatesApi = new TemplatesApi(docusignApiClient.getApiClient());
EnvelopesApi envelopesApi = new EnvelopesApi(docusignApiClient.getApiClient());
try {
EnvelopeTemplateResults envelopeTemplateResults = templatesApi.listTemplates(docusignApiClient.getAccountId());
EnvelopeTemplate envelopeTemplate = templatesApi.get(docusignApiClient.getAccountId(), "templateId");
List<Document> documents = envelopeTemplate.getDocuments();
EnvelopeDefinition envelopeDefinition = new EnvelopeDefinition();
byte[] document = templatesApi.getDocument(docusignApiClient.getAccountId(), "templateId", "1");
envelopeTemplate.getDocuments()
.forEach(doc -> doc.documentBase64(Base64.getEncoder().encodeToString(document)));
envelopeTemplate
.getRecipients().getSigners()
.stream()
.flatMap(signer -> signer.getTabs().getTextTabs().stream())
.forEach(text -> {
text.value("Test");
});
envelopeTemplate.getRecipients().getSigners()
.forEach(signer -> {
signer.email("johndoe@gmail.com");
signer.name("John Doe");
});
envelopeDefinition.setStatus("sent");
envelopeDefinition.setRecipients(envelopeTemplate.getRecipients());
envelopeDefinition.setEmailSubject("TEST email subject");
envelopeDefinition.setDocuments(envelopeTemplate.getDocuments());
EnvelopeSummary envelope = envelopesApi.createEnvelope(docusignApiClient.getAccountId(), envelopeDefinition);
// templatesApi.listTabs(docusignApiClient.getAccountId(), "tabId", )
} catch (ApiException e) {
throw new RuntimeException("Can't receive templates", e);
}