internal static bool CanProceedWithOrganizationTask(OrganizationIdParameter orgIdParam, IConfigurationSession session, OrganizationStatus[] ignorableFlagsOnStatusTimeout, Task.TaskErrorLoggingDelegate errorLogger) { bool result = false; ExchangeConfigurationUnit exchangeConfigUnitFromOrganizationId = OrganizationTaskHelper.GetExchangeConfigUnitFromOrganizationId(orgIdParam, session, errorLogger, true); if (ExchangeConfigurationUnit.IsOrganizationActive(exchangeConfigUnitFromOrganizationId.OrganizationStatus)) { result = true; } else { DateTime?whenOrganizationStatusSet = exchangeConfigUnitFromOrganizationId.WhenOrganizationStatusSet; if (whenOrganizationStatusSet != null) { DateTime value = whenOrganizationStatusSet.Value.ToUniversalTime(); if (DateTime.UtcNow.Subtract(value) > OrganizationTaskHelper.organizationStatusTimeout && ignorableFlagsOnStatusTimeout != null) { foreach (OrganizationStatus organizationStatus in ignorableFlagsOnStatusTimeout) { if (organizationStatus == exchangeConfigUnitFromOrganizationId.OrganizationStatus) { result = true; break; } } } } } return(result); }
private void CleanupOrganization(PartitionId partitionId) { ITenantConfigurationSession tenantConfigurationSession = this.WritableAllTenantsSessionForPartition(partitionId); ADObjectId childId = tenantConfigurationSession.GetHostedOrganizationsRoot().GetChildId("OU", this.Name); ADOrganizationalUnit adorganizationalUnit = this.ReadADOrganizationalUnit(tenantConfigurationSession, childId); Container objectToDelete = null; if (adorganizationalUnit != null && adorganizationalUnit.ConfigurationUnit != null) { tenantConfigurationSession.UseConfigNC = true; ExchangeConfigurationUnit exchangeConfigurationUnit = tenantConfigurationSession.Read <ExchangeConfigurationUnit>(adorganizationalUnit.ConfigurationUnit); if (exchangeConfigurationUnit != null) { if (ExchangeConfigurationUnit.IsOrganizationActive(exchangeConfigurationUnit.OrganizationStatus)) { base.WriteError(new OrganizationExistsException(Strings.ErrorDuplicateActiveOrganizationExists(this.Name)), ErrorCategory.InvalidArgument, null); } try { exchangeConfigurationUnit.ExternalDirectoryOrganizationId = string.Empty; tenantConfigurationSession.Save(exchangeConfigurationUnit); } catch (Exception) { } objectToDelete = this.ReadContainer(tenantConfigurationSession, adorganizationalUnit.ConfigurationUnit.Parent); } } try { this.DeleteTree(tenantConfigurationSession, adorganizationalUnit, false); } catch (Exception) { } try { this.DeleteTree(tenantConfigurationSession, objectToDelete, true); } catch (Exception) { } }