コード例 #1
0
        private void BulkQueueOperation(bool isJoin, bool isApprove)
        {
            if (this.DataObject.ArbitrationMailbox == null)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorArbitrationMailboxNotSet(this.Identity.ToString())), ExchangeErrorCategory.Client, this.Identity);
            }
            ADRecipient adrecipient = (ADRecipient)base.GetDataObject <ADRecipient>(new MailboxIdParameter(this.DataObject.ArbitrationMailbox), base.TenantGlobalCatalogSession, null, new LocalizedString?(Strings.ErrorMailboxNotFound(this.DataObject.ArbitrationMailbox.ToString())), new LocalizedString?(Strings.ErrorMailboxNotUnique(this.DataObject.ArbitrationMailbox.ToString())), ExchangeErrorCategory.Client);

            if (adrecipient.RecipientTypeDetails != RecipientTypeDetails.ArbitrationMailbox)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorInvalidArbitrationMbxType(adrecipient.Identity.ToString())), ExchangeErrorCategory.Client, this.DataObject.Identity);
            }
            if (!adrecipient.IsValid)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorInvalidArbitrationMailbox(adrecipient.Identity.ToString())), ExchangeErrorCategory.Client, this.DataObject.Identity);
            }
            ADObjectId identity;

            if (!base.TryGetExecutingUserId(out identity))
            {
                this.WriteWarning(Strings.WarningBulkOperationCannotDetermineRequester);
                return;
            }
            ADRecipient adrecipient2 = (ADRecipient)base.TenantGlobalCatalogSession.Read <ADRecipient>(identity);
            string      text;

            if (isJoin)
            {
                text = AutoGroupApplication.BuildApprovalData("Add-DistributionGroupMember", this.DataObject.Id);
            }
            else
            {
                text = AutoGroupApplication.BuildApprovalData("Remove-DistributionGroupMember", this.DataObject.Id);
            }
            QueryFilter additionalFilter = new AndFilter(new QueryFilter[]
            {
                new ComparisonFilter(ComparisonOperator.Equal, MessageItemSchema.ApprovalApplicationId, 0),
                new TextFilter(MessageItemSchema.ApprovalApplicationData, text, MatchOptions.FullString, MatchFlags.IgnoreCase)
            });

            StoreObjectId[] array = ApprovalProcessor.QueryRequests(adrecipient.PrimarySmtpAddress, SmtpAddress.Empty, SmtpAddress.Empty, SmtpAddress.Empty, new ApprovalStatus?(ApprovalStatus.Unhandled), additionalFilter, null);
            if (array == null || array.Length == 0)
            {
                return;
            }
            foreach (StoreObjectId itemId in array)
            {
                if (isApprove)
                {
                    ApprovalProcessor.ApproveRequest(adrecipient.PrimarySmtpAddress, itemId, adrecipient2.PrimarySmtpAddress, null);
                }
                else
                {
                    ApprovalProcessor.RejectRequest(adrecipient.PrimarySmtpAddress, itemId, adrecipient2.PrimarySmtpAddress, null);
                }
            }
        }
