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

В этом разделе приведен пример кода и рекомендации по чтению из абстрактной схемы, которая предоставляет подмножество данных, хранящихся в объектах attributeSchema и classSchema в контейнере схемы. Чтобы получить данные, недоступные в абстрактной схеме, считывайте данные непосредственно из контейнера схемы, как описано в разделе "Чтение атрибутовSchema" и 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/< object>", чтобы привязать непосредственно к классу или записи атрибута в абстрактной схеме. В этой строке "<object>" — это 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 Указывает, могут ли объекты этого класса содержать другие объекты, которые имеют значение true, если любой класс включает этот класс в список возможных объектовSuperiors.
IADsClass.DerivedFrom Массив классов, производных от этого класса.
IADsClass.MandatoryProperties Извлекает массив обязательных свойств, которые необходимо задать для экземпляра класса. Возвращаемый список включает все значения mustContain и systemMustContain для класса и классов, производных от него, включая суперклассы и вспомогательные классы.
IADsClass.OID Извлекает идентификатор управления класса.
IADsClass.OptionalProperties Извлекает массив необязательных свойств, которые могут быть заданы для экземпляра класса. Возвращенный список включает все значения mayContain и systemMayContain для класса и классов, производных от него, включая суперклассы и вспомогательные классы.
IADsClass.PossibleSuperiors Извлекает массив возможных значенийSuperiors для класса, который указывает на классы объектов, которые могут содержать объекты этого класса.

 

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