コード例 #1
0
        internal ADVirtualListView(IDirectorySession session, ADObjectId rootId, ADObjectId[] addressListIds, SortBy sortBy, int rowsToPrefetch, IEnumerable <PropertyDefinition> properties) : base(session, rootId, QueryScope.SubTree, sortBy)
        {
            if (properties == null)
            {
                throw new ArgumentNullException("properties");
            }
            if (sortBy == null)
            {
                throw new ArgumentNullException("sortBy");
            }
            if (rowsToPrefetch < 1)
            {
                throw new ArgumentOutOfRangeException("rowsToPrefetch");
            }
            this.rowsToPrefetch = rowsToPrefetch;
            QueryFilter[] array;
            if (addressListIds == null)
            {
                array    = new QueryFilter[2];
                array[0] = new ExistsFilter(ADRecipientSchema.AddressListMembership);
            }
            else
            {
                array = new QueryFilter[addressListIds.Length + 1];
                for (int i = 0; i < addressListIds.Length; i++)
                {
                    array[i] = new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.AddressListMembership, addressListIds[i]);
                }
            }
            array[array.Length - 1] = new ExistsFilter(ADRecipientSchema.DisplayName);
            QueryFilter queryFilter  = new AndFilter(array);
            QueryFilter queryFilter2 = (addressListIds == null) ? queryFilter : new ExistsFilter(ADObjectSchema.ObjectClass);

            this.requestedProperties = properties;
            ADScope  readScope = session.GetReadScope(rootId, ADVirtualListView.dummyADRawEntry);
            ADObject adobject;

            string[] ldapAttributes;
            session.GetSchemaAndApplyFilter(ADVirtualListView.dummyADRawEntry, readScope, out adobject, out ldapAttributes, ref queryFilter2, ref properties);
            base.LdapAttributes               = ldapAttributes;
            this.properties                   = properties;
            base.LdapFilter                   = LdapFilterBuilder.LdapFilterFromQueryFilter((addressListIds == null) ? queryFilter2 : queryFilter, false, base.Session.SessionSettings.PartitionSoftLinkMode, base.Session.SessionSettings.IsTenantScoped);
            this.vlvRequestControl            = new VlvRequestControl();
            this.vlvRequestControl.AfterCount = this.rowsToPrefetch;
            base.DirectoryControls.Add(this.vlvRequestControl);
        }