Skip to content

Commit 445090a

Browse files
Fix object null checks for list envelopes and co-pilot list envelopes (#88)
* Fix object null checks for list envelopes and co-pilot list envelopes
1 parent 56283c0 commit 445090a

File tree

1 file changed

+72
-130
lines changed

1 file changed

+72
-130
lines changed

certified-connectors/DocuSignDemo/script.csx

Lines changed: 72 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -4716,48 +4716,59 @@ private void RenameSpecificKeys(JObject jObject, Dictionary<string, string> keyM
47164716

47174717
private string GetDescriptionNLPForRelatedActivities(JToken envelope)
47184718
{
4719-
string descriptionNLP = null;
4720-
int recipientCount = envelope["recipients"]["recipientCount"].ToObject<int>();
4721-
var recipientCountInNaturalLanguage = (recipientCount > 1) ?
4722-
(" and " + (recipientCount - 1).ToString() + " others have ") : " ";
4723-
4724-
JArray documentArray = (envelope["envelopeDocuments"] as JArray) ?? new JArray();
4725-
var documentCount = documentArray.Count;
4726-
string documentCountInNaturalLanguage = "";
4727-
JArray signersArray = (envelope["recipients"]["signers"] as JArray) ?? new JArray();
4728-
4729-
if (documentCount == 3)
4730-
{
4731-
documentCountInNaturalLanguage = $" and 1 other document";
4732-
}
4733-
else if (documentCount > 3)
4734-
{
4735-
documentCountInNaturalLanguage = $" and {documentCount - 2} other documents";
4736-
}
4737-
4738-
if (envelope["status"].ToString().Equals("sent"))
4739-
{
4740-
descriptionNLP = envelope["sender"]["userName"] + " " +
4741-
envelope["status"] + " " +
4742-
envelope["envelopeDocuments"][0]["name"] +
4743-
documentCountInNaturalLanguage + " on " +
4744-
envelope["statusChangedDateTime"];
4745-
}
4746-
else if(signersArray.Count > 0 )
4747-
{
4748-
descriptionNLP = envelope["recipients"]["signers"][0]["name"] +
4749-
recipientCountInNaturalLanguage +
4750-
envelope["status"] + " " +
4751-
envelope["envelopeDocuments"][0]["name"] +
4752-
documentCountInNaturalLanguage + " on " +
4753-
envelope["statusChangedDateTime"];
4719+
JToken recipientsToken = envelope["recipients"];
4720+
JToken signersToken = recipientsToken?["signers"];
4721+
JArray signersArray = signersToken as JArray ?? new JArray();
4722+
JToken envelopeDocumentsToken = envelope["envelopeDocuments"];
4723+
JArray documentArray = envelopeDocumentsToken as JArray ?? new JArray();
4724+
JToken statusToken = envelope["status"];
4725+
JToken senderToken = envelope["sender"];
4726+
JToken statusChangedDateTimeToken = envelope["statusChangedDateTime"];
4727+
JToken emailSubjectToken = envelope["emailSubject"];
4728+
JToken envelopeIdToken = envelope["envelopeId"];
4729+
JToken sentDateTimeToken = envelope["sentDateTime"];
4730+
4731+
4732+
int recipientCount = recipientsToken?["recipientCount"]?.ToObject<int>() ?? 0;
4733+
string recipientCountInNaturalLanguage = recipientCount > 1 ? $" and {recipientCount - 1} others have " : " ";
4734+
int documentCount = documentArray.Count;
4735+
string documentCountInNaturalLanguage = documentCount == 3 ? " and 1 other document" : documentCount > 3 ? $" and {documentCount - 2} other documents" : "";
4736+
string envelopeStatus = statusToken?.ToString() ?? "Unknown status";
4737+
string senderName = senderToken?["userName"]?.ToString() ?? "No sender name";
4738+
string recipientName = signersArray.FirstOrDefault()?["name"]?.ToString() ?? "No recipient name";
4739+
string envelopeDocumentName = documentArray.FirstOrDefault()?["name"]?.ToString() ?? "No document name";
4740+
string statusDateChangeTime = statusChangedDateTimeToken?.ToString() ?? "Date is empty";
4741+
4742+
var descriptionBuilder = new StringBuilder();
4743+
if (envelopeStatus.Equals("sent", StringComparison.OrdinalIgnoreCase))
4744+
{
4745+
descriptionBuilder.Append(senderName)
4746+
.Append(" ")
4747+
.Append(envelopeStatus)
4748+
.Append(" ")
4749+
.Append(envelopeDocumentName)
4750+
.Append(" ")
4751+
.Append(documentCountInNaturalLanguage)
4752+
.Append(" on ")
4753+
.Append(statusDateChangeTime);
4754+
}
4755+
else if (signersArray.Count > 0)
4756+
{
4757+
descriptionBuilder.Append(recipientName)
4758+
.Append(recipientCountInNaturalLanguage)
4759+
.Append(envelopeStatus)
4760+
.Append(" ")
4761+
.Append(envelopeDocumentName)
4762+
.Append(documentCountInNaturalLanguage)
4763+
.Append(" on ")
4764+
.Append(statusDateChangeTime);
47544765
}
47554766
else
47564767
{
4757-
descriptionNLP = "No signer recipients found for this envelope. Only 'Signer' recipient types are supported in the current response.";
4768+
descriptionBuilder.Append("No signer recipients found for this envelope. Only 'Signer' recipient types are supported in the current response.");
47584769
}
47594770

4760-
return descriptionNLP;
4771+
return descriptionBuilder.ToString();
47614772
}
47624773

47634774
private string GetEnvelopeUrl(JToken envelope)
@@ -4933,12 +4944,12 @@ private void RenameSpecificKeys(JObject jObject, Dictionary<string, string> keyM
49334944

49344945
foreach (var envelope in filteredEnvelopes)
49354946
{
4936-
DateTime statusUpdateTime = envelope["statusChangedDateTime"].ToObject<DateTime>();
4947+
DateTime statusUpdateTime = envelope["statusChangedDateTime"]?.ToObject<DateTime>() ?? DateTime.MinValue;
49374948
DateTime statusUpdateTimeInLocalTimeZone = TimeZoneInfo.ConvertTimeFromUtc(statusUpdateTime, userTimeZone);
49384949
System.Globalization.TextInfo textInfo = new System.Globalization.CultureInfo("en-US", false).TextInfo;
49394950

49404951
JArray recipientNames = new JArray(
4941-
(envelope["recipients"]["signers"] as JArray)?.Select(recipient => recipient["name"]));
4952+
(envelope["recipients"]?["signers"] as JArray)?.Select(recipient => recipient["name"]));
49424953
JArray documentNames = new JArray(
49434954
(envelope["envelopeDocuments"] as JArray)?.Select(envelopeDocument => envelopeDocument["name"]));
49444955

@@ -4947,13 +4958,13 @@ private void RenameSpecificKeys(JObject jObject, Dictionary<string, string> keyM
49474958
["documents"] = string.Join(",", documentNames),
49484959
["recipients"] = string.Join(", ", recipientNames),
49494960
["statusDate"] = statusUpdateTimeInLocalTimeZone.ToString("h:mm tt, M/d/yy"),
4950-
["status"] = textInfo.ToTitleCase(envelope["status"].ToString()),
4951-
["sender"] = envelope["sender"]["userName"]
4961+
["status"] = textInfo.ToTitleCase(envelope["status"]?.ToString() ?? "Unknown status"),
4962+
["sender"] = envelope["sender"]?["userName"]?.ToString() ?? "Sender name empty"
49524963
};
49534964

49544965
filteredEnvelopesDetails.Add(new JObject()
49554966
{
4956-
["title"] = envelope["emailSubject"],
4967+
["title"] = envelope["emailSubject"]?.ToString() ?? "Title empty",
49574968
["subTitle"] = "Agreement",
49584969
["url"] = GetEnvelopeUrl(envelope),
49594970
["additionalPropertiesForSalesEnvelope"] = additionalPropertiesForSalesEnvelope
@@ -4967,30 +4978,31 @@ private void RenameSpecificKeys(JObject jObject, Dictionary<string, string> keyM
49674978
{
49684979
TimeZoneInfo userTimeZone = TimeZoneInfo.Local;
49694980
var filteredEnvelopesDetails = new JArray();
4970-
4981+
49714982
foreach (var envelope in filteredEnvelopes)
49724983
{
4973-
DateTime statusUpdateTime = envelope["statusChangedDateTime"].ToObject<DateTime>();
4984+
DateTime statusUpdateTime = envelope["statusChangedDateTime"]?.ToObject<DateTime>() ?? DateTime.MinValue;
49744985
DateTime statusUpdateTimeInLocalTimeZone = TimeZoneInfo.ConvertTimeFromUtc(statusUpdateTime, userTimeZone);
49754986
System.Globalization.TextInfo textInfo = new System.Globalization.CultureInfo("en-US", false).TextInfo;
49764987

49774988
JArray recipientNames = new JArray(
4978-
(envelope["recipients"]["signers"] as JArray)?.Select(recipient => recipient["name"]));
4989+
(envelope["recipients"]?["signers"] as JArray)?.Select(recipient => recipient["name"]));
4990+
49794991
JArray documentNames = new JArray(
4980-
(envelope["envelopeDocuments"] as JArray)?.Select(envelopeDocument => envelopeDocument["name"]));
4992+
(envelope["envelopeDocuments"] as JArray)?.Select(envelopeDocument => envelopeDocument["name"]));
49814993

49824994
filteredEnvelopesDetails.Add(new JObject()
49834995
{
4984-
["title"] = envelope["emailSubject"],
4996+
["title"] = envelope["emailSubject"]?.ToString() ?? "Email subject empty",
49854997
["description"] = GetDescriptionNLPForRelatedActivities(envelope),
4986-
["envelopeId"] = envelope["envelopeId"],
4998+
["envelopeId"] = envelope["envelopeId"]?.ToString() ?? "Envelope ID not found",
49874999
["statusDate"] = statusUpdateTimeInLocalTimeZone.ToString("h:mm tt, M/d/yy"),
49885000
["url"] = GetEnvelopeUrl(envelope),
49895001
["recipients"] = string.Join(", ", recipientNames),
49905002
["documents"] = string.Join(",", documentNames),
4991-
["sender"] = envelope["sender"]["userName"],
4992-
["status"] = textInfo.ToTitleCase(envelope["status"].ToString()),
4993-
["dateSent"] = envelope["sentDateTime"]
5003+
["sender"] = envelope["sender"]?["userName"]?.ToString() ?? "Sender username empty",
5004+
["status"] = envelope["status"] != null ? textInfo.ToTitleCase(envelope["status"].ToString()) : "Unknown status",
5005+
["dateSent"] = envelope["sentDateTime"]?.ToString() ?? "No sent date"
49945006
});
49955007
}
49965008

@@ -6847,7 +6859,8 @@ private void RenameSpecificKeys(JObject jObject, Dictionary<string, string> keyM
68476859
}
68486860

68496861
if (("ListEnvelopes".Equals(this.Context.OperationId, StringComparison.OrdinalIgnoreCase)) ||
6850-
("SalesCopilotListEnvelopes".Equals(this.Context.OperationId, StringComparison.OrdinalIgnoreCase)))
6862+
("SalesCopilotListEnvelopes".Equals(this.Context.OperationId, StringComparison.OrdinalIgnoreCase)) ||
6863+
("SearchListEnvelopes".Equals(this.Context.OperationId, StringComparison.OrdinalIgnoreCase)))
68516864
{
68526865
var body = ParseContentAsJObject(await response.Content.ReadAsStringAsync().ConfigureAwait(false), false);
68536866
var query = HttpUtility.ParseQueryString(this.Context.Request.RequestUri.Query);
@@ -6882,11 +6895,11 @@ private void RenameSpecificKeys(JObject jObject, Dictionary<string, string> keyM
68826895
case "recipientName":
68836896
case "recipientEmailId":
68846897
filteredEnvelopes = new JArray(envelopes.Where(envelope =>
6885-
envelope["recipients"].ToString().ToLower().Contains(envelopeFilterMap[filter].ToString().ToLower())));
6898+
envelope["recipients"]?.ToString().ToLower().Contains(envelopeFilterMap[filter].ToString().ToLower()) ?? false));
68866899
break;
68876900
case "envelopeTitle":
68886901
filteredEnvelopes = new JArray(envelopes.Where(envelope =>
6889-
envelope["emailSubject"].ToString().ToLower().Contains(envelopeFilterMap[filter].ToString().ToLower())));
6902+
envelope["emailSubject"]?.ToString().ToLower().Contains(envelopeFilterMap[filter].ToString().ToLower()) ?? false));
68906903
break;
68916904
case "customFieldName":
68926905
case "customFieldValue":
@@ -6914,87 +6927,16 @@ private void RenameSpecificKeys(JObject jObject, Dictionary<string, string> keyM
69146927
}
69156928
}
69166929

6917-
filteredEnvelopesDetails = this.Context.OperationId.Contains("SalesCopilot") ? GetFilteredEnvelopeDetailsForSalesCopilot(envelopes) :
6918-
GetFilteredEnvelopeDetails(envelopes);
6919-
newBody["value"] = (filteredEnvelopesDetails.Count < top) ?
6920-
filteredEnvelopesDetails :
6921-
new JArray(filteredEnvelopesDetails.Skip(skip).Take(top).ToArray());
6922-
newBody["hasMoreResults"] = (skip + top < filteredEnvelopesDetails.Count) ? true : false;
6923-
response.Content = new StringContent(newBody.ToString(), Encoding.UTF8, "application/json");
6924-
}
6925-
6926-
if (("SearchListEnvelopes".Equals(this.Context.OperationId, StringComparison.OrdinalIgnoreCase)))
6927-
{
6928-
var body = ParseContentAsJObject(await response.Content.ReadAsStringAsync().ConfigureAwait(false), false);
6929-
var query = HttpUtility.ParseQueryString(this.Context.Request.RequestUri.Query);
6930-
JObject newBody = new JObject();
6931-
6932-
int top = string.IsNullOrEmpty(query.Get("top")) ? 10: int.Parse(query.Get("top"));
6933-
int skip = string.IsNullOrEmpty(query.Get("skip")) ? 0: int.Parse(query.Get("skip"));
6934-
6935-
JArray envelopes = (body["envelopes"] as JArray) ?? new JArray();
6936-
JArray filteredEnvelopes = new JArray();
6937-
var filteredEnvelopesDetails = new JArray();
6938-
var recipientName = query.Get("recipientName") ?? null;
6939-
var recipientEmailId = query.Get("recipientEmailId") ?? null;
6940-
var envelopeTitle = query.Get("envelopeTitle") ?? null;
6941-
var customFieldName = query.Get("customFieldName") ?? null;
6942-
var customFieldValue = query.Get("customFieldValue") ?? null;
6930+
filteredEnvelopesDetails = this.Context.OperationId.Contains("SalesCopilot") ?
6931+
GetFilteredEnvelopeDetailsForSalesCopilot(envelopes) :
6932+
GetFilteredEnvelopeDetails(envelopes);
69436933

6944-
var envelopeFilterMap = new Dictionary<string, string>() {
6945-
{"recipientName", recipientName},
6946-
{"recipientEmailId", recipientEmailId},
6947-
{"envelopeTitle", envelopeTitle},
6948-
{"customFieldName", customFieldName},
6949-
{"customFieldValue", customFieldValue}
6950-
};
6951-
6952-
foreach (var filter in envelopeFilterMap.Keys)
6953-
{
6954-
if (envelopeFilterMap[filter] != null)
6955-
{
6956-
switch (filter)
6957-
{
6958-
case "recipientName":
6959-
case "recipientEmailId":
6960-
filteredEnvelopes = new JArray(envelopes.Where(envelope =>
6961-
envelope["recipients"].ToString().ToLower().Contains(envelopeFilterMap[filter].ToString().ToLower())));
6962-
break;
6963-
case "envelopeTitle":
6964-
filteredEnvelopes = new JArray(envelopes.Where(envelope =>
6965-
envelope["emailSubject"].ToString().ToLower().Contains(envelopeFilterMap[filter].ToString().ToLower())));
6966-
break;
6967-
case "customFieldName":
6968-
case "customFieldValue":
6969-
filteredEnvelopes = new JArray(envelopes.Where(envelope =>
6970-
{
6971-
var customFields = envelope["customFields"] as JToken;
6972-
return customFields?.ToString().ToLower().Contains(envelopeFilterMap[filter].ToString().ToLower()) ?? false;
6973-
}));
6974-
break;
6975-
default:
6976-
break;
6977-
}
6978-
6979-
if (filteredEnvelopes.Count > 0)
6980-
{
6981-
envelopes.Clear();
6982-
envelopes = new JArray(filteredEnvelopes);
6983-
filteredEnvelopes.Clear();
6984-
}
6985-
else
6986-
{
6987-
envelopes.Clear();
6988-
break;
6989-
}
6990-
}
6991-
}
6992-
6993-
filteredEnvelopesDetails = GetFilteredEnvelopeDetails(envelopes);
69946934
newBody["value"] = (filteredEnvelopesDetails.Count < top) ?
69956935
filteredEnvelopesDetails :
69966936
new JArray(filteredEnvelopesDetails.Skip(skip).Take(top).ToArray());
6937+
69976938
newBody["hasMoreResults"] = (skip + top < filteredEnvelopesDetails.Count) ? true : false;
6939+
69986940
response.Content = new StringContent(newBody.ToString(), Encoding.UTF8, "application/json");
69996941
}
70006942

0 commit comments

Comments
 (0)