private static string TransformWebhookNotificationBody()

in certified-connectors/DocuSign/script.csx [64:139]


    private static string TransformWebhookNotificationBody(string content)
    {
        JObject body = ParseContentAsJObject(content, true);

        // customfield code
        if (body["DocuSignEnvelopeInformation"] is JObject && body["DocuSignEnvelopeInformation"]["EnvelopeStatus"] is JObject)
        {
            var envelopeStatus = body["DocuSignEnvelopeInformation"]["EnvelopeStatus"];
            var customFields = envelopeStatus["CustomFields"];
            var newCustomFields = new JObject();

            if (customFields is JObject)
            {
                var customFieldsArray = customFields["CustomField"];
                customFieldsArray = customFieldsArray is JObject ? new JArray(customFieldsArray) : customFieldsArray;
                customFields["CustomField"] = customFieldsArray;

                foreach (var field in customFieldsArray as JArray ?? new JArray())
                {
                    var fieldName = field.Type == JTokenType.Object ? (string)field["Name"] : null;
                    if (!string.IsNullOrWhiteSpace(fieldName) && newCustomFields[fieldName] == null)
                    {
                        newCustomFields.Add(fieldName, field["Value"]);
                    }
                }
            }

            body["customFields"] = newCustomFields;

            // tab code
            var recipientStatuses = envelopeStatus["RecipientStatuses"];
            if (recipientStatuses is JObject)
            {
                var statusArray = recipientStatuses["RecipientStatus"];
                statusArray = statusArray is JObject ? new JArray(statusArray) : statusArray;
                recipientStatuses["RecipientStatus"] = statusArray;

                // RecipientStatus is an array at this point so now check TabStatus
                foreach (var recipient in recipientStatuses["RecipientStatus"] ?? new JArray())
                {
                    var tabStatuses = recipient["TabStatuses"];
                    if (tabStatuses is JObject)
                    {
                        var tabStatusArray = tabStatuses["TabStatus"];
                        tabStatusArray = tabStatusArray is JObject ? new JArray(tabStatusArray) : tabStatusArray;
                        tabStatuses["TabStatus"] = tabStatusArray;

                        // TabStatus is an array at this point
                        var newTabStatuses = new JObject();
                        foreach (var tab in tabStatusArray as JArray ?? new JArray())
                        {
                            if (tab is JObject)
                            {
                                var tabLabel = (string)tab["TabLabel"];
                                var tabValue = (string)tab["TabValue"];
                                var customTabType = (string)tab["CustomTabType"];

                                // skip Radio and List tabs that are not selected
                                if (!string.IsNullOrWhiteSpace(tabLabel) && !string.IsNullOrWhiteSpace(tabValue) && customTabType != "Radio" && customTabType != "List")
                                {
                                    if (newTabStatuses[tabLabel] == null)
                                    {
                                        newTabStatuses.Add(tabLabel, tabValue);
                                    }
                                }
                            }
                        }

                        recipient["tabs"] = newTabStatuses;
                    }
                }
            }
        }

        return body.ToString();
    }