【发布时间】:2020-09-29 01:28:37
【问题描述】:
我正在开发一个在 iframe 中使用 DocuSign 签名的应用程序,该应用程序位于专有网络应用程序中。签名者可以在同一个网络应用程序中访问嵌入式 iframe 签名视图。
它是在没有考虑模板的情况下开发的。我已经通过构建包含 templateKey 和相应 TemplateRoles 的信封定义来实现模板的使用。非模板信封和模板信封调用相同的“CreateEnvelope”函数,但参数不同。设置页面加载已选择模板、定义角色和设置字段。单击“发送”按钮时会出现问题。
没有模板,就不会向签名者发送电子邮件。它允许签名者在我正在使用的专有应用程序中以嵌入式形式这样做。这是用于创建没有模板的信封的函数:
public EnvelopeSummary CreateEnvelope(string filePath, string username = null, string emailSubject = null, string brandID = null,List<Models.Recipient> recipients = null)
{
EnvelopeDefinition envelopeDef = new EnvelopeDefinition
{
Status = "created",
EmailSubject = emailSubject,
BrandId = brandID
};
if (recipients != null)
{
List<Signer> signers = recipients.Select(x => new Signer() { Email = x.Email, Name = x.UserName, ClientUserId = x.RecipientID > 50 ? x.RecipientID.ToString() : null, RecipientId = x.RouteOrder.ToString(), RoutingOrder = x.RouteOrder.ToString() }).ToList();
envelopeDef.Recipients = new Recipients() { Signers = signers };
}
return Factory.GetEnvelopesApi(DocuSignConfig).CreateEnvelope(accountId: Helpers.SettingsHelper.AccountID, envelopeDefinition: envelopeDef, options: null);
}
应用模板后,在工作流通过 SenderView 的返回 URL 返回到专有应用程序之前,签名者会收到一封外部签名的电子邮件。以下是使用模板创建信封的代码:
public EnvelopeSummary CreateTemplateEnvelope(string filePath,
List<DataModels.GetRole> roles = null,
DataModels.GetTemplate template = null,
string username = null,
string emailSubject = null,
string brandID = null,
List<Models.Recipient> recipients = null)
{
EnvelopeDefinition envelopeDef = new EnvelopeDefinition
{
Status = "created",
EmailSubject = emailSubject,
BrandId = brandID,
TemplateId = template.TemplateKey
};
if (roles != null && recipients != null)
{
List<Signer> signers = recipients.Select(x => new Signer() { Email = x.Email, Name = x.UserName, ClientUserId = x.RecipientID > 50 ? x.RecipientID.ToString() : null, RecipientId = x.RouteOrder.ToString(), RoutingOrder = x.RouteOrder.ToString() }).ToList();
var templateRoles = new List<TemplateRole>();
int counter = 0;
foreach (Signer signr in signers)
{
TemplateRole thisSigner = new TemplateRole();
thisSigner.Email = signers[counter].Email;
thisSigner.Name = signers[counter].Name;
thisSigner.RoleName = roles[counter].RoleName;
templateRoles.Add(thisSigner);
counter++;
}
envelopeDef.TemplateRoles = templateRoles;
}
return Factory.GetEnvelopesApi(DocuSignConfig).CreateEnvelope(accountId: Helpers.SettingsHelper.AccountID,
envelopeDefinition: envelopeDef,
options: null);
}
主要区别在于模板版本包含 templateKey,并且它使用 TemplateRoles 而不是 Recipients。模板代码比我想要的最终产品要粗略一些,但它是一项正在进行的工作,只是试图让它运行。有没有人了解如何或是否可以创建信封,然后保留使用嵌入式签名的能力?感谢您的帮助。
编辑:已解决
如答案的 cmets 中所述,通过根据收件人的值正确设置每个模板角色的 ClientUserId 解决了该问题。这允许使用模板角色签名者进行嵌入式签名。
【问题讨论】:
标签: docusignapi