Hi,
Just sharing a sample code that could be used to cancel all the open activities for a particular record.
private void CancelChildActivities(Guid entityRecordGuid, IOrganizationService service)
{
QueryExpression qe = new QueryExpression();
qe.ColumnSet = new ColumnSet(new string[] { "activityid", "activitytypecode" });
qe.EntityName = "activitypointer";
FilterExpression filterStateCode = new FilterExpression();
filterStateCode.FilterOperator = LogicalOperator.Or;
filterStateCode.AddCondition("statecode", ConditionOperator.Equal, "Open");
filterStateCode.AddCondition("statecode", ConditionOperator.Equal, "Scheduled");
FilterExpression filter = new FilterExpression();
filter.FilterOperator = LogicalOperator.And;
filter.AddCondition("regardingobjectid", ConditionOperator.Equal, entityRecordGuid);
filter.AddFilter(filterStateCode);
qe.Criteria = filter;
RetrieveMultipleRequest request = new RetrieveMultipleRequest();
request.Query = qe;
RetrieveMultipleResponse response = (RetrieveMultipleResponse)service.Execute(request);
foreach (Entity activity in response.EntityCollection.Entities)
{
CancelActivity(activity, service);
}
}
private void CancelActivity(Entity entity, IOrganizationService service)
{
EntityReference moniker = new EntityReference();
if (entity.LogicalName == "activitypointer")
{
if (entity.Attributes.Contains("activityid") & entity.Attributes.Contains("activitytypecode"))
{
moniker.LogicalName = entity.Attributes["activitytypecode"].ToString();
moniker.Id = (Guid)entity.Attributes["activityid"];
SetStateRequest request = new SetStateRequest();
request.EntityMoniker = moniker;
request.State = new OptionSetValue(2);
request.Status = new OptionSetValue(-1);
SetStateResponse response = (SetStateResponse)service.Execute(request);
}
}
}
Bye.
0.000000
0.000000