PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Friday, August 26, 2022

[FIXED] How can I add custom metadata at runtime to document(s) created from a template

 August 26, 2022     docusignapi, docusigncompositetmplts     No comments   

Issue

I am using composite templates to create an envelope. Every template will only have one document. I need to individually process every document that comes back signed. In order to do that I need to add metadata to each document that is being sent. How can I do that while also using composite templates before I send the envelope? I know all about envelope metadata and custom fields but what if I need it more specific to documents and I'm not working with the actual documents? Here I'm working with the templates that contain the documents. Here is the c# code I have so far

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
        };

Solution

Adding metadata on the envelope about my documents was not a robust option as I knew nothing about the document that I could connect my metadata to

What I ended up doing to track individual documents within templates was adding a read-only text tab with "MetaDataId" as the tab label for each of my documents that I had in templates.

Read-only tabs don't replicate data across the envelope.

The JSON request would look like

{
    "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"
}

Incidentally, if you're using the C# SDK and you're creating the templates with a loop as I am doing in the question for this post then you may have to clone the object that you're setting for the Recipients the in Inline Template so that the value you set for the MetaDataId text tab for the signer doesn't just hold the last one that you assigned, which will happed if you reuse the same Recipients object.



Answered By - NortziHead
Answer Checked By - Marie Seifert (PHPFixing Admin)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing