コード例 #1
0
        private IConfigurationSession CreateConfigurationSession(MailboxSession mailboxSession)
        {
            OrganizationId        organizationId = mailboxSession.MailboxOwner.MailboxInfo.OrganizationId;
            IConfigurationSession configurationSession;

            if (SharedConfiguration.IsDehydratedConfiguration(organizationId))
            {
                configurationSession = SharedConfiguration.CreateScopedToSharedConfigADSession(organizationId);
                configurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(true, ConsistencyMode.IgnoreInvalid, configurationSession.SessionSettings, 742, "CreateConfigurationSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\MailboxFolder\\GetMailboxFolderStatistics.cs");
            }
            else
            {
                ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(base.RootOrgContainerId, organizationId, base.ExecutingUserOrganizationId, false);
                configurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(base.DomainController, true, ConsistencyMode.PartiallyConsistent, sessionSettings, 755, "CreateConfigurationSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\MailboxFolder\\GetMailboxFolderStatistics.cs");
            }
            return(configurationSession);
        }
コード例 #2
0
ファイル: RBACHelper.cs プロジェクト: YHZX2013/exchange_diff
        public static ADObjectId GetDefaultRoleAssignmentPolicy(OrganizationId orgId)
        {
            if (orgId.Equals(OrganizationId.ForestWideOrgId))
            {
                return(null);
            }
            IConfigurationSession scopedSession = SharedConfiguration.CreateScopedToSharedConfigADSession(orgId);

            return(ProvisioningCache.Instance.TryAddAndGetOrganizationData <ADObjectId>(CannedProvisioningCacheKeys.MailboxRoleAssignmentPolicyCacheKey, orgId, delegate()
            {
                RoleAssignmentPolicy[] array = scopedSession.Find <RoleAssignmentPolicy>(null, QueryScope.SubTree, new ComparisonFilter(ComparisonOperator.Equal, RoleAssignmentPolicySchema.IsDefault, true), null, 1);
                if (array != null && array.Length > 0)
                {
                    return array[0].Id;
                }
                return null;
            }));
        }
