Announcements
how can i update the Satisfaction. In the incident case form i have case status
if the case status = complete
=>> Satisfaction will be sastisfied
try
{
trace.Trace("insidetry");
Entity incident = (Entity)context.InputParameters["Target"];
Entity entity = service.Retrieve("incident", incident.Id, new ColumnSet(true));
//chi nhan nhung cot bi thay doi
trace.Trace("case");
EntityReference RegardingCaseRef = entity["cos_csucasestatus"] as EntityReference;
Entity RegardingCase = service.Retrieve(RegardingCaseRef.LogicalName, RegardingCaseRef.Id, new ColumnSet("cos_csucasestatus"));
// inherited from the QueryBase,
trace.Trace("incident");
QueryExpression qeCaseStatus = new QueryExpression("incident");
qeCaseStatus.ColumnSet = new ColumnSet(true);
qeCaseStatus.Criteria.AddCondition(new ConditionExpression("cos_csucasestatus", ConditionOperator.Equal, RegardingCaseRef.Id));
EntityCollection allRelatedCase = service.RetrieveMultiple(qeCaseStatus);
trace.Trace("check boool");
if (CheckcaseStatus(allRelatedCase))
{
trace.Trace("Case title: " + RegardingCase["title"]);
RegardingCase["customersatisfactioncode"] = new OptionSetValue(5);
service.Update(RegardingCase);
}
}
catch
{
throw;
}
}
}
public bool CheckcaseStatus (EntityCollection CaseStatus)
{
if (CaseStatus.Entities.All(x => x.GetAttributeValue<OptionSetValue>("cos_csucasestatus")?.Value == 769190006))
{
//Console.WriteLine("All task completed");
return true;
}
else
{
return false;
}
hi thanks
First of all, you used "cos_csucasestatus" as an EntityReference at the beginning and then as an OptionSetValue, this would throw an exception without doubt. Not sure if this is the root cause of your issue.
Second, you should always create a new entity instance if you want to update an entity record. Your code should be like this:
var caseToUpdate = new Entity(RegardingCase.LogicalName, RegardingCase.Id);
caseToUpdate ["customersatisfactioncode"] = new OptionSetValue(5);
service.Update(caseToUpdate );
If you update the entity object base on you retrieved, you may update some extra fields that you do not want, and these fields may trigger additional logic (plugins/workflow/cloud flow). In your code, your update operation will update the "cos_csucasestatus" and "customersatisfactioncode" fields, so any plugin registered on these two fields update will get triggered.
try
{
trace.Trace("insidetry");
Entity incident = (Entity)context.InputParameters["Target"];
Entity entity = service.Retrieve("incident", incident.Id, new ColumnSet(true));
//chi nhan nhung cot bi thay doi
trace.Trace("case");
EntityReference RegardingCaseRef = entity["cos_csucasestatus"] as EntityReference;
Entity RegardingCase = service.Retrieve(RegardingCaseRef.LogicalName, RegardingCaseRef.Id, new ColumnSet("cos_csucasestatus"));
// inherited from the QueryBase,
trace.Trace("incident");
QueryExpression qeCaseStatus = new QueryExpression("incident");
qeCaseStatus.ColumnSet = new ColumnSet(true);
qeCaseStatus.Criteria.AddCondition(new ConditionExpression("cos_csucasestatus", ConditionOperator.Equal, RegardingCaseRef.Id));
EntityCollection allRelatedCase = service.RetrieveMultiple(qeCaseStatus);
trace.Trace("check boool");
if (CheckcaseStatus(allRelatedCase))
{
trace.Trace("Case title: " + RegardingCase["title"]);
RegardingCase["customersatisfactioncode"] = new OptionSetValue(5);
service.Update(RegardingCase);
}
}
catch
{
throw;
}
}
}
public bool CheckcaseStatus (EntityCollection CaseStatus)
{
if (CaseStatus.Entities.All(x => x.GetAttributeValue<OptionSetValue>("cos_csucasestatus")?.Value == 769190006))
{
//Console.WriteLine("All task completed");
return true;
}
else
{
return false;
}
if the user choose casestatus parent is complete is gonna update the satisfaction to sastisfied
do you have any suggest
Your code doesn't look complete. Can you please change it to a compilable state?
André Arnaud de Cal... 291,359 Super User 2024 Season 2
Martin Dráb 230,370 Most Valuable Professional
nmaenpaa 101,156