Answered by:
Programmatically add Resource to Resource Group

Question
-
CRM 2011: I am attempting to add a Facility/Equipment Resource to a Resource Group programmatically. AssociateRequest results in error: the Update method does not support entities of type 'resource'/'resourcegroup' Does anyone have an example of how to do this?
Friday, June 22, 2012 9:24 PM
Answers
-
Hi, you need to define resource constraints, resource spec etc., please refer to this code. hope this helps.
// Create the van resource. Equipment van = new Equipment { Name = "Van 1", TimeZoneCode = 1, BusinessUnitId = new EntityReference(BusinessUnit.EntityLogicalName, userResponse.BusinessUnitId) }; _vanId = _serviceProxy.Create(van); Console.WriteLine("Created a sample equipment: {0}.", van.Name); // Create the contraints for creating the plumber resource group System.Text.StringBuilder builder = new System.Text.StringBuilder("<Constraints>"); builder.Append("<Constraint>"); builder.Append("<Expression>"); builder.Append("<Body>resource[\"Id\"] == "); builder.Append(userResponse.UserId.ToString("B")); builder.Append(" || resource[\"Id\"] == "); builder.Append(_vanId.ToString("B")); builder.Append("</Body>"); builder.Append("<Parameters>"); builder.Append("<Parameter name=\"resource\" />"); builder.Append("</Parameters>"); builder.Append("</Expression>"); builder.Append("</Constraint>"); builder.Append("</Constraints>"); // Define an anonymous type to define the possible constraint based group type code values. var ConstraintBasedGroupTypeCode = new { Static = 0, Dynamic = 1, Implicit = 2 }; // Create the plumber resource group. ConstraintBasedGroup group = new ConstraintBasedGroup { BusinessUnitId = new EntityReference(BusinessUnit.EntityLogicalName, userResponse.BusinessUnitId), Name = "Plumber with Van 1", Constraints = builder.ToString(), GroupTypeCode = new OptionSetValue(ConstraintBasedGroupTypeCode.Static), }; _groupId = _serviceProxy.Create(group); Console.WriteLine("Created a sample resource group: {0}.", group.Name); // Create the resource specification. ResourceSpec spec = new ResourceSpec { BusinessUnitId = new EntityReference(BusinessUnit.EntityLogicalName, userResponse.BusinessUnitId), ObjectiveExpression = @" <Expression> <Body>udf ""Random""(factory,resource,appointment,request,leftoffset,rightoffset)</Body> <Parameters> <Parameter name=""factory"" /> <Parameter name=""resource"" /> <Parameter name=""appointment"" /> <Parameter name=""request"" /> <Parameter name=""leftoffset"" /> <Parameter name=""rightoffset"" /> </Parameters> <Properties EvaluationInterval=""P0D"" evaluationcost=""0"" /> </Expression>", RequiredCount = 1, Name = "Test Spec", GroupObjectId = _groupId }; _specId = _serviceProxy.Create(spec); // Create the plumber required resource object. RequiredResource plumberReq = new RequiredResource { ResourceId = userResponse.UserId, // assume current user is the plumber ResourceSpecId = _specId }; // Create the service for the equipment. Service plumberService = new Service { Name = "Plumber 1", Duration = 60, InitialStatusCode = new OptionSetValue(1), Granularity = "FREQ=MINUTELY;INTERVAL=15;", ResourceSpecId = new EntityReference(ResourceSpec.EntityLogicalName, _specId) }; _plumberServiceId = _serviceProxy.Create(plumberService);
Sunday, June 24, 2012 2:00 PM
All replies
-
Hi, you need to define resource constraints, resource spec etc., please refer to this code. hope this helps.
// Create the van resource. Equipment van = new Equipment { Name = "Van 1", TimeZoneCode = 1, BusinessUnitId = new EntityReference(BusinessUnit.EntityLogicalName, userResponse.BusinessUnitId) }; _vanId = _serviceProxy.Create(van); Console.WriteLine("Created a sample equipment: {0}.", van.Name); // Create the contraints for creating the plumber resource group System.Text.StringBuilder builder = new System.Text.StringBuilder("<Constraints>"); builder.Append("<Constraint>"); builder.Append("<Expression>"); builder.Append("<Body>resource[\"Id\"] == "); builder.Append(userResponse.UserId.ToString("B")); builder.Append(" || resource[\"Id\"] == "); builder.Append(_vanId.ToString("B")); builder.Append("</Body>"); builder.Append("<Parameters>"); builder.Append("<Parameter name=\"resource\" />"); builder.Append("</Parameters>"); builder.Append("</Expression>"); builder.Append("</Constraint>"); builder.Append("</Constraints>"); // Define an anonymous type to define the possible constraint based group type code values. var ConstraintBasedGroupTypeCode = new { Static = 0, Dynamic = 1, Implicit = 2 }; // Create the plumber resource group. ConstraintBasedGroup group = new ConstraintBasedGroup { BusinessUnitId = new EntityReference(BusinessUnit.EntityLogicalName, userResponse.BusinessUnitId), Name = "Plumber with Van 1", Constraints = builder.ToString(), GroupTypeCode = new OptionSetValue(ConstraintBasedGroupTypeCode.Static), }; _groupId = _serviceProxy.Create(group); Console.WriteLine("Created a sample resource group: {0}.", group.Name); // Create the resource specification. ResourceSpec spec = new ResourceSpec { BusinessUnitId = new EntityReference(BusinessUnit.EntityLogicalName, userResponse.BusinessUnitId), ObjectiveExpression = @" <Expression> <Body>udf ""Random""(factory,resource,appointment,request,leftoffset,rightoffset)</Body> <Parameters> <Parameter name=""factory"" /> <Parameter name=""resource"" /> <Parameter name=""appointment"" /> <Parameter name=""request"" /> <Parameter name=""leftoffset"" /> <Parameter name=""rightoffset"" /> </Parameters> <Properties EvaluationInterval=""P0D"" evaluationcost=""0"" /> </Expression>", RequiredCount = 1, Name = "Test Spec", GroupObjectId = _groupId }; _specId = _serviceProxy.Create(spec); // Create the plumber required resource object. RequiredResource plumberReq = new RequiredResource { ResourceId = userResponse.UserId, // assume current user is the plumber ResourceSpecId = _specId }; // Create the service for the equipment. Service plumberService = new Service { Name = "Plumber 1", Duration = 60, InitialStatusCode = new OptionSetValue(1), Granularity = "FREQ=MINUTELY;INTERVAL=15;", ResourceSpecId = new EntityReference(ResourceSpec.EntityLogicalName, _specId) }; _plumberServiceId = _serviceProxy.Create(plumberService);
Sunday, June 24, 2012 2:00 PM -
Hi, did you find the code sample helpful?
- Proposed as answer by Seepath Monday, June 25, 2012 12:51 PM
Monday, June 25, 2012 12:51 PM -
Thanks, I should have been looking for 'Constraints'. For some reason I must have overlooked that property of the ResourceGroup. This does indeed work.Monday, June 25, 2012 1:40 PM