Чтение абстрактной схемы
В этом разделе приведен пример кода и рекомендации по чтению из абстрактной схемы, которая предоставляет подмножество данных, хранящихся в объектах 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 .