我在尝试通过DocuSign Rest API(Java)创建基于模板的信封时收到以下错误。将错误消息作为不存在的特定文档ID。我曾经上传文档ID为" 1"的文档,但是对于一个模板我得到的误差低于此值。
Exception: com.docusign.esign.client.ApiException: {
"errorCode": "TAB_REFERS_TO_MISSING_DOCUMENT",
"message": "The DocumentId specified in the tab element does not refer to a document in this envelope. Tab refers to DocumentId 69681238 which is not present."
}
有人可以解释上述情况吗?我是否需要在模板或代码中进行任何更改?我必须传递的任何其他参数?
信封创建代码:
try {
Path path = Paths.get(file);
fileBytes = Files.readAllBytes(path);
} catch (IOException ioExcp) {
System.out.println("Exception: " + ioExcp);
return null;
}
// add a document to the envelope
Document doc = new Document();
String base64Doc = Base64.encodeBase64String(fileBytes);
doc.setDocumentBase64(base64Doc);
doc.setName(fileName);
doc.setDocumentId("1");
List<Document> docs = new ArrayList<Document>();
docs.add(doc);
envDef.setTemplateId(templateId());
envDef.setDocuments(docs);
List<TemplateRole> templateRolesList = new LinkedList<TemplateRole>();
TemplateRole templateRole = new TemplateRole();
templateRole.setEmail(signerEmail);
templateRole.setName(signerName);
templateRole.setRoleName("Signer1");
templateRole.setRoutingOrder("1");
templateRolesList.add(templateRole);
TemplateRole templateRole2 = new TemplateRole();
templateRole2.setName(signerName1);
templateRole2.setRoleName("Signer2");
templateRole2.setRoutingOrder("2");
templateRole2.setEmail(signerEmail1);
templateRolesList.add(templateRole2);
envDef.setTemplateRoles(templateRolesList);
envDef.setAllowRecipientRecursion("true");
envDef.setStatus("created");
try {
EnvelopesApi envelopesApi = new EnvelopesApi();
EnvelopeSummary envelopeSummary = envelopesApi.createEnvelope(accountId(), envDef);
DocumentTemplateList documentTemplateList = new DocumentTemplateList();
DocumentTemplate documentTemplate = new DocumentTemplate();
documentTemplate.setTemplateId(templateId());
documentTemplate.setDocumentId(doc.getDocumentId());
documentTemplateList.getDocumentTemplates().add(documentTemplate);
envelopesApi.applyTemplateToDocument(accountId,
envelopId(), doc.getDocumentId(),
documentTemplateList);
} catch (com.docusign.esign.client.ApiException ex) {
System.out.println("Exception: " + ex);
ex.printStackTrace();
}
正如您所提到的,从模板列表中获取文档ID。我将文件数组视为空。这是回复。
class EnvelopeTemplateResult {
templateId: <templateId>
name: Template 1
shared: true
password:
description:
lastModified: 2017-06-06T19:45:35.7670000Z
pageCount: 15
uri: /templates/<uri>
folderName: Templates
folderId: <folderId>
folderUri: /folders/<folderUri>
parentFolderUri: null
owner: class UserInfo {
userName: User Name
email: email@email.com
userId: userID
userType: null
userStatus: null
uri: null
errorDetails: null
}
documents: []
recipients: null
transactionId: null
status: null
documentsUri: null
recipientsUri: null
asynchronous: null
envelopeUri: null
emailSubject: Sign Document
emailBlurb: Please sign this document
envelopeId: null
signingLocation: Online
customFieldsUri: null
envelopeIdStamping: null
authoritativeCopy: false
notification: null
notificationUri: null
enforceSignerVisibility: false
enableWetSign: true
allowMarkup: false
allowReassign: false
createdDateTime: null
lastModifiedDateTime: null
deliveredDateTime: null
sentDateTime: null
completedDateTime: null
voidedDateTime: null
voidedReason: null
deletedDateTime: null
declinedDateTime: null
statusChangedDateTime: null
documentsCombinedUri: null
certificateUri: null
templatesUri: null
messageLock: null
recipientsLock: null
brandLock: null
brandId: null
useDisclosure: null
emailSettings: null
purgeState: null
lockInformation: null
is21CFRPart11: null
isUniversalSignatureEnvelope: null
}
答案 0 :(得分:0)
很难在没有看到信封创建代码的情况下告诉您确切的问题。
在信封创建过程中,您很可能使用了错误的DocumentId。
使用listTemplateDocuments api检索模板上的文档ID。在信封创建过程中使用模板中的确切DocumentId。
答案 1 :(得分:0)
我最近在使用复合模板时遇到了这个问题,所以我希望所有人都不必为此烦恼。
我们的模板正在尝试向验证为“正好选择1”的文档中添加一个复选框组,并且在通过API发送的文档中,复选框字段的定位字符串不存在。此验证似乎导致模板根据需要解释这些字段并给出此错误消息。传递documentId时,API返回的错误消息已解决了该问题,但是我们不想跟踪documentIds,而是希望在运行时逐步设置它们并将这些值用于文档可见性。完全删除此复选框组并传递我想要的任何documentId(显然不是API吐出的ID)解决了此问题。
我们正在为复选框寻找一种新的解决方案,希望只是使用单选按钮。
我将仔细查看哪些字段上具有任何类型的验证,并查看是否将它们一个接一个地删除,然后运行您的请求,即可找到罪魁祸首(这是我找到复选框组验证的方式)。 / p>