private static string TransformWebhookNotificationBody()

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