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.
Discover more from Nishant Rana's Weblog
Subscribe to get the latest posts sent to your email.

Does it work with email or phone call activities where the ‘to’ property is set to the contact record, but the regarding is not?
LikeLike