如何在运行时将自定义元数据添加到从模板创建的文档

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 文本选项卡设置的值不只是保留您分配的最后一个值,如果您重复使用相同的收件人对象,这将会发生。