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);
        }
Пример #2
0
        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)
            {
            }
        }