/// <summary> /// Disables an Organization in CRM. /// </summary> /// <param name="client">The <see cref="DeploymentServiceClient"/> that we are using to call CRM.</param> /// <param name="organization">The name of the Organization we want to disable.</param> /// <param name="eventStream">The Rx event stream used to push build events onto.</param> public static async Task DisableOrganizationAsync(this DeploymentServiceClient client, string organization, IObserver <BuildEvent> eventStream) { EntityInstanceId org = null; await Task.Factory.StartNew(() => org = client.RetrieveAll(DeploymentEntityType.Organization) .FirstOrDefault(item => item.Name == organization)); if (org == null) { throw new ArgumentException($"{organization} Organisation not found", nameof(organization)); } var orgToRemove = (Organization)client.Retrieve(DeploymentEntityType.Organization, new EntityInstanceId { Id = org.Id }); orgToRemove.State = OrganizationState.Disabled; await Task.Factory.StartNew(() => client.Update(orgToRemove)); }
/// <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> /// Deletes an Organization in CRM. /// </summary> /// <param name="client">The <see cref="DeploymentServiceClient"/> that we are using to call CRM.</param> /// <param name="organization">The name of the Organization we want to delete.</param> /// <param name="eventStream">The Rx event stream used to push build events onto.</param> public static async Task DeleteOrganizationAsync(this DeploymentServiceClient client, string organization, IObserver <BuildEvent> eventStream) { EntityInstanceId org = null; await Task.Factory.StartNew(() => org = client.RetrieveAll(DeploymentEntityType.Organization) .FirstOrDefault(item => item.Name == organization)); if (org == null) { throw new ArgumentException($"{organization} Organisation not found", nameof(organization)); } var orgToDisable = (Organization)client.Retrieve(DeploymentEntityType.Organization, new EntityInstanceId { Id = org.Id }); if (orgToDisable.State != OrganizationState.Disabled) { throw new InvalidOperationException($"The Organization needs to be in the Disabled state to be deleted and currently is in the {orgToDisable.State} state"); } await Task.Factory.StartNew(() => client.Delete(DeploymentEntityType.Organization, new EntityInstanceId { Id = orgToDisable.Id })); }
/// <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; } }
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 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); } } }