Работа с делегатом экспресс-отчета

Требования к операционной системе: iOS 5.0 и выше.

Мобильное устройство: iPad.

Описание

В данном примере описываются некоторые приемы работы с делегатом экспресс-отчета. После запуска примера выполняются следующие операции:

Исходный код

Для выполнения примера необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:

// Получаем экземпляр делегата экспресс-отчета
EAReportDelegateImpl *reportDelegate = (EAReportDelegateImpl *)[m_controller delegate];
// Получаем экспресс-отчет
SPPLOlapReport report = [reportDelegate olapReport];
// Выводим в консоль среды разработки начальный режим отображения данных экспресс-отчета
NSLog(@"Начальный режим отображения данных экспресс-отчета: %@", report->startMode()->nsString());
// Получаем права доступа к экспресс-отчету
MAReportAccessRights *rights = [reportDelegate accessRights];
// Выводим в консоль среды разработки права доступа к экспресс-отчету
NSLog(@"Права доступа к экспресс-отчету:");
NSLog(@"Чтение: %@", [rights canRead]? @"разрешено": @"запрещено");
NSLog(@"Запись: %@", [rights canWrite]? @"разрешена": @"запрещена");
NSLog(@"Удаление: %@", [rights canDelete]? @"разрешено": @"запрещено");
NSLog(@"Печать: %@", [rights canPrint]? @"разрешена": @"запрещена");
// Создаем новый объект прав доступа к экспресс-отчету на основе битовой маски
MAReportAccessRights *rights2 = [[MAReportAccessRights alloc] initWithBitmask:[rights bitmask]];
// Сравниваем новый объект с объектом прав доступа к экспресс-отчету и выводим в консоль среды разработки результат сравнения
if([rights isEqual: rights2])
{
    NSLog(@"Сравнение нового объекта прав доступа к экспресс-отчету с исходным объектом: объекты равны");
}
else{
    NSLog(@"Сравнение нового объекта прав доступа к экспресс-отчету с исходным объектом: объекты не равны");
}
// Получаем справочник, содержащий первоначальные настройки отчета
NSDictionary *settings = [reportDelegate reportSettings];
// Получаем справочник, содержащий первоначальные настройки диаграммы
NSDictionary *chart = [settings valueForKey:@"chart"];
// Получаем массив ключей справочника настроек диаграммы
NSArray *settingsKeys = [chart allKeys];
// Выводим в консоль среды разработки параметры диаграммы
NSLog(@"Параметры диаграммы, содержащиеся в справочнике:" );
// Перебираем в цикле ключи справочника настроек диаграммы
for(NSString *key in settingsKeys)
{
    // Выводим в консоль среды разработки наименование и значение параметра настроек диаграммы
    NSLog(@"%@: %@", key, [chart valueForKey:key]);
}
// Проверяем наличие скриншота и выводим в консоль среды разработки результат проверки
NSLog(@"Наличие скриншота: %@", [reportDelegate hasScreenshot]? @"присутствует":@"отсутствует");
// Получаем ссылку на репозиторий
SPPLMetabase metabase = PPLMetabase::sharedMetabase(report->descriptor()->repositoryDescriptor());
// Выводим в консоль среды разработки количество избранных объектов репозитория до добавления отчета в избранное
NSLog(@"Количество избранных объектов репозитория до добавления отчета в избранное: %d",metabase->favoriteDescriptors()->count());
// Сохраняем отчет в избранное
[reportDelegate saveFavoriteWithName:@"favorite1"];
// Выводим в консоль среды разработки количество избранных объектов репозитория после добавления отчета в избранное
NSLog(@"Количество избранных объектов репозитория после добавления отчета в избранное: %d",metabase->favoriteDescriptors()->count());

Также необходимо в файле статичного примера MAExpressAnalysisReportViewControllerFactory.mm в методе createReport: заменить фрагмент кода перед строкой:

SNString plistPath = PPLFileManager::getReportPlistPath(olapReport->descriptor());

на следующий код:

// Создаём делегат отчета
EAReportDelegateImpl *delegate = [[[EAReportDelegateImpl alloc] initWithOlapReport:olapReport] autorelease];
// Создаём контроллер аналитической панели
MAExpressAnalysisReportViewController *report = [[[MAExpressAnalysisReportViewController alloc] initWithDelegate:delegate] autorelease];
// Задаем контроллер аналитической панели для созданного делегата
delegate.expressReportController = report;

В результате выполнения примера в консоли среды разработки была выведена информация об экспресс-отчете, параметры настроек диаграммы экспресс-отчета, результат сравнения нового объекта прав доступа к экспресс-отчету с исходным объектом, а также количество избранных объектов в репозитории до и после добавления экспресс-отчета в избранное:

Начальный режим отображения данных экспресс-отчета: Table

Права доступа к экспресс-отчету:

Чтение: разрешено

Запись: разрешена

Удаление: разрешено

Печать: разрешена

Сравнение нового объекта прав доступа к экспресс-отчету с исходным объектом: объекты не равны

Параметры диаграммы, содержащиеся в справочнике:

legendOrientation: 3

chartType: 0

legendVisible: true

Наличие скриншота: отсутствует

Количество избранных объектов репозитория до добавления отчета в избранное: 0

Количество избранных объектов репозитория после добавления отчета в избранное: 1

См. также:

Примеры использования компонентов