Поделиться через


Чтение абстрактной схемы

В этом разделе приведен пример кода и рекомендации по чтению из абстрактной схемы, которая предоставляет подмножество данных, хранящихся в атрибутеSchema и объектах classSchema в контейнере схемы. Чтобы получить данные, недоступные в абстрактной схеме, считывайте данные непосредственно из контейнера схемы, как описано в разделе Read attributeSchema и classSchema Objects.

Используйте строку привязки "LDAP://schema", чтобы привязаться к IADsContainer указателю на абстрактную схему. Используйте этот указатель для перечисления записей класса, атрибута и синтаксиса в абстрактной схеме. Для получения отдельных записей можно также использовать метод IADsContainer.GetObject.

// Bind to the abstract schema.
IADsContainer *pAbsSchema = NULL;
hr = ADsGetObject(L"LDAP://schema",
                  IID_IADsContainer,
                  (void**)&pAbsSchema);
' Bind to the abstract schema.
Dim adschema As IADsContainer
Set adschema = GetObject("LDAP://schema")

Используйте аналогичную строку привязки "LDAP://schema/<объект>", чтобы привязать непосредственно к классу или записи атрибута в абстрактной схеме. В этой строке "<объект>" — это lDAPDisplayName класса или атрибута. Для классов привяжите к интерфейсу IADsClass; для атрибутов привяжите к интерфейсу IADsProperty.

// Bind to the user class entry in the abstract schema.
IADsClass *pClass;
hr = ADsGetObject(L"LDAP://schema/user",
                  IID_IADsClass,
                  (void**)&pClass);
Bind to the user class entry in the abstract schema.
Dim userclass As IADsClass
Set userclass = GetObject("LDAP://schema/user")

Кроме того, интерфейс IADs предоставляет свойство IADs.Schema. Это свойство возвращает ADsPath для класса объектов в формате строки привязки абстрактной схемы. Если у вас есть указатель IADs на объект, можно привязать к его классу в абстрактной схеме с помощью ADsPath, возвращенного из IADs.Schema.

Для классов в следующей таблице перечислены ключевые свойства, предоставляемые абстрактной схемой.

Свойство Значение
IADsClass.Abstract Указывает, является ли это абстрактным классом.
IADsClass.Вспомогательный Указывает, является ли это вспомогательным классом.
IADsClass.AuxDerivedFrom Массив вспомогательных классов, производных от этого класса.
IADsClass.Container Указывает, могут ли объекты этого класса содержать другие объекты. Это верно, если какой-либо класс включает этот класс в свой список возможныхстарших классов.
IADsClass.DerivedFrom Массив классов, производных от этого класса.
IADsClass.MandatoryProperties Извлекает массив обязательных свойств, которые необходимо задать для экземпляра класса. Возвращенный список включает все значения mustContain и systemMustContain для класса и классов, от которых он наследуется, включая суперклассы и вспомогательные классы.
IADsClass.OID Извлекает governsID класса.
IADsClass.OptionalProperties Извлекает массив необязательных свойств, которые могут быть заданы для экземпляра класса. Возвращенный список включает все значения могут и systemMayContain для класса и классов, производных от него, включая суперклассы и вспомогательные классы.
IADsClass.PossibleSuperiors Извлекает массив значений possibleSuperiors для класса, указывающих на классы объектов, которые могут содержать объекты этого класса.

 

Абстрактная схема хранится в объекте subSchema в контейнере схемы. Чтобы получить различающееся имя объекта subSchema, привязаться к rootDSE и прочитать атрибут subSchemaSubEntry, как описано в бессерверной привязке и rootDSE. Помните, что более эффективно читать абстрактную схему путем привязки к "LDAP://schema", чем путем привязки непосредственно к объекту subSchema.