protected override bool ProcessInternal(PropertyBag propertyBag) { ADObjectId tenantOU = ProcessorHelper.GetTenantOU(propertyBag); if (tenantOU != null) { ADRawEntry properties = this.organizationPropertyLookup.GetProperties(tenantOU); if (properties != null) { string value = (string)properties[ExchangeConfigurationUnitSchema.ExternalDirectoryOrganizationId]; if (!string.IsNullOrEmpty(value)) { propertyBag.SetField(SyncObjectSchema.ContextId, value); if (ProcessorHelper.IsObjectOrganizationUnit(propertyBag)) { if (this.ShouldIgnoreOrganizationUnit(propertyBag)) { ExTraceGlobals.BackSyncTracer.TraceDebug((long)SyncConfiguration.TraceId, "<OrganizationFilter.ProcessInternal> tenant has no output attribute. Skip processing."); return(false); } propertyBag.SetField(SyncObjectSchema.ObjectId, value); } propertyBag.SetField(OrganizationSchema.IsDirSyncRunning, properties[OrganizationSchema.IsDirSyncRunning]); propertyBag.SetField(OrganizationSchema.DirSyncStatus, properties[OrganizationSchema.DirSyncStatus]); if (OrganizationFilter.IsExcludedOrg(properties)) { this.reporter.ReportExcludedObject(propertyBag, DirectoryObjectErrorCode.UnspecifiedError, ProcessingStage.OrganizationFilter); return(false); } return(true); } } } this.reporter.ReportExcludedObject(propertyBag, DirectoryObjectErrorCode.ObjectOutOfScope, ProcessingStage.OrganizationFilter); return(false); }
private bool ShouldIgnoreOrganizationUnit(PropertyBag propertyBag) { ExTraceGlobals.BackSyncTracer.TraceDebug((long)SyncConfiguration.TraceId, "<OrganizationFilter.ShouldIgnoreOrganizationUnit> entering"); bool result = true; ADObjectId adobjectId = (ADObjectId)propertyBag[ADObjectSchema.Id]; ExTraceGlobals.BackSyncTracer.TraceDebug <string>((long)SyncConfiguration.TraceId, "<OrganizationFilter.ShouldIgnoreOrganizationUnit> check tenant {0}", adobjectId.ToString()); if (propertyBag.Contains(SyncCompanySchema.DirSyncStatusAck)) { MultiValuedProperty <string> multiValuedProperty = (MultiValuedProperty <string>)propertyBag[SyncCompanySchema.DirSyncStatusAck]; ExTraceGlobals.BackSyncTracer.TraceDebug <int>((long)SyncConfiguration.TraceId, "<OrganizationFilter.ShouldIgnoreOrganizationUnit> DirSyncStatusAck.count = {0}", multiValuedProperty.Count); if (multiValuedProperty.Count > 0) { ExTraceGlobals.BackSyncTracer.TraceDebug((long)SyncConfiguration.TraceId, "<OrganizationFilter.ShouldIgnoreOrganizationUnit> tenant SyncCompanySchema.DirSyncStatusAck is not NULL"); result = false; } } else if (this.relocationEnabled && !ProcessorHelper.IsDeletedObject(propertyBag) && OrganizationFilter.IsRelocationCompletedSignal(propertyBag)) { ExTraceGlobals.BackSyncTracer.TraceDebug((long)SyncConfiguration.TraceId, "<OrganizationFilter.ShouldIgnoreOrganizationUnit> tenant SyncCompanySchema.RelocationInProgress is changed to false"); result = false; } else { ExTraceGlobals.BackSyncTracer.TraceDebug((long)SyncConfiguration.TraceId, "<OrganizationFilter.ShouldIgnoreOrganizationUnit> no BPOS interested attributes found on tenant. Skip tenant"); result = true; } ExTraceGlobals.BackSyncTracer.TraceDebug <string>((long)SyncConfiguration.TraceId, "<OrganizationFilter.ShouldIgnoreOrganizationUnit> leaving ({0})", result.ToString()); return(result); }