Recently had a requirement to set Access Mode of around 500 users to Administrative from Read – Write. We wrote an on demand workflow for that. However, running that workflow on those 500 records in a batch of 100 records was causing them to stuck in waiting stage and we had to then manually resume those workflow instance. So we ended up writing a Console Application for that.
QueryExpression queryExpression = new QueryExpression();
queryExpression.EntityName = "systemuser";
queryExpression.ColumnSet = new ColumnSet();
queryExpression.ColumnSet.AddColumn("fullname");
ConditionExpression conditionExpression1 = new ConditionExpression();
conditionExpression1.AttributeName = "tk_businessarea";
conditionExpression1.Values.Add("EE286698-AF08-E311-B55E-1CC1DE6DAA0B");
conditionExpression1.Operator = ConditionOperator.Equal;
ConditionExpression conditionExpression2 = new ConditionExpression();
conditionExpression2.AttributeName = "isdisabled";
conditionExpression2.Values.Add(false);
conditionExpression2.Operator = ConditionOperator.Equal;
// access mode ==> 0 --> Read Write and 1 --> Adminstrative
ConditionExpression conditionExpression3 = new ConditionExpression();
conditionExpression3.AttributeName = "accessmode";
conditionExpression3.Values.Add(1);
conditionExpression3.Operator = ConditionOperator.Equal;
queryExpression.Criteria.AddCondition(conditionExpression1);
queryExpression.Criteria.AddCondition(conditionExpression2);
queryExpression.Criteria.AddCondition(conditionExpression3);
queryExpression.Criteria.FilterOperator = LogicalOperator.And;
EntityCollection entityColl = organizationProxy.RetrieveMultiple(queryExpression);
foreach(var entity in entityColl.Entities)
{
Entity userEntity = new Entity("systemuser");
userEntity.Id = entity.Id;
userEntity.Attributes["accessmode"] = new OptionSetValue(0);
organizationProxy.Update(userEntity);
}
Hope it helps !!





