为什么在嵌入式仪式期间不填充 DocuSign 自定义字段



我在DocuSign管理控制台上创建了一个带有一些只读自定义字段的模板。当我通过eSignature REST API使用此模板创建信封时,我希望这些自定义字段为每个签名填充个性化数据(例如姓名、地址、贷款号(。这就像对MS Word文档进行邮件合并以对其进行个性化设置,然后使用合并后的文档进行签名。

以下示例位于https://developers.docusign.com/docs/esign-rest-api/how-to/set-envelope-tab-values,我将信封创建API请求中的自定义字段的所有数据作为文本选项卡包括在内。我的代码中文本选项卡的tabLabel属性与DocuSign控制台上模板中自定义字段的DataLabel属性相匹配。该示例和我的代码之间的主要区别在于,该示例包括文档并指定选项卡在该文档中的位置,而我的代码引用的是控制台上已经存在的带有自定义字段(文本选项卡(的模板,因此不包括文档或选项卡在请求中的位置。

如果我指定我想要一个远程仪式(签名者收到一封带有链接的电子邮件,链接会将他们带到DocuSign进行签名(,则正在签名的文档的自定义字段中会正确填充我的数据。如果我指定我想要嵌入式仪式(签名者单击我网站上的链接,我从DocuSign请求嵌入式客户端视图,然后将签名者引导到该客户端视图(,则要签名的文档根本没有自定义字段。它甚至不显示自定义字段的默认占位符值。有人能帮我弄清楚我做错了什么吗?是否可以像我尝试的那样,在嵌入式仪式中填充自定义字段?为什么他们会在远程仪式中工作,而不是在嵌入式仪式中工作?

我构建信封的代码如下:

private static EnvelopeDefinition CreateEnvelopeFromTemplate(MyAppSettings appSettings, MyRequest req)
{
var eventNotification = new EventNotification()
{
EnvelopeEvents = new List<EnvelopeEvent>()
{
new EnvelopeEvent() { EnvelopeEventStatusCode = "Sent" },
new EnvelopeEvent() { EnvelopeEventStatusCode = "Delivered" },
new EnvelopeEvent() { EnvelopeEventStatusCode = "Declined" },
new EnvelopeEvent() { EnvelopeEventStatusCode = "Voided" },
new EnvelopeEvent() { EnvelopeEventStatusCode = "Completed" }
},
IncludeCertificateOfCompletion = "true",
IncludeDocuments = "true",
IncludeEnvelopeVoidReason = "true",
IncludeHMAC = "true",
IncludeTimeZone = "true",
LoggingEnabled = "true",
RecipientEvents = new List<RecipientEvent>()
{
new RecipientEvent() { RecipientEventStatusCode = "Sent" },
new RecipientEvent() { RecipientEventStatusCode = "Delivered" },
new RecipientEvent() { RecipientEventStatusCode = "Declined" },
new RecipientEvent() { RecipientEventStatusCode = "Completed" }
},
RequireAcknowledgment = "true",
Url = appSettings.Connect.WebhookUrl
};
var textTabs = new List<Text>();
if (req.DocuSignTemplateData != null && req.DocuSignTemplateData.Count > 0)
{
foreach (KeyValuePair<string, string> field in req.DocuSignTemplateData)
{
textTabs.Add(new Text(TabLabel: field.Key, Value: field.Value));
}
}
var signers = new List<TemplateRole>();
foreach (var r in req.Recipients)
{
var signer = new TemplateRole();
if (req.CeremonyType == EMBEDDED_SIGNING)
{
signer.EmbeddedRecipientStartURL = $"{appSettings.EmbeddedSigningUrl}{req.CeremonyParams}";
signer.ClientUserId = r.SSOUserId;
}
signer.Email = r.Email;
signer.Name = r.Name;
signer.RoleName = r.RoleName;
signer.RoutingOrder = r.RoutingOrder.ToString();
if (textTabs.Count > 0)
{
signer.Tabs = new Tabs
{
TextTabs = textTabs
};
}
signers.Add(signer);
}
var env = new EnvelopeDefinition()
{
TemplateId = req.DocuSignTemplateId.ToString(),
TemplateRoles = new List<TemplateRole>(signers),
EventNotification = eventNotification,
Status = "Sent"
};
return env;
}

为了帮助调试,我将使用API日志记录来查看您的应用程序发送给DocuSign的内容。

您可以使用模板嵌入签名来设置选项卡值。但我不确定您是否可以使用role对象来实现这一点。相反,请使用复合模板模式。

下面是一个使用模板和的工作示例

  1. 设置签名者角色以使用嵌入签名
  2. 设置制表符值

请注意,您可以使用API请求生成器应用程序中的Change language按钮让它为您生成C#代码。

你可能会发现我关于使用模板的博客文章也很有用。

最新更新