in certified-connectors/DocuSignDemo/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();
}