コード例 #3
0
        protected override IConfigDataProvider CreateSession()
        {
            if (SharedConfiguration.IsDehydratedConfiguration(base.CurrentOrganizationId))
            {
                return(SharedConfiguration.CreateScopedToSharedConfigADSession(base.CurrentOrganizationId));
            }
            IConfigurationSession result;

            if (!MobileDeviceTaskHelper.IsRunningUnderMyOptionsRole(this, base.TenantGlobalCatalogSession, base.SessionSettings))
            {
                result = (IConfigurationSession)base.CreateSession();
            }
            else
            {
                ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(base.RootOrgContainerId, base.CurrentOrganizationId, base.ExecutingUserOrganizationId, true);
                result = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(base.DomainController, false, ConsistencyMode.PartiallyConsistent, sessionSettings, 597, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Elc\\SetRetentionPolicyTag.cs");
            }
            return(result);
        }
コード例 #4
0
        protected override IConfigDataProvider CreateSession()
        {
            IConfigurationSession configurationSession;

            if (!this.IgnoreDehydratedFlag && SharedConfiguration.IsDehydratedConfiguration(base.CurrentOrganizationId))
            {
                configurationSession = SharedConfiguration.CreateScopedToSharedConfigADSession(base.CurrentOrganizationId);
                return(DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(false, ConsistencyMode.IgnoreInvalid, configurationSession.SessionSettings, 527, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\MailboxPolicies\\RetentionPolicyTasks.cs"));
            }
            if (!MobileDeviceTaskHelper.IsRunningUnderMyOptionsRole(this, base.TenantGlobalCatalogSession, base.SessionSettings))
            {
                configurationSession = (IConfigurationSession)base.CreateSession();
            }
            else
            {
                ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(base.RootOrgContainerId, base.CurrentOrganizationId, base.ExecutingUserOrganizationId, true);
                configurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(base.DomainController, false, ConsistencyMode.PartiallyConsistent, sessionSettings, 546, "CreateSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\MailboxPolicies\\RetentionPolicyTasks.cs");
            }
            return(configurationSession);
        }
コード例 #5
0
        protected virtual IConfigurationSession CreateSession(bool throwExceptions)
        {
            TConfig tconfig = Activator.CreateInstance <TConfig>();

            if (tconfig.IsShareable)
            {
                IConfigurationSession sharedConfigSession = null;
                this.TryRunADOperation(delegate
                {
                    sharedConfigSession = SharedConfiguration.CreateScopedToSharedConfigADSession(this.organizationId);
                }, throwExceptions);
                return(sharedConfigSession);
            }
            IConfigurationSession session = null;

            this.TryRunADOperation(delegate
            {
                session = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(this.organizationId), 214, "CreateSession", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\SystemConfiguration\\ConfigurationCache\\TenantConfigurationCacheableItem.cs");
            }, throwExceptions);
            return(session);
        }
コード例 #6
0
ファイル: AdTagReader.cs プロジェクト: YHZX2013/exchange_diff
        internal static void LoadTagsInOrg(OrganizationId orgId, Dictionary <Guid, AdTagData> allTags)
        {
            IConfigurationSession configurationSession;

            if (SharedConfiguration.IsDehydratedConfiguration(orgId))
            {
                configurationSession = SharedConfiguration.CreateScopedToSharedConfigADSession(orgId);
            }
            else
            {
                ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(orgId);
                configurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(false, ConsistencyMode.PartiallyConsistent, sessionSettings, 375, "LoadTagsInOrg", "f:\\15.00.1497\\sources\\dev\\infoworker\\src\\common\\ELC\\AdTagReader.cs");
            }
            ADPagedReader <RetentionPolicyTag> allAdTags = configurationSession.FindPaged <RetentionPolicyTag>(null, QueryScope.SubTree, null, null, 0);

            AdReader.Tracer.TraceDebug(0L, "Found Policy Tags in the AD.");
            List <RetentionPolicyTag> theGoodTags = AdTagReader.GetTheGoodTags(allAdTags);

            foreach (RetentionPolicyTag retentionPolicyTag in theGoodTags)
            {
                AdTagData value = AdTagReader.FetchTagContentSettings(retentionPolicyTag);
                allTags[retentionPolicyTag.RetentionId] = value;
            }
        }
コード例 #7
0
        private void StampModeratedTransportExpiry()
        {
            byte[]            policyTag         = null;
            string            text              = string.Empty;
            int               retentionPeriod   = 2;
            ADOperationResult adoperationResult = ADNotificationAdapter.TryRunADOperation(delegate()
            {
                IConfigurationSession tenantOrTopologyConfigurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(ConsistencyMode.PartiallyConsistent, ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(this.mbxTransportMailItem.OrganizationId), 361, "StampModeratedTransportExpiry", "f:\\15.00.1497\\sources\\dev\\MailboxTransport\\src\\MailboxTransportDelivery\\StoreDriver\\agents\\approval\\ApprovalEngine.cs");
                ADObjectId descendantId = tenantOrTopologyConfigurationSession.GetOrgContainerId().GetDescendantId(ApprovalApplication.ParentPathInternal);
                ADObjectId childId      = descendantId.GetChildId("ModeratedRecipients");
                ApprovalEngine.diag.TraceDebug <ADObjectId>((long)this.GetHashCode(), "Reading ModeratedRecipient app from {0}", childId);
                if (childId != null)
                {
                    ApprovalApplication approvalApplication = tenantOrTopologyConfigurationSession.Read <ApprovalApplication>(childId);
                    if (approvalApplication != null)
                    {
                        ADObjectId elcretentionPolicyTag = approvalApplication.ELCRetentionPolicyTag;
                        ApprovalEngine.diag.TraceDebug <ADObjectId>((long)this.GetHashCode(), "Read ModeratedRecipient, now reading Recipient Policy Tag {0}", elcretentionPolicyTag);
                        RetentionPolicyTag retentionPolicyTag = null;
                        if (elcretentionPolicyTag != null)
                        {
                            retentionPolicyTag = tenantOrTopologyConfigurationSession.Read <RetentionPolicyTag>(elcretentionPolicyTag);
                        }
                        else
                        {
                            IConfigurationSession configurationSession = SharedConfiguration.CreateScopedToSharedConfigADSession(this.mbxTransportMailItem.OrganizationId);
                            if (configurationSession != null)
                            {
                                IList <RetentionPolicyTag> defaultRetentionPolicyTag = ApprovalUtils.GetDefaultRetentionPolicyTag(configurationSession, ApprovalApplicationId.ModeratedRecipient, 1);
                                if (defaultRetentionPolicyTag != null && defaultRetentionPolicyTag.Count > 0)
                                {
                                    retentionPolicyTag = defaultRetentionPolicyTag[0];
                                }
                            }
                        }
                        if (retentionPolicyTag != null)
                        {
                            ADPagedReader <ElcContentSettings> elccontentSettings = retentionPolicyTag.GetELCContentSettings();
                            using (IEnumerator <ElcContentSettings> enumerator = elccontentSettings.GetEnumerator())
                            {
                                if (enumerator.MoveNext())
                                {
                                    ElcContentSettings elcContentSettings = enumerator.Current;
                                    retentionPeriod = (int)elcContentSettings.AgeLimitForRetention.Value.TotalDays;
                                }
                            }
                            policyTag = retentionPolicyTag.RetentionId.ToByteArray();
                        }
                    }
                }
            });

            if (!adoperationResult.Succeeded)
            {
                if (adoperationResult.Exception is TransientException)
                {
                    throw adoperationResult.Exception;
                }
                text = adoperationResult.Exception.ToString();
                ApprovalEngine.diag.TraceError <string>((long)this.GetHashCode(), "Can't get PolicyTag guid {0}, NDRing.", text);
            }
            if (policyTag == null)
            {
                ApprovalEngine.diag.TraceError((long)this.GetHashCode(), "PolicyTag not read. NDRing");
                string text2 = this.mbxTransportMailItem.OrganizationId.ToString();
                StoreDriverDeliveryDiagnostics.LogEvent(MailboxTransportEventLogConstants.Tuple_ApprovalCannotStampExpiry, text2, new object[]
                {
                    text2,
                    text
                });
                throw new SmtpResponseException(AckReason.ApprovalCannotReadExpiryPolicy);
            }
            if (retentionPeriod < 2)
            {
                retentionPeriod = 2;
            }
            else if (retentionPeriod > 30)
            {
                retentionPeriod = 30;
            }
            this.messageItem[ItemSchema.RetentionDate]          = ExDateTime.UtcNow.AddDays((double)retentionPeriod);
            this.messageItem[StoreObjectSchema.RetentionPeriod] = retentionPeriod;
            this.messageItem[StoreObjectSchema.PolicyTag]       = policyTag;
        }
コード例 #8
0
ファイル: AdTagReader.cs プロジェクト: YHZX2013/exchange_diff
        internal static Dictionary <Guid, AdTagData> GetTagsInPolicy(MailboxSession session, ADUser aduser, Dictionary <Guid, AdTagData> allAdTags)
        {
            if (allAdTags == null || allAdTags.Count == 0 || aduser == null)
            {
                return(null);
            }
            string     arg        = session.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString();
            ADObjectId adobjectId = aduser.RetentionPolicy;

            if (adobjectId == null && aduser.ShouldUseDefaultRetentionPolicy && aduser.OrganizationId != null && !OrganizationId.ForestWideOrgId.Equals(aduser.OrganizationId))
            {
                IConfigurationSession scopedSession;
                if (SharedConfiguration.IsDehydratedConfiguration(aduser.OrganizationId))
                {
                    scopedSession = SharedConfiguration.CreateScopedToSharedConfigADSession(aduser.OrganizationId);
                }
                else
                {
                    scopedSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(false, ConsistencyMode.FullyConsistent, ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(aduser.OrganizationId), 149, "GetTagsInPolicy", "f:\\15.00.1497\\sources\\dev\\infoworker\\src\\common\\ELC\\AdTagReader.cs");
                }
                IList <RetentionPolicy> defaultRetentionPolicy = SharedConfiguration.GetDefaultRetentionPolicy(scopedSession, aduser, null, 1);
                if (defaultRetentionPolicy != null && defaultRetentionPolicy.Count > 0)
                {
                    adobjectId = defaultRetentionPolicy[0].Id;
                }
            }
            if (adobjectId == null)
            {
                AdReader.Tracer.TraceDebug <string>(0L, "Mailbox '{0}' does not have an ELC Mailbox policy.", arg);
                return(null);
            }
            IConfigurationSession tenantOrTopologyConfigurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(false, ConsistencyMode.FullyConsistent, ADSessionSettings.FromAllTenantsOrRootOrgAutoDetect(adobjectId), 175, "GetTagsInPolicy", "f:\\15.00.1497\\sources\\dev\\infoworker\\src\\common\\ELC\\AdTagReader.cs");
            RetentionPolicy       retentionPolicy = tenantOrTopologyConfigurationSession.Read <RetentionPolicy>(adobjectId);

            if (retentionPolicy == null)
            {
                AdReader.Tracer.TraceDebug <string, ADObjectId>(0L, "Mailbox '{0}' no matching ELC Mailbox policy for Template '{1}'.", arg, adobjectId);
                return(null);
            }
            MultiValuedProperty <ADObjectId> retentionPolicyTagLinks = retentionPolicy.RetentionPolicyTagLinks;
            Dictionary <Guid, AdTagData>     dictionary = new Dictionary <Guid, AdTagData>();
            List <AdTagData> list  = new List <AdTagData>();
            List <AdTagData> list2 = new List <AdTagData>();
            int num = 0;
            Dictionary <Guid, AdTagData> dictionary2 = new Dictionary <Guid, AdTagData>();

            foreach (Guid key in allAdTags.Keys)
            {
                AdTagData adTagData = allAdTags[key];
                dictionary2[adTagData.Tag.Guid] = adTagData;
            }
            foreach (ADObjectId adobjectId2 in retentionPolicyTagLinks)
            {
                if (!dictionary2.ContainsKey(adobjectId2.ObjectGuid))
                {
                    AdReader.Tracer.TraceDebug <string, string>(0L, "Mailbox '{0}' has link '{1}' in policy to a tag that could not be found in the AD. Skipping user.", arg, adobjectId2.DistinguishedName);
                    throw new IWTransientException(Strings.descTagNotInAD(adobjectId2.DistinguishedName));
                }
                AdTagData adTagData2 = dictionary2[adobjectId2.ObjectGuid];
                if (adTagData2.Tag.Type == ElcFolderType.All)
                {
                    if (ElcMailboxHelper.IsArchiveTag(adTagData2, false))
                    {
                        AdReader.Tracer.TraceDebug <string, string>(0L, "Mailbox '{0}'. Tag {1} is a default archive tag.", arg, adTagData2.Tag.Name);
                        list2.Add(adTagData2);
                    }
                    else if (adTagData2.Tag.IsPrimary)
                    {
                        AdReader.Tracer.TraceDebug <string, string>(0L, "Mailbox '{0}'. Tag {1} is the primary default retention tag.", arg, adTagData2.Tag.Name);
                        list.Insert(0, adTagData2);
                        num++;
                    }
                    else
                    {
                        AdReader.Tracer.TraceDebug <string, string>(0L, "Mailbox '{0}'. Tag {1} is a default retention tag.", arg, adTagData2.Tag.Name);
                        list.Add(adTagData2);
                    }
                }
                else
                {
                    dictionary[adobjectId2.ObjectGuid] = dictionary2[adobjectId2.ObjectGuid];
                }
            }
            if (list2.Count > 0)
            {
                AdReader.Tracer.TraceDebug <string, string, int>(0L, "Mailbox '{0}' with policy '{1}' has {2} default MTA tags.", arg, retentionPolicy.Id.DistinguishedName, list2.Count);
                list2.Sort(delegate(AdTagData x, AdTagData y)
                {
                    if (x.ContentSettings.Count != 1)
                    {
                        return(1);
                    }
                    if (y.ContentSettings.Count != 1)
                    {
                        return(-1);
                    }
                    return(x.ContentSettings.Single <KeyValuePair <Guid, ContentSetting> >().Value.MessageClass.Length - y.ContentSettings.Single <KeyValuePair <Guid, ContentSetting> >().Value.MessageClass.Length);
                });
                AdTagData firstArchiveTag = new AdTagData();
                firstArchiveTag.Tag             = list2[0].Tag;
                firstArchiveTag.ContentSettings = new SortedDictionary <Guid, ContentSetting>();
                list2.SelectMany((AdTagData x) => x.ContentSettings.Values).ForEach(delegate(ContentSetting x)
                {
                    firstArchiveTag.ContentSettings[x.Guid] = x;
                });
                dictionary[firstArchiveTag.Tag.Guid] = firstArchiveTag;
            }
            if (list.Count > 0)
            {
                if (num > 1)
                {
                    AdReader.Tracer.TraceDebug <string, string>(0L, "Mailbox '{0}' has policy '{1}' with corrupted default tags (Primary default should be 1). Skipping user.", arg, retentionPolicy.Id.DistinguishedName);
                    throw new IWPermanentException(Strings.descPrimaryDefaultCorrupted(retentionPolicy.Id.DistinguishedName, num));
                }
                if (num == 0 && list.Count > 1)
                {
                    list.Sort(delegate(AdTagData x, AdTagData y)
                    {
                        if (x.ContentSettings.Count != 1)
                        {
                            return(1);
                        }
                        if (y.ContentSettings.Count != 1)
                        {
                            return(-1);
                        }
                        return(x.ContentSettings.Single <KeyValuePair <Guid, ContentSetting> >().Value.MessageClass.Length - y.ContentSettings.Single <KeyValuePair <Guid, ContentSetting> >().Value.MessageClass.Length);
                    });
                }
                for (int i = 0; i < list.Count; i++)
                {
                    Guid guid = list[i].Tag.Guid;
                    dictionary[guid] = list[i];
                }
            }
            return(dictionary);
        }
コード例 #9
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);
        }