When we reactivate cases, the old case resolution record is set as cancelled and a new case resolution record is created, before you re open the case, you can actually store case resolution data, which you can later use when you re-close the case.
Solution:
Below is the code to get case resolution data
private void GetCaseResolutionData()
{
string resolutiondata = null, Remark=null;
try {
EntityReference currentEntity = (EntityReference)context.InputParameters["Target"];
Entity Case = service.Retrieve("incident", currentEntity.Id, new ColumnSet(new string[] {"statuscode"}));
Guid CaseID = currentEntity.Id;
string ResolutionType = Case.FormattedValues["statuscode"]; //case resolution dropdown formatted value
int Resolutionvalue = ((OptionSetValue)Case["statuscode"]).Value; //case resolution option set value
QueryExpression query = new QueryExpression("activitypointer");
query.ColumnSet.AddColumns("subject");
query.ColumnSet.AddColumns("description");
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("regardingobjectid", ConditionOperator.Equal, CaseID);
EntityCollection results = service.RetrieveMultiple(query);
trace.Trace("after Query Exprrssion");
if (results.Entities.Count >= 1)
{
resolutiondata = results.Entities[0].GetAttributeValue<string>("subject"); // resolution saved against the case
Remark= results.Entities[0].GetAttributeValue<string>("description"); //remarks saved against case
}
Code below is to close case again with data saved as per above string
var resolution = new Entity("incidentresolution");
resolution["subject"] = resolutiondata;
resolution["incidentid"] = new EntityReference { Id = caseID, LogicalName = "incident" };
var closeIncidentRequest = new CloseIncidentRequest
{
IncidentResolution = resolution,
Status = new OptionSetValue((int)resolutionType)
};
service.Execute(closeIncidentRequest);
Comments
Post a Comment