Работа с записями и запросами

Запросы и управление записями являются основной частью использования, Открывают Directory. В этой главе рассматривается основных примеров того, как взаимодействовать с записями и запросами.

Поиск записей

Пример кода в Перечислении 3-1 демонстрирует, как искать записи в узле с запросом. Во-первых, пример кода создает объект ODQuery, передавая его следующие параметры:

Код тогда устанавливает объект делегата запроса в свое содержание объекта допускать асинхронные запросы. Делегат должен реализовать query:foundResults:error: метод протокола ODQueryDelegate. Запрос наконец планируется в цикле выполнения. Поскольку результаты ODRecord возвращаются асинхронно запросом, метод делегата вызывают, и приложение может обработать результаты.

Перечисление 3-1  , Ищущее записи в узле

- (void) search:(NSString *)searchValue
{
    ODQuery *myQuery = [ODQuery  queryWithNode: myNode
                                forRecordTypes: kODRecordTypeUsers
                                     attribute: kODAttributeTypeRecordName
                                     matchType: kODMatchContains
                                   queryValues: searchValue
                              returnAttributes: kODAttributeTypeStandardOnly
                                maximumResults: 0
                                         error: &err];
    [myQuery retain];
    [myQuery setDelegate: self];
    [myQuery scheduleInRunLoop: [NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
 
- (void)query:(ODQuery *)inSearch foundResults:(NSArray *)inResults error:(NSError *) inError
{
    // Process the results of the query
}

Также возможно выполнить запрос синхронно с resultsAllowingPartial:error: метод. Это не рекомендуется, поскольку неожиданно большие наборы результатов могут заставить Ваше приложение блокировать в течение длительного времени.

Получение информации об атрибуте записи

После получения ODRecord объект через запрос, доступ к его атрибутам является прямым. Перечисление 3-2 показывает реализацию метода делегата в Перечислении 3-1, получающем телефонные номера всех возвращенных пользовательских записей. В этом примере, если пользовательская запись имеет больше чем один телефонный номер, только получен первый телефонный номер. Если inResults и inError - оба nil, запрос возвратил все результаты, и он должен быть удален из цикла выполнения и выпущен.

Перечисление 3-2  , Получающее информацию об атрибуте записи

- (void)query:(ODQuery *)inSearch foundResults:(NSArray *)inResults error:(NSError *)inError
{
 
    if (!inResults && !inError) }
        [inSearch removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [inSearch release]
    }
 
    NSMutableArray *phoneNumbers = [NSMutableArray arrayWithCapacity:[inResults count]];
    ODRecord *record;
    for (record in inResults) {
        NSError *err;
        NSArray *recordPhoneNumber = [record valuesForAttribute:kODAttributeTypePhoneNumber error:&err];
 
        if ([recordPhoneNumber count]) {
            [phoneNumbers addObject:[recordPhoneNumber objectAtIndex:0]];
        }
    }
 
    // Process phone number data
 
}
 

Создание записи и добавление атрибута

Пример кода в Перечислении 3-3 демонстрирует, как создать запись с узлом, содержащим его. Параметр атрибутов createRecordWithRecordType:name:attributes:error: метод является объектом NSDictionary типов атрибута с их соответствующими значениями. Дополнительные атрибуты могут впоследствии быть добавлены к записи. Для фиксации изменений, внесенных в запись, synchronizeAndReturnError: должен быть вызван на записи после того, как будут внесены изменения. Этот пример предполагает, что пользователь уже установил учетные данные с узлом и разрешен создать и отредактировать записи.

Перечисление 3-3  , Создающее запись и добавляющее атрибут

NSDictionary *recordAttributes = [NSDictionary dictionaryWithObject:@"Cupertino" forKey:kODAttributeTypeCity];
ODRecord *myRecord = [myNode createRecordWithRecordType:kODRecordTypeUsers name:@"foo" attributes:recordAttributes error:&err];
[myRecord setValue:@"CA" forAttribute:kODAttributeTypeState error:&err];
[myRecord synchronizeAndReturnError:&err];

Добавление элементов к записи группы

Пример кода в Перечислении 3-4 демонстрирует, как создать группу, записывают и добавляют пользовательские записи на группу.

Перечисление 3-4  , Создающее запись группы и добавляющее элемент

NSNumber *gid;  // Assume this has been set to a desired group identifier value
ODRecord *myGroup = [myNode createRecordWithRecordType:kODRecordTypeGroups name:@"foo" attributes:nil error:&err];
[myGroup setValue:gid forAttribute:kODAttributeTypePrimaryGroupID error:&err];
[myGroup sychronizeAndReturnError:&err];  // Commit the newly created group
 
[myGroup addMemberRecord:myRecord error:&err];
[myGroup synchronizeAndReturnError:&err];  // Commit the new group member information

Удаление записи

Пример кода в Перечислении 3-5 демонстрирует, как удалить запись. Записи должны быть выпущены после того, как они будут удалены.

Перечисление 3-5  Удаляя запись

[myRecord deleteRecordAndReturnError:&err];
[myRecord release];

Определение имени записи

Открыть платформа Directory не предлагает прямого метода для того, чтобы изменить имя записи после того, как это будет создаваться. Для достижения того же эффекта получите все атрибуты записи и значения с recordDetailsForAttributes:error:, передача kODAttributeTypeAllAttributes как тип атрибута для запроса. Затем удалите запись и создайте новую запись с желаемым именем и атрибутами.