DocuSign Rest API - TAB_REFERS_TO_MISSING_DOCUMENT

时间:2017-07-07 16:47:58

标签: java upload docusignapi

我在尝试通过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
}

2 个答案:

答案 0 :(得分:0)

很难在没有看到信封创建代码的情况下告诉您确切的问题。

在信封创建过程中,您很可能使用了错误的DocumentId。

使用listTemplateDocuments api检索模板上的文档ID。在信封创建过程中使用模板中的确切DocumentId。

另请参阅此answer和此answer

答案 1 :(得分:0)

我最近在使用复合模板时遇到了这个问题,所以我希望所有人都不必为此烦恼。

我们的模板正在尝试向验证为“正好选择1”的文档中添加一个复选框组,并且在通过API发送的文档中,复选框字段的定位字符串不存在。此验证似乎导致模板根据需要解释这些字段并给出此错误消息。传递documentId时,API返回的错误消息已解决了该问题,但是我们不想跟踪documentIds,而是希望在运行时逐步设置它们并将这些值用于文档可见性。完全删除此复选框组并传递我想要的任何documentId(显然不是API吐出的ID)解决了此问题。

我们正在为复选框寻找一种新的解决方案,希望只是使用单选按钮。

我将仔细查看哪些字段上具有任何类型的验证,并查看是否将它们一个接一个地删除,然后运行您的请求,即可找到罪魁祸首(这是我找到复选框组验证的方式)。 / p>