/// <summary> /// Deletes any entity records that were created for this sample. /// <param name="prompt">Indicates whether to prompt the user /// to delete the records created in this sample.</param> /// </summary> public void DeleteRequiredRecords(bool prompt) { bool toBeDeleted = true; if (prompt) { // Ask the user if the created entities should be deleted. Console.Write("\nDo you want these entity records deleted? (y/n) [y]: "); String answer = Console.ReadLine(); if (answer.StartsWith("y") || answer.StartsWith("Y") || answer == String.Empty) { toBeDeleted = true; } else { toBeDeleted = false; } } if (toBeDeleted) { // First disable the org EntityInstanceId organizationCreated = new EntityInstanceId(); organizationCreated.Id = _organizationID; Microsoft.Xrm.Sdk.Deployment.Organization organization = (Microsoft.Xrm.Sdk.Deployment.Organization)client.Retrieve( DeploymentEntityType.Organization, organizationCreated); // Update status to disabled organization.State = OrganizationState.Disabled; client.Update(organization); Console.WriteLine("Organization has been disabled."); // Second delete it client.Delete(DeploymentEntityType.Organization, organizationCreated); Console.WriteLine("Organization has been deleted."); } }
/// <summary> /// Demonstrates how to use the Deployment Web Service to create an organization /// and poll the status of the job. /// </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(); CreateRequiredRecords(serverConfig, promptforDelete); //<snippetUseAsyncDeploymentServiceMessages1> // Instantiate DeploymentServiceClient for calling the service. client = ProxyClientHelper.CreateClient( new Uri(serverConfig.DiscoveryUri.ToString() .Replace("Services", "Deployment") .Replace("Discovery", "Deployment"))); // Setting credentials from the current security context. if (serverConfig.Credentials == null) { client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; } else { client.ClientCredentials.Windows.ClientCredential = serverConfig.Credentials.Windows.ClientCredential; } using (client) { // Set properties for the new organization Microsoft.Xrm.Sdk.Deployment.Organization organization = new Microsoft.Xrm.Sdk.Deployment.Organization { BaseCurrencyCode = "USD", BaseCurrencyName = "US Dollar", BaseCurrencyPrecision = 2, BaseCurrencySymbol = "$", BaseLanguageCode = 1033, FriendlyName = _friendlyName, UniqueName = _uniqueName, SqlCollation = "Latin1_General_CI_AI", SqlServerName = _sqlServerName, SrsUrl = _srsUrl, SqmIsEnabled = false }; // Create a request for the deployment web service // CRM server app pool must have permissions on SQL server BeginCreateOrganizationRequest request = new BeginCreateOrganizationRequest { Organization = organization, SysAdminName = _sysAdminName }; // Execute the request BeginCreateOrganizationResponse response = (BeginCreateOrganizationResponse)client.Execute(request); // The operation is asynchronous, so the response object contains // a unique identifier for the operation Guid operationId = response.OperationId; // Retrieve the Operation using the OperationId RetrieveRequest retrieveOperationStatus = new RetrieveRequest(); retrieveOperationStatus.EntityType = DeploymentEntityType.DeferredOperationStatus; retrieveOperationStatus.InstanceTag = new EntityInstanceId { Id = operationId }; RetrieveResponse retrieveResponse; DeferredOperationStatus deferredOperationStatus; Console.WriteLine("Retrieving state of the job..."); // Retrieve the Operation State until Organization is created do { // Wait 3 secs to not overload server Thread.Sleep(3000); retrieveResponse = (RetrieveResponse)client.Execute(retrieveOperationStatus); deferredOperationStatus = ((DeferredOperationStatus)retrieveResponse.Entity); } while (deferredOperationStatus.State != DeferredOperationState.Processing && deferredOperationStatus.State != DeferredOperationState.Completed); // Poll OrganizationStatusRequest RetrieveRequest retrieveReqServer = new RetrieveRequest(); retrieveReqServer.EntityType = DeploymentEntityType.Organization; retrieveReqServer.InstanceTag = new EntityInstanceId(); retrieveReqServer.InstanceTag.Name = organization.UniqueName; RetrieveResponse retrieveRespServer; OrganizationState orgState; Console.WriteLine("Retrieving state of the organization..."); // Retrieve and check the Organization State until is enabled do { retrieveRespServer = (RetrieveResponse)client.Execute(retrieveReqServer); _organizationID = ((Microsoft.Xrm.Sdk.Deployment.Organization)retrieveRespServer.Entity).Id; orgState = ((Microsoft.Xrm.Sdk.Deployment.Organization)retrieveRespServer.Entity).State; // Wait 5 secs to not overload server Thread.Sleep(5000); } while (orgState != OrganizationState.Enabled); Console.WriteLine("Organization has been created!"); //</snippetUseAsyncDeploymentServiceMessages1> 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 first connects to the Deployment service. Then, /// a variety of messages are used to retrieve deployment information. /// </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 { //<snippetUseDeploymentServiceMessages1> // 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(); // Instantiate DeploymentServiceClient for calling the service. DeploymentServiceClient serviceClient = Deployment.Proxy.ProxyClientHelper.CreateClient( new Uri(serverConfig.DiscoveryUri.ToString() .Replace("Services", "Deployment") .Replace("Discovery", "Deployment"))); // Setting credentials from the current security context. if (serverConfig.Credentials == null) { serviceClient.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; } else { serviceClient.ClientCredentials.Windows.ClientCredential = serverConfig.Credentials.Windows.ClientCredential; } // Retrieve all deployed instances of Microsoft Dynamics CRM. var organizations = serviceClient.RetrieveAll(DeploymentEntityType.Organization); // Print list of all retrieved organizations. Console.WriteLine("Organizations in your deployment"); Console.WriteLine("================================"); foreach (var organization in organizations) { Console.WriteLine(organization.Name); } Console.WriteLine("<End of Listing>"); Console.WriteLine(); // Retrieve details of first organization from previous call. Deployment.Organization deployment = (Deployment.Organization)serviceClient.Retrieve( DeploymentEntityType.Organization, organizations[0]); // Print out retrieved details about your organization. Console.WriteLine(String.Format( "Selected deployment details for {0}", serverConfig.OrganizationName)); Console.WriteLine("========================================="); Console.Write("Friendly Name: "); Console.WriteLine(deployment.FriendlyName); Console.Write("Unique Name: "); Console.WriteLine(deployment.UniqueName); Console.Write("Organization Version: "); Console.WriteLine(deployment.Version); Console.Write("SQL Server Name: "); Console.WriteLine(deployment.SqlServerName); Console.Write("SRS URL: "); Console.WriteLine(deployment.SrsUrl); Console.WriteLine("<End of Listing>"); Console.WriteLine(); // Retrieve license and user information for your organization. TrackLicenseRequest licenseRequest = new TrackLicenseRequest(); TrackLicenseResponse licenseResponse = (TrackLicenseResponse)serviceClient.Execute(licenseRequest); // Print out the number of servers and the user list. Console.WriteLine(String.Format( "License and user information for {0}", serverConfig.OrganizationName)); Console.WriteLine("========================================="); Console.Write("Number of servers: "); Console.WriteLine(licenseResponse.Servers != null ? licenseResponse.Servers.Count.ToString() : "null"); Console.WriteLine("Users:"); foreach (OrganizationUserInfo user in licenseResponse.Users.ToArray()) { Console.WriteLine(user.FullName); } Console.WriteLine("<End of Listing>"); Console.WriteLine(); // Retrieve advanced settings for your organization. // Note that the columnset must contain at least one column. Setting // AllColumns to true results in an error. RetrieveAdvancedSettingsRequest request = new RetrieveAdvancedSettingsRequest { ConfigurationEntityName = "Server", ColumnSet = new ColumnSet( new string[] { "Id", "FullName", "Name", "Roles", "State", "Version" }) }; ConfigurationEntity configuration = ((RetrieveAdvancedSettingsResponse)serviceClient.Execute(request)).Entity; // Print out all advanced settings where IsWritable==true. Console.WriteLine("Advanced deployment settings that can be updated"); Console.WriteLine("================================================"); foreach (var setting in configuration.Attributes) { if (setting.Key != "Id") { Console.WriteLine( String.Format("{0}: {1}", setting.Key, setting.Value)); } } Console.WriteLine("<End of Listing>"); Console.WriteLine(); } //</snippetUseDeploymentServiceMessages1> } // 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> /// Demonstrates how to use the Deployment Web Service to create an organization /// and poll the status of the job. /// </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(); CreateRequiredRecords(serverConfig, promptforDelete); // Instantiate DeploymentServiceClient for calling the service. client = ProxyClientHelper.CreateClient( new Uri(serverConfig.DiscoveryUri.ToString() .Replace("Services", "Deployment") .Replace("Discovery", "Deployment"))); // Setting credentials from the current security context. if (serverConfig.Credentials == null) { client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; } else { client.ClientCredentials.Windows.ClientCredential = serverConfig.Credentials.Windows.ClientCredential; } using (client) { // Set properties for the new organization Microsoft.Xrm.Sdk.Deployment.Organization organization = new Microsoft.Xrm.Sdk.Deployment.Organization { BaseCurrencyCode = "USD", BaseCurrencyName = "US Dollar", BaseCurrencyPrecision = 2, BaseCurrencySymbol = "$", BaseLanguageCode = 1033, FriendlyName = _friendlyName, UniqueName = _uniqueName, SqlCollation = "Latin1_General_CI_AI", SqlServerName = _sqlServerName, SrsUrl = _srsUrl, SqmIsEnabled = false }; // Create a request for the deployment web service // CRM server app pool must have permissions on SQL server BeginCreateOrganizationRequest request = new BeginCreateOrganizationRequest { Organization = organization, SysAdminName = _sysAdminName }; // Execute the request BeginCreateOrganizationResponse response = (BeginCreateOrganizationResponse)client.Execute(request); // The operation is asynchronous, so the response object contains // a unique identifier for the operation Guid operationId = response.OperationId; // Retrieve the Operation using the OperationId RetrieveRequest retrieveOperationStatus = new RetrieveRequest(); retrieveOperationStatus.EntityType = DeploymentEntityType.DeferredOperationStatus; retrieveOperationStatus.InstanceTag = new EntityInstanceId { Id = operationId }; RetrieveResponse retrieveResponse; DeferredOperationStatus deferredOperationStatus; Console.WriteLine("Retrieving state of the job..."); // Retrieve the Operation State until Organization is created do { // Wait 3 secs to not overload server Thread.Sleep(3000); retrieveResponse = (RetrieveResponse)client.Execute(retrieveOperationStatus); deferredOperationStatus = ((DeferredOperationStatus)retrieveResponse.Entity); }while (deferredOperationStatus.State != DeferredOperationState.Processing && deferredOperationStatus.State != DeferredOperationState.Completed); // Poll OrganizationStatusRequest RetrieveRequest retrieveReqServer = new RetrieveRequest(); retrieveReqServer.EntityType = DeploymentEntityType.Organization; retrieveReqServer.InstanceTag = new EntityInstanceId(); retrieveReqServer.InstanceTag.Name = organization.UniqueName; RetrieveResponse retrieveRespServer; OrganizationState orgState; Console.WriteLine("Retrieving state of the organization..."); // Retrieve and check the Organization State until is enabled do { retrieveRespServer = (RetrieveResponse)client.Execute(retrieveReqServer); _organizationID = ((Microsoft.Xrm.Sdk.Deployment.Organization)retrieveRespServer.Entity).Id; orgState = ((Microsoft.Xrm.Sdk.Deployment.Organization)retrieveRespServer.Entity).State; // Wait 5 secs to not overload server Thread.Sleep(5000); }while (orgState != OrganizationState.Enabled); Console.WriteLine("Organization has been created!"); 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; } }
private void CreateOrganization() { if (string.IsNullOrWhiteSpace(this.DeploymentUrl) || !Uri.IsWellFormedUriString(this.DeploymentUrl, UriKind.Absolute)) { Log.LogError(string.Format(CultureInfo.CurrentCulture, "The Deployment service URL is not valid. {0}", this.DeploymentUrl)); return; } if (string.IsNullOrWhiteSpace(this.Name)) { Log.LogError("Missing required parameter: Name"); return; } if (string.IsNullOrWhiteSpace(this.DisplayName)) { Log.LogError("Missing required parameter: Display Name"); return; } if (string.IsNullOrWhiteSpace(this.SqlServerInstance)) { Log.LogError("Missing required parameter: Sql Server Instance"); return; } if (string.IsNullOrWhiteSpace(this.SsrsUrl) || !Uri.IsWellFormedUriString(this.SsrsUrl, UriKind.Absolute)) { Log.LogError(string.Format(CultureInfo.CurrentCulture, "The Sql Server Reporting Service URL is not valid. {0}", this.SsrsUrl)); return; } Log.LogMessage(MessageImportance.Normal, string.Format(CultureInfo.CurrentCulture, "Connecting to the deployment service {0}.", this.DeploymentUrl)); using (var service = ProxyClientHelper.CreateClient(new Uri(this.DeploymentUrl))) { var newOrganization = new Microsoft.Xrm.Sdk.Deployment.Organization { FriendlyName = this.DisplayName, UniqueName = this.Name, SqlServerName = this.SqlServerInstance, SrsUrl = this.SsrsUrl }; try { var request = new BeginCreateOrganizationRequest { Organization = newOrganization }; var response = service.Execute(request) as BeginCreateOrganizationResponse; if (response == null) { Log.LogError(string.Format(CultureInfo.CurrentCulture, "No response was received while creating Organization {0}", this.Name)); return; } var operationId = new EntityInstanceId { Id = response.OperationId }; int waitCount = 0; var organizationCreationStatus = service.Retrieve(DeploymentEntityType.DeferredOperationStatus, operationId) as DeferredOperationStatus; // Wait for the organization to be created. Checking the stauts repeatedly while (organizationCreationStatus != null && (organizationCreationStatus.State == DeferredOperationState.Processing || organizationCreationStatus.State == DeferredOperationState.Queued)) { Thread.Sleep(WaitIntervalInMilliseconds); Log.LogMessage(MessageImportance.High, "Processing..."); organizationCreationStatus = service.Retrieve(DeploymentEntityType.DeferredOperationStatus, operationId) as DeferredOperationStatus; if (++waitCount > this.Timeout) { break; } } if (waitCount >= this.Timeout) { Log.LogMessage(MessageImportance.High, string.Format(CultureInfo.CurrentCulture, "Your request for creation of Organization {0} is still being processed but the task has exceeded its timeout value of {1} minutes.", this.Name, this.Timeout)); } else { Log.LogMessage(MessageImportance.High, string.Format(CultureInfo.CurrentCulture, "The Organization {0} was created successfully.", this.Name)); } } catch (Exception exception) { Log.LogError(string.Format(CultureInfo.CurrentCulture, "An error occurred while creating Organization {0}. [{1}]", this.Name, exception.Message)); } } }
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { connection = cm.MSCRMConnections[comboBoxSource.SelectedIndex]; LogManager.WriteLog("Loading Server Settings."); toolStripStatusLabel1.Text = ""; try { string deploymentURI = connection.ServerAddress.Replace(connection.OrganizationName + "/", "") + "XRMDeployment/2011/Deployment.svc"; serviceClient = Microsoft.Xrm.Sdk.Deployment.Proxy.ProxyClientHelper.CreateClient(new Uri(deploymentURI)); serviceClient.ClientCredentials.Windows.ClientCredential.UserName = connection.UserName; serviceClient.ClientCredentials.Windows.ClientCredential.Password = connection.Password; // Retrieve all deployed instances of Microsoft Dynamics CRM. var organizations = serviceClient.RetrieveAll(DeploymentEntityType.Organization); Microsoft.Xrm.Sdk.Deployment.EntityInstanceId currentOrganization = null; foreach (var organization in organizations) { if (organization.Name.ToLower() == connection.OrganizationName.ToLower()) { currentOrganization = organization; } } RetrieveAdvancedSettingsRequest request = new RetrieveAdvancedSettingsRequest() { ConfigurationEntityName = "Deployment", ColumnSet = new ColumnSet() }; ConfigurationEntity ce = ((RetrieveAdvancedSettingsResponse)serviceClient.Execute(request)).Entity; foreach (var setting in ce.Attributes) { if (setting.Key == "AggregateQueryRecordLimit") { numericUpDownAggregateQueryRecordLimit.Text = setting.Value.ToString(); } else if (setting.Key == "AutomaticallyInstallDatabaseUpdates") { checkBoxAutomaticallyInstallDatabaseUpdates.Checked = (bool)setting.Value; } else if (setting.Key == "AutomaticallyReprovisionLanguagePacks") { checkBoxAutomaticallyReprovisionLanguagePacks.Checked = (bool)setting.Value; } } // Retrieve details of first organization from previous call. Microsoft.Xrm.Sdk.Deployment.Organization deployment = (Microsoft.Xrm.Sdk.Deployment.Organization)serviceClient.Retrieve( DeploymentEntityType.Organization, currentOrganization); // Print out retrieved details about your organization. string organizationProperties = ""; organizationProperties += "Friendly Name: " + deployment.FriendlyName + "\r\n"; organizationProperties += "Unique Name: " + deployment.UniqueName + "\r\n"; organizationProperties += "Organization Version: " + deployment.Version + "\r\n"; organizationProperties += "SQL Server Name: " + deployment.SqlServerName + "\r\n"; organizationProperties += "SRS URL: " + deployment.SrsUrl + "\r\n"; organizationProperties += "Base Currency Code: " + deployment.BaseCurrencyCode + "\r\n"; organizationProperties += "Base Currency Name: " + deployment.BaseCurrencyName + "\r\n"; organizationProperties += "Base Currency Precision: " + deployment.BaseCurrencyPrecision + "\r\n"; organizationProperties += "Base Currency Symbol: " + deployment.BaseCurrencySymbol + "\r\n"; organizationProperties += "Base Language Code: " + deployment.BaseLanguageCode + "\r\n"; organizationProperties += "Database Name: " + deployment.DatabaseName + "\r\n"; organizationProperties += "Sql Collation: " + deployment.SqlCollation + "\r\n"; organizationProperties += "Sqm Is Enabled: " + deployment.SqmIsEnabled + "\r\n"; organizationProperties += "State: " + deployment.State + "\r\n"; textBoxOrganizationProperties.Text = organizationProperties; // Retrieve license and user information for your organization. TrackLicenseRequest licenseRequest = new TrackLicenseRequest(); TrackLicenseResponse licenseResponse = (TrackLicenseResponse)serviceClient.Execute(licenseRequest); // Print out the number of servers and the user list. string licenseanduserinformation = "Number of servers: "; licenseanduserinformation += licenseResponse.NumberOfServers.HasValue ? licenseResponse.NumberOfServers.Value.ToString() : "null"; licenseanduserinformation += "\r\n"; licenseanduserinformation += "Users:\r\n"; foreach (String user in licenseResponse.UsersList) { licenseanduserinformation += user + "\r\n"; } textBoxLicenceanduserinformation.Text = licenseanduserinformation; // Retrieve server settings for your organization. RetrieveAdvancedSettingsRequest requestServerSettings = new RetrieveAdvancedSettingsRequest { ConfigurationEntityName = "ServerSettings", ColumnSet = new ColumnSet(false) }; ConfigurationEntity configuration = ((RetrieveAdvancedSettingsResponse)serviceClient.Execute(requestServerSettings)).Entity; // Print out all advanced settings where IsWritable==true. foreach (var setting in configuration.Attributes) { if (setting.Key != "Id") { if (setting.Key == "DisableUserInfoClaim") { checkBoxDisableUserInfoClaim.Checked = (bool)setting.Value; } else if (setting.Key == "MaxExpandCount") { numericUpDownMaxExpandCount.Text = setting.Value.ToString(); } else if (setting.Key == "MaxResultsPerCollection") { numericUpDownMaxResultsPerCollection.Text = setting.Value.ToString(); } else if (setting.Key == "NlbEnabled") { checkBoxNlbEnabled.Checked = (bool)setting.Value; } else if (setting.Key == "PostponeAppFabricRequestsInMinutes") { numericUpDownPostponeAppFabricRequestsInMinutes.Text = setting.Value.ToString(); } else if (setting.Key == "PostViaExternalRouter") { checkBoxPostViaExternalRouter.Checked = (bool)setting.Value; } else if (setting.Key == "SslHeader") { textBoxSslHeader.Text = setting.Value.ToString(); } } } toolStripStatusLabel1.Text = connection.OrganizationName + " deployment properties were successfully loaded."; } catch (FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> ex) { //string url = connection.ServerAddress + "main.aspx?pagetype=entityrecord&etn=eaf_contrat_client&id=" + entity.Id.ToString(); LogManager.WriteLog("Error: " + ex.Detail.Message + "\n" + ex.Detail.TraceText); MessageBox.Show("Error: " + ex.Detail.Message + "\n" + ex.Detail.TraceText); } catch (Exception ex) { if (ex.InnerException != null) { LogManager.WriteLog("Error:" + ex.Message); MessageBox.Show("Error:" + ex.Message + "\n" + ex.InnerException.Message); } else { LogManager.WriteLog("Error:" + ex.Message); MessageBox.Show("Error:" + ex.Message); } } }
private void CreateOrganization() { if (string.IsNullOrWhiteSpace(this.DeploymentUrl) || !Uri.IsWellFormedUriString(this.DeploymentUrl, UriKind.Absolute)) { Log.LogError(string.Format(CultureInfo.CurrentCulture, "The Deployment service URL is not valid. {0}", this.DeploymentUrl)); return; } if (string.IsNullOrWhiteSpace(this.Name)) { Log.LogError("Missing required parameter: Name"); return; } if (string.IsNullOrWhiteSpace(this.DisplayName)) { Log.LogError("Missing required parameter: Display Name"); return; } if (string.IsNullOrWhiteSpace(this.SqlServerInstance)) { Log.LogError("Missing required parameter: Sql Server Instance"); return; } if (string.IsNullOrWhiteSpace(this.SsrsUrl) || !Uri.IsWellFormedUriString(this.SsrsUrl, UriKind.Absolute)) { Log.LogError(string.Format(CultureInfo.CurrentCulture, "The Sql Server Reporting Service URL is not valid. {0}", this.SsrsUrl)); return; } Log.LogMessage(MessageImportance.Normal, string.Format(CultureInfo.CurrentCulture, "Connecting to the deployment service {0}.", this.DeploymentUrl)); using (var service = ProxyClientHelper.CreateClient(new Uri(this.DeploymentUrl))) { var newOrganization = new Microsoft.Xrm.Sdk.Deployment.Organization { FriendlyName = this.DisplayName, UniqueName = this.Name, SqlServerName = this.SqlServerInstance, SrsUrl = this.SsrsUrl }; try { var request = new BeginCreateOrganizationRequest { Organization = newOrganization }; var response = service.Execute(request) as BeginCreateOrganizationResponse; if (response == null) { Log.LogError(string.Format(CultureInfo.CurrentCulture, "No response was received while creating Organization {0}", this.Name)); return; } var operationId = new EntityInstanceId { Id = response.OperationId }; int waitCount = 0; var organizationCreationStatus = service.Retrieve(DeploymentEntityType.DeferredOperationStatus, operationId) as DeferredOperationStatus; // Wait for the organization to be created. Checking the stauts repeatedly while (organizationCreationStatus != null && (organizationCreationStatus.State == DeferredOperationState.Processing || organizationCreationStatus.State == DeferredOperationState.Queued)) { Thread.Sleep(WaitIntervalInMilliseconds); Log.LogMessage(MessageImportance.High, "Processing..."); organizationCreationStatus = service.Retrieve(DeploymentEntityType.DeferredOperationStatus, operationId) as DeferredOperationStatus; if (++waitCount > this.Timeout) { break; } } if (waitCount >= this.Timeout) { Log.LogMessage(MessageImportance.High, string.Format(CultureInfo.CurrentCulture, "Your request for creation of Organization {0} is still being processed but the task has exceeded its timeout value of {1} minutes.", this.Name, this.Timeout)); } else { Log.LogMessage(MessageImportance.High, string.Format(CultureInfo.CurrentCulture, "The Organization {0} was created successfully.", this.Name)); } } catch (Exception exception) { Log.LogError(string.Format(CultureInfo.CurrentCulture, "An error occurred while creating Organization {0}. [{1}]", this.Name, exception.Message)); } } }