コード例 #2
0
        protected string SubmitApprovalRequest(string command)
        {
            if (this.DataObject.ArbitrationMailbox == null)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorArbitrationMailboxNotSet(this.Identity.ToString())), ErrorCategory.InvalidArgument, this.Identity);
            }
            ADRecipient adrecipient = (ADRecipient)base.GetDataObject <ADRecipient>(new MailboxIdParameter(this.DataObject.ArbitrationMailbox), base.TenantGlobalCatalogSession, null, new LocalizedString?(Strings.ErrorMailboxNotFound(this.DataObject.ArbitrationMailbox.ToString())), new LocalizedString?(Strings.ErrorMailboxNotUnique(this.DataObject.ArbitrationMailbox.ToString())));

            if (adrecipient.RecipientTypeDetails != RecipientTypeDetails.ArbitrationMailbox)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorInvalidArbitrationMbxType(adrecipient.Identity.ToString())), ErrorCategory.InvalidData, this.DataObject.Identity);
            }
            if (!adrecipient.IsValid)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorInvalidArbitrationMailbox(adrecipient.Identity.ToString())), ErrorCategory.InvalidData, this.DataObject.Identity);
            }
            QueryFilter filter = new AndFilter(new QueryFilter[]
            {
                new ComparisonFilter(ComparisonOperator.Equal, ApprovalApplicationSchema.ArbitrationMailboxesBacklink, adrecipient.Id),
                new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.Name, "AutoGroup")
            });

            ApprovalApplication[] array = this.ConfigurationSession.Find <ApprovalApplication>(null, QueryScope.SubTree, filter, null, 1);
            if (array == null || array.Length == 0)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorNoAutoGroupApprovalApplicationInOrg(adrecipient.OrganizationId.ToString())), ErrorCategory.InvalidData, null);
            }
            Guid policyTag       = Guid.Empty;
            int? retentionPeriod = null;
            RetentionPolicyTag retentionPolicyTag = null;

            if (array[0].ELCRetentionPolicyTag != null)
            {
                this.ConfigurationSession.SessionSettings.IsSharedConfigChecked = true;
                retentionPolicyTag = this.ConfigurationSession.Read <RetentionPolicyTag>(array[0].ELCRetentionPolicyTag);
            }
            else
            {
                IConfigurationSession configurationSession = SharedConfiguration.CreateScopedToSharedConfigADSession(adrecipient.OrganizationId);
                if (configurationSession != null)
                {
                    IList <RetentionPolicyTag> defaultRetentionPolicyTag = ApprovalUtils.GetDefaultRetentionPolicyTag(configurationSession, ApprovalApplicationId.AutoGroup, 1);
                    if (defaultRetentionPolicyTag != null && defaultRetentionPolicyTag.Count > 0)
                    {
                        retentionPolicyTag = defaultRetentionPolicyTag[0];
                    }
                }
            }
            if (retentionPolicyTag == null)
            {
                this.WriteWarning(Strings.WarningRetentionPolicyTagNotFoundForApproval(array[0].Name, adrecipient.OrganizationId.ToString()));
            }
            else
            {
                policyTag = retentionPolicyTag.RetentionId;
                EnhancedTimeSpan?timeSpanForRetention = retentionPolicyTag.TimeSpanForRetention;
                retentionPeriod = ((timeSpanForRetention != null) ? new int?((int)timeSpanForRetention.Value.TotalDays) : null);
            }
            Result <ADRawEntry>[] array2 = base.TenantGlobalCatalogSession.ReadMultiple(this.DataObject.ManagedBy.ToArray(), new PropertyDefinition[]
            {
                ADObjectSchema.Id,
                ADRecipientSchema.PrimarySmtpAddress,
                ADUserSchema.Languages,
                ADRecipientSchema.RecipientTypeDetails
            });
            ADRawEntry[] array3 = new ADRawEntry[array2.Length];
            for (int i = 0; i < array3.Length; i++)
            {
                array3[i] = array2[i].Data;
            }
            SmtpAddress[] array4 = (from approver in array3
                                    where (RecipientTypeDetails)approver[ADRecipientSchema.RecipientTypeDetails] != RecipientTypeDetails.MailUniversalSecurityGroup && (RecipientTypeDetails)approver[ADRecipientSchema.RecipientTypeDetails] != RecipientTypeDetails.UniversalSecurityGroup
                                    select(SmtpAddress) approver[ADRecipientSchema.PrimarySmtpAddress]).ToArray <SmtpAddress>();
            if (array4.Length == 0)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorApproversNotSet(this.Identity.ToString())), ErrorCategory.InvalidArgument, this.Identity);
            }
            base.WriteVerbose(Strings.VerboseStartToSubmitApprovalRequest(this.DataObject.DisplayName, string.Join <SmtpAddress>(", ", array4)));
            CultureInfo moderatorCommonCulture = this.SelectApproverCommonCulture(array3);
            string      text = ApprovalProcessor.SubmitRequest(0, adrecipient.PrimarySmtpAddress, this.requester.PrimarySmtpAddress, array4, moderatorCommonCulture, policyTag, retentionPeriod, this.ApprovalMessageSubject(), AutoGroupApplication.BuildApprovalData(command, this.DataObject.Id));

            base.WriteVerbose(Strings.VerboseApprovalRequestSubmitted(this.DataObject.DisplayName, text));
            return(text);
        }