如何在运行时将自定义元数据添加到从模板创建的文档
How can I add custom metadata at runtime to document(s) created from a template
我正在使用复合模板创建信封。每个模板将只有一个文档。我需要单独处理每份返回签名的文件。为此,我需要将元数据添加到正在发送的每个文档中。在发送信封之前如何同时使用复合模板来做到这一点?
我对信封元数据和自定义字段了如指掌,但如果我需要更具体的文档并且我没有使用实际文档怎么办?我在这里使用包含文档的模板。
这是我目前的 C# 代码
List<CompositeTemplate> compositeTemplates = new List<CompositeTemplate>();
Recipients recipientsServerTemplate = new Recipients();
List<Signer> signers = new List<Signer>();
List<CarbonCopy> carbonCopies = new List<CarbonCopy>();
Signer signer1 = new Signer();
signer1.Email = signerEmail;
signer1.Name = signerName;
signer1.RoleName = "signer";
signer1.RecipientId = "1";
signer1.Tabs = tabs;
signers.Add(signer1);
CarbonCopy cc1 = new CarbonCopy();
cc1.Email = ccEmail;
cc1.Name = ccName;
cc1.RoleName = "cc";
cc1.RecipientId = "2";
carbonCopies.Add(cc1);
recipientsServerTemplate.Signers = signers;
recipientsServerTemplate.CarbonCopies = carbonCopies;
int i = 1;
foreach (string templateId in templateIds)
{
//add custom fields //this is per envelope. I need it more specific in my case
TextCustomField textcustomField = new TextCustomField
{
Name = "MyCustomField" + i.ToString(),
Required = "false",
Show = "false",
Value = "653022"
};
CustomFields cf = new CustomFields
{
TextCustomFields = new List<TextCustomField> { textcustomField }
};
List<ServerTemplate> ServerTemplates = new List<ServerTemplate>();
List<InlineTemplate> InlineTemplates = new List<InlineTemplate>();
CompositeTemplate CT = new CompositeTemplate
{
CompositeTemplateId = i.ToString()
};
ServerTemplate ST = new ServerTemplate
{
Sequence = i.ToString(),
TemplateId = templateId
};
InlineTemplate IT = new InlineTemplate
{
Recipients = recipientsServerTemplate,
Sequence = (i+1).ToString(),
CustomFields = cf//this is for the whole envelope
};
InlineTemplates.Add(IT);
ServerTemplates.Add(ST);
CT.ServerTemplates = ServerTemplates;
CT.InlineTemplates = InlineTemplates;
compositeTemplates.Add(CT);
i++;
}
EnvelopeDefinition env = new EnvelopeDefinition
{
Status = "sent",
CompositeTemplates = compositeTemplates
};
我建议在信封级别添加有关信封文档的元数据。我不认为您可以在使用复合模板时添加 document-level 元数据。
已添加
模板通常是通过 DocuSign 网络应用创建的。但是网络应用程序不支持 document-level 元数据。
当您使用 API 创建信封时,您可以创建向文档添加额外的字段。您可以使这些附加字段仅对您公司的收件人可读,并将文档元数据存储在那里。
但我不推荐这样做。最好将 document-specific 数据存储在包络级别。例如,将 document-specific 元数据作为 JSON 字符串包含在 envelope-level 元数据中:
...
"compositeTemplates": [
{
"serverTemplates": [
{
"sequence": "1",
"templateId": "61973947-7d29-490d-9bac-5432154321"
}
],
"inlineTemplates": [
{
"sequence": "2",
"customFields": {
"textCustomFields": [
{
"name": "Main document",
"show": "false",
"value": "{\"value\":34500, \"office\": \"SF\"}"
}
]
},
在信封上添加关于我的文档的元数据不是一个可靠的选择,因为我对可以将我的元数据连接到的文档一无所知
为了跟踪模板中的单个文档,我最终所做的是添加一个 read-only 文本选项卡,并将“MetaDataId”作为我在模板中的每个文档的选项卡标签。
Read-only 标签不会跨信封复制数据。
JSON 请求看起来像
{
"compositeTemplates": [
{
"compositeTemplateId": "FirstTemplate",
"serverTemplates": [
{
"sequence": "1",
"templateId": "templateId1"
}
],
"inlineTemplates": [
{
"sequence": "1",
"recipients": {
"signers": [
{
"email": "blah@blah.com",
"name": "Blah Blah",
"recipientId": "1",
"roleName": "Signer",
"routingOrder": "1",
"tabs": {
"textTabs": [
{
"tabLabel": "MetaDataId",
"value": "121"
}
]
}
}
]
}
}
]
},
{
"compositeTemplateId": "SecondTemplate",
"serverTemplates": [
{
"sequence": "2",
"templateId": "templateId2"
}
],
"inlineTemplates": [
{
"sequence": "2",
"recipients": {
"signers": [
{
"email": "blah@blah.com",
"name": "Blah Blah",
"recipientId": "1",
"roleName": "Signer",
"routingOrder": "1",
"tabs": {
"textTabs": [
{
"tabLabel": "MetaDataId",
"value": "122"
}
]
}
}
]
}
}
]
},
{
"compositeTemplateId": "ThirdTemplate",
"serverTemplates": [
{
"sequence": "3",
"templateId": "templateId3"
}
],
"inlineTemplates": [
{
"sequence": "3",
"recipients": {
"signers": [
{
"email": "blah@blah.com",
"name": "Blah Blah",
"recipientId": "1",
"roleName": "Signer",
"routingOrder": "1",
"tabs": {
"textTabs": [
{
"tabLabel": "MetaDataId",
"value": "123"
}
]
}
}
]
}
}
]
}
],
"emailSubject": "Please Sign",
"emailBlurb": "This is an email Example",
"status": "sent"
}
顺便说一句,如果您使用的是 C# SDK 并且您正在使用循环创建模板,就像我在这个问题中所做的那样 post 那么您可能必须克隆您的对象重新设置内联模板中的收件人,以便您为签名者的 MetaDataId 文本选项卡设置的值不只是保留您分配的最后一个值,如果您重复使用相同的收件人对象,这将会发生。
我正在使用复合模板创建信封。每个模板将只有一个文档。我需要单独处理每份返回签名的文件。为此,我需要将元数据添加到正在发送的每个文档中。在发送信封之前如何同时使用复合模板来做到这一点? 我对信封元数据和自定义字段了如指掌,但如果我需要更具体的文档并且我没有使用实际文档怎么办?我在这里使用包含文档的模板。 这是我目前的 C# 代码
List<CompositeTemplate> compositeTemplates = new List<CompositeTemplate>();
Recipients recipientsServerTemplate = new Recipients();
List<Signer> signers = new List<Signer>();
List<CarbonCopy> carbonCopies = new List<CarbonCopy>();
Signer signer1 = new Signer();
signer1.Email = signerEmail;
signer1.Name = signerName;
signer1.RoleName = "signer";
signer1.RecipientId = "1";
signer1.Tabs = tabs;
signers.Add(signer1);
CarbonCopy cc1 = new CarbonCopy();
cc1.Email = ccEmail;
cc1.Name = ccName;
cc1.RoleName = "cc";
cc1.RecipientId = "2";
carbonCopies.Add(cc1);
recipientsServerTemplate.Signers = signers;
recipientsServerTemplate.CarbonCopies = carbonCopies;
int i = 1;
foreach (string templateId in templateIds)
{
//add custom fields //this is per envelope. I need it more specific in my case
TextCustomField textcustomField = new TextCustomField
{
Name = "MyCustomField" + i.ToString(),
Required = "false",
Show = "false",
Value = "653022"
};
CustomFields cf = new CustomFields
{
TextCustomFields = new List<TextCustomField> { textcustomField }
};
List<ServerTemplate> ServerTemplates = new List<ServerTemplate>();
List<InlineTemplate> InlineTemplates = new List<InlineTemplate>();
CompositeTemplate CT = new CompositeTemplate
{
CompositeTemplateId = i.ToString()
};
ServerTemplate ST = new ServerTemplate
{
Sequence = i.ToString(),
TemplateId = templateId
};
InlineTemplate IT = new InlineTemplate
{
Recipients = recipientsServerTemplate,
Sequence = (i+1).ToString(),
CustomFields = cf//this is for the whole envelope
};
InlineTemplates.Add(IT);
ServerTemplates.Add(ST);
CT.ServerTemplates = ServerTemplates;
CT.InlineTemplates = InlineTemplates;
compositeTemplates.Add(CT);
i++;
}
EnvelopeDefinition env = new EnvelopeDefinition
{
Status = "sent",
CompositeTemplates = compositeTemplates
};
我建议在信封级别添加有关信封文档的元数据。我不认为您可以在使用复合模板时添加 document-level 元数据。
已添加
模板通常是通过 DocuSign 网络应用创建的。但是网络应用程序不支持 document-level 元数据。
当您使用 API 创建信封时,您可以创建向文档添加额外的字段。您可以使这些附加字段仅对您公司的收件人可读,并将文档元数据存储在那里。
但我不推荐这样做。最好将 document-specific 数据存储在包络级别。例如,将 document-specific 元数据作为 JSON 字符串包含在 envelope-level 元数据中:
...
"compositeTemplates": [
{
"serverTemplates": [
{
"sequence": "1",
"templateId": "61973947-7d29-490d-9bac-5432154321"
}
],
"inlineTemplates": [
{
"sequence": "2",
"customFields": {
"textCustomFields": [
{
"name": "Main document",
"show": "false",
"value": "{\"value\":34500, \"office\": \"SF\"}"
}
]
},
在信封上添加关于我的文档的元数据不是一个可靠的选择,因为我对可以将我的元数据连接到的文档一无所知
为了跟踪模板中的单个文档,我最终所做的是添加一个 read-only 文本选项卡,并将“MetaDataId”作为我在模板中的每个文档的选项卡标签。
Read-only 标签不会跨信封复制数据。
JSON 请求看起来像
{
"compositeTemplates": [
{
"compositeTemplateId": "FirstTemplate",
"serverTemplates": [
{
"sequence": "1",
"templateId": "templateId1"
}
],
"inlineTemplates": [
{
"sequence": "1",
"recipients": {
"signers": [
{
"email": "blah@blah.com",
"name": "Blah Blah",
"recipientId": "1",
"roleName": "Signer",
"routingOrder": "1",
"tabs": {
"textTabs": [
{
"tabLabel": "MetaDataId",
"value": "121"
}
]
}
}
]
}
}
]
},
{
"compositeTemplateId": "SecondTemplate",
"serverTemplates": [
{
"sequence": "2",
"templateId": "templateId2"
}
],
"inlineTemplates": [
{
"sequence": "2",
"recipients": {
"signers": [
{
"email": "blah@blah.com",
"name": "Blah Blah",
"recipientId": "1",
"roleName": "Signer",
"routingOrder": "1",
"tabs": {
"textTabs": [
{
"tabLabel": "MetaDataId",
"value": "122"
}
]
}
}
]
}
}
]
},
{
"compositeTemplateId": "ThirdTemplate",
"serverTemplates": [
{
"sequence": "3",
"templateId": "templateId3"
}
],
"inlineTemplates": [
{
"sequence": "3",
"recipients": {
"signers": [
{
"email": "blah@blah.com",
"name": "Blah Blah",
"recipientId": "1",
"roleName": "Signer",
"routingOrder": "1",
"tabs": {
"textTabs": [
{
"tabLabel": "MetaDataId",
"value": "123"
}
]
}
}
]
}
}
]
}
],
"emailSubject": "Please Sign",
"emailBlurb": "This is an email Example",
"status": "sent"
}
顺便说一句,如果您使用的是 C# SDK 并且您正在使用循环创建模板,就像我在这个问题中所做的那样 post 那么您可能必须克隆您的对象重新设置内联模板中的收件人,以便您为签名者的 MetaDataId 文本选项卡设置的值不只是保留您分配的最后一个值,如果您重复使用相同的收件人对象,这将会发生。