/// <summary> /// Create and configure the organization service proxy. /// Initiate the method to create any data that this sample requires. /// Schedule a resource. /// Optionally delete any entity records that were created for this sample. /// </summary> /// <param name="serverConfig">Contains server connection information.</param> /// <param name="promptforDelete">When True, the user will be prompted to delete all /// created entities.</param> public void Run(ServerConnection.Configuration serverConfig, bool promptForDelete) { try { // Connect to the Organization service. // The using statement assures that the service proxy will be properly disposed. using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials)) { // This statement is required to enable early-bound type support. _serviceProxy.EnableProxyTypes(); // Call the method to create any data that this sample requires. CreateRequiredRecords(); //<snippetScheduleResource1> // Create the van required resource object. RequiredResource vanReq = new RequiredResource { ResourceId = _vanId, ResourceSpecId = _specId }; // Create the appointment request. AppointmentRequest appointmentReq = new AppointmentRequest { RequiredResources = new RequiredResource[] { vanReq }, Direction = SearchDirection.Backward, Duration = 60, NumberOfResults = 10, ServiceId = _plumberServiceId, // The search window describes the time when the resouce can be scheduled. // It must be set. SearchWindowStart = DateTime.Now.ToUniversalTime(), SearchWindowEnd = DateTime.Now.AddDays(7).ToUniversalTime(), UserTimeZoneCode = 1 }; // Verify whether there are openings available to schedule the appointment using this resource SearchRequest search = new SearchRequest { AppointmentRequest = appointmentReq }; SearchResponse searched = (SearchResponse)_serviceProxy.Execute(search); if (searched.SearchResults.Proposals.Length > 0) { Console.WriteLine("Openings are available to schedule the resource."); } //</snippetScheduleResource1> DeleteRequiredRecords(promptForDelete); } } // Catch any service fault exceptions that Microsoft Dynamics CRM throws. catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> ) { // You can handle an exception here or pass it back to the calling method. throw; } }
/// <summary> /// Create and configure the organization service proxy. /// Initiate the method to create any data that this sample requires. /// Schedule a resource. /// Optionally delete any entity records that were created for this sample. /// </summary> /// <param name="serverConfig">Contains server connection information.</param> /// <param name="promptforDelete">When True, the user will be prompted to delete all /// created entities.</param> public void Run(ServerConnection.Configuration serverConfig, bool promptForDelete) { try { // Connect to the Organization service. // The using statement assures that the service proxy will be properly disposed. using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri,serverConfig.Credentials, serverConfig.DeviceCredentials)) { // This statement is required to enable early-bound type support. _serviceProxy.EnableProxyTypes(); // Call the method to create any data that this sample requires. CreateRequiredRecords(); //<snippetScheduleResource1> // Create the van required resource object. RequiredResource vanReq = new RequiredResource { ResourceId = _vanId, ResourceSpecId = _specId }; // Create the appointment request. AppointmentRequest appointmentReq = new AppointmentRequest { RequiredResources = new RequiredResource[] { vanReq }, Direction = SearchDirection.Backward, Duration = 60, NumberOfResults = 10, ServiceId = _plumberServiceId, // The search window describes the time when the resouce can be scheduled. // It must be set. SearchWindowStart = DateTime.Now.ToUniversalTime(), SearchWindowEnd = DateTime.Now.AddDays(7).ToUniversalTime(), UserTimeZoneCode = 1 }; // Verify whether there are openings available to schedule the appointment using this resource SearchRequest search = new SearchRequest { AppointmentRequest = appointmentReq }; SearchResponse searched = (SearchResponse)_serviceProxy.Execute(search); if (searched.SearchResults.Proposals.Length > 0) { Console.WriteLine("Openings are available to schedule the resource."); } //</snippetScheduleResource1> DeleteRequiredRecords(promptForDelete); } } // Catch any service fault exceptions that Microsoft Dynamics CRM throws. catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>) { // You can handle an exception here or pass it back to the calling method. throw; } }
/// <summary> /// This method creates any entity records that this sample requires. /// </summary> public void CreateRequiredRecords() { // Get the current user's information. WhoAmIRequest userRequest = new WhoAmIRequest(); WhoAmIResponse userResponse = (WhoAmIResponse)_serviceProxy.Execute(userRequest); // 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); Console.WriteLine("Created a sample service for the equipment: {0}.", plumberService.Name); }
/// <summary> /// This method creates any entity records that this sample requires. /// </summary> public void CreateRequiredRecords() { // Get the current user's information. WhoAmIRequest userRequest = new WhoAmIRequest(); WhoAmIResponse userResponse = (WhoAmIResponse)_serviceProxy.Execute(userRequest); // 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); Console.WriteLine("Created a sample service for the equipment: {0}.", plumberService.Name); }
public void SendForResources(RequiredResource required) { requiredResource = required; peasant.MoveTo(required.storage); state = State.MoveToStorage; }
[STAThread] // Required to support the interactive login experience static void Main(string[] args) { CrmServiceClient service = null; try { service = SampleHelpers.Connect("Connect"); if (service.IsReady) { // Create any entity records that the demonstration code requires SetUpSample(service); #region Demonstrate RequiredResource vanReq = new RequiredResource { ResourceId = _vanId, ResourceSpecId = _specId }; // Create the appointment request. AppointmentRequest appointmentReq = new AppointmentRequest { RequiredResources = new RequiredResource[] { vanReq }, Direction = SearchDirection.Backward, Duration = 60, NumberOfResults = 10, ServiceId = _plumberServiceId, // The search window describes the time when the resouce can be scheduled. // It must be set. SearchWindowStart = DateTime.Now.ToUniversalTime(), SearchWindowEnd = DateTime.Now.AddDays(7).ToUniversalTime(), UserTimeZoneCode = 1 }; // Verify whether there are openings available to schedule the appointment using this resource SearchRequest search = new SearchRequest { AppointmentRequest = appointmentReq }; SearchResponse searched = (SearchResponse)service.Execute(search); if (searched.SearchResults.Proposals.Length > 0) { Console.WriteLine("Openings are available to schedule the resource."); } DeleteRequiredRecords(service, prompt); #endregion Demonstrate } else { const string UNABLE_TO_LOGIN_ERROR = "Unable to Login to Common Data Service"; if (service.LastCrmError.Equals(UNABLE_TO_LOGIN_ERROR)) { Console.WriteLine("Check the connection string values in cds/App.config."); throw new Exception(service.LastCrmError); } else { throw service.LastCrmException; } } } catch (Exception ex) { SampleHelpers.HandleException(ex); } finally { if (service != null) { service.Dispose(); } Console.WriteLine("Press <Enter> to exit."); Console.ReadLine(); } }