如何应用多文档模板
How to apply a multi-document template
大体流程
- 文件上传到 DocuSign 创建一个新的信封。
- 模板已应用于此信封。
- 收件人已更新,以确保不会与模板中的签名者混淆
- 信封已发送给签名者。
模板的预期用途
模板的主要用途是允许用户上传文档并使用模板中的所有其他信息,例如上传文档的字段和其他设置。签名者也可以自由设置和覆盖模板中定义的签名者。
为了应用模板,我们使用 https://developers.docusign.com/docs/esign-rest-api/reference/envelopes/envelopetemplates/applytodocument/
模板
该模板包含 2 个文档。第一份文件有 3 页,第二份文件有 2 页。
有一个签名者。两个文档的最后一页都添加了一个签名框。
问题
- 测试场景:与模板中的文档完全相同。这导致第二个文件上的签名框没有设置。
- 测试场景:两个文档都使用 3 页文件。这导致签名框被放在两个文档的第 3 页上。所以看起来分配只适用于从文档 1 到所有其他文档
- 测试场景:使用与两个文档的模板匹配的不同的 3 页文档。结果和2.测试场景一样
我试过的
所描述的场景基于此(简化的)应用模板的代码:
//variables envAPI (class EnvelopesApi), accountId, templateId and envelope (class Envelope) are already set
DocumentTemplateList templateList = new DocumentTemplateList();
templateList.DocumentTemplates = new List<DocumentTemplate>();
templateList.DocumentTemplates.Add(new DocumentTemplate()
{
TemplateId = templateId,
DocumentId = "1"
});
envAPI.ApplyTemplateToDocument(accountId, envelope.EnvelopeId, "1", templateList);
templateList = new DocumentTemplateList();
templateList.DocumentTemplates = new List<DocumentTemplate>();
templateList.DocumentTemplates.Add(new DocumentTemplate()
{
TemplateId = templateId,
DocumentId = "2"
});
envAPI.ApplyTemplateToDocument(accountId, envelope.EnvelopeId, "2", templateList);
//some recipient checking is done here
envAPI.Update(accountId, envelope.EnvelopeId, envelope);
我也尝试在 templateList.DocumentTemplates 中使用更多条目,但这只会导致 INVALID_REQUEST_BODY 错误。
我意识到模板中文档的 DocumentID 属性 在第一个文件之后有很大不同。我的测试模板的第一个文档为 1,第二个文档的 ID 是一个非常大的数字。使用这么大的数字也会导致 INVALID_REQUEST_BODY 错误。
这实际上是正确的吗?错误是在其他地方吗?因为它看起来应该以这种方式工作。还是问题出在其他地方?
您正在尝试的工作流程是使用复合模板的完美场所。建议每个文档使用一个复合模板。在一个 POST 信封调用中,您可以在运行时用文档交换模板上的文档,并将服务器(保存的)模板应用于文档。您可以添加收件人,通过不包括收件人来删除收件人,还可以在运行时添加选项卡或将值写入选项卡。看:
https://www.docusign.com/blog/dsdev-from-the-trenches-composite-templates
https://www.docusign.com/blog/dsdev-why-use-composite-templates
回答我自己的问题:这行不通。至少不是这样。
是的,复合模板是满足此要求的一种方式,但话又说回来,为什么还要存在多文档模板?
所以答案很简单:反过来做。
要正确使用多文档模板,模板需要作为起点。使用模板并替换文件来创建一个 evenlope,而不是先创建一个信封,然后将模板应用到信封。
大体流程
- 文件上传到 DocuSign 创建一个新的信封。
- 模板已应用于此信封。
- 收件人已更新,以确保不会与模板中的签名者混淆
- 信封已发送给签名者。
模板的预期用途
模板的主要用途是允许用户上传文档并使用模板中的所有其他信息,例如上传文档的字段和其他设置。签名者也可以自由设置和覆盖模板中定义的签名者。
为了应用模板,我们使用 https://developers.docusign.com/docs/esign-rest-api/reference/envelopes/envelopetemplates/applytodocument/
模板
该模板包含 2 个文档。第一份文件有 3 页,第二份文件有 2 页。 有一个签名者。两个文档的最后一页都添加了一个签名框。
问题
- 测试场景:与模板中的文档完全相同。这导致第二个文件上的签名框没有设置。
- 测试场景:两个文档都使用 3 页文件。这导致签名框被放在两个文档的第 3 页上。所以看起来分配只适用于从文档 1 到所有其他文档
- 测试场景:使用与两个文档的模板匹配的不同的 3 页文档。结果和2.测试场景一样
我试过的
所描述的场景基于此(简化的)应用模板的代码:
//variables envAPI (class EnvelopesApi), accountId, templateId and envelope (class Envelope) are already set
DocumentTemplateList templateList = new DocumentTemplateList();
templateList.DocumentTemplates = new List<DocumentTemplate>();
templateList.DocumentTemplates.Add(new DocumentTemplate()
{
TemplateId = templateId,
DocumentId = "1"
});
envAPI.ApplyTemplateToDocument(accountId, envelope.EnvelopeId, "1", templateList);
templateList = new DocumentTemplateList();
templateList.DocumentTemplates = new List<DocumentTemplate>();
templateList.DocumentTemplates.Add(new DocumentTemplate()
{
TemplateId = templateId,
DocumentId = "2"
});
envAPI.ApplyTemplateToDocument(accountId, envelope.EnvelopeId, "2", templateList);
//some recipient checking is done here
envAPI.Update(accountId, envelope.EnvelopeId, envelope);
我也尝试在 templateList.DocumentTemplates 中使用更多条目,但这只会导致 INVALID_REQUEST_BODY 错误。 我意识到模板中文档的 DocumentID 属性 在第一个文件之后有很大不同。我的测试模板的第一个文档为 1,第二个文档的 ID 是一个非常大的数字。使用这么大的数字也会导致 INVALID_REQUEST_BODY 错误。
这实际上是正确的吗?错误是在其他地方吗?因为它看起来应该以这种方式工作。还是问题出在其他地方?
您正在尝试的工作流程是使用复合模板的完美场所。建议每个文档使用一个复合模板。在一个 POST 信封调用中,您可以在运行时用文档交换模板上的文档,并将服务器(保存的)模板应用于文档。您可以添加收件人,通过不包括收件人来删除收件人,还可以在运行时添加选项卡或将值写入选项卡。看: https://www.docusign.com/blog/dsdev-from-the-trenches-composite-templates https://www.docusign.com/blog/dsdev-why-use-composite-templates
回答我自己的问题:这行不通。至少不是这样。
是的,复合模板是满足此要求的一种方式,但话又说回来,为什么还要存在多文档模板?
所以答案很简单:反过来做。 要正确使用多文档模板,模板需要作为起点。使用模板并替换文件来创建一个 evenlope,而不是先创建一个信封,然后将模板应用到信封。