Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с экспресс-отчетом. После запуска примера выполняются следующие операции:
возвращается экспресс-отчет;
возвращается заголовок экспресс-отчета;
создается копия экспресс-отчета, содержащая хранилище пользовательских данных;
создается копия экспресс-отчета без содержимого хранилища пользовательских данных;
указывается фиксированное измерение экспресс-отчета;
указывается измерение первой копии экспресс-отчета, расположенное по столбцам;
указывается измерение второй копии экспресс-отчета, расположенное по строкам;
извлекается источник данных экспресс-отчета;
извлекается контейнер отметок элементов измерения;
для первой копии отчёта задаются новые идентификаторы для измерения метрик, измерения объектов наблюдения и календарного измерения, по которому строится временная шкала;
устанавливается новый источник данных для первой копии отчета;
устанавливается новый контейнер отметок по измерениям для первой копии отчета;
возвращает доступные ключи справочника настроек карты.
Для выполнения примера необходимо разместить взамен метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:
-(void)executeExample {
// Получаем экспресс-отчет
SPPLOlapReport report = m_olapReport;
// Получаем заголовок экспресс-отчета
SNString title = report->title();
printf("Заголовок экспресс-отчета: %s\n",title->UTF8String());
// Получаем копию экспресс-отчета
SPPLOlapReport copy =report->copy()->qClass<PPLOlapReport>();
// Получаем копию экспресс-отчета без содержимого хранилища пользовательских данных
SPPLOlapReport copyWithoutStorage =report->copyWithoutStorage()->qClass<PPLOlapReport>();
// Получаем массив измерений
SNArray allDimensions = [self allDimensions];
if (allDimensions->count() < 1) {
printf("Не найдено ни одного измерения");
return;
}
// Получаем первое измерение в массиве
SPPLDimension dimension = allDimensions->objectAtIndex<PPLDimension>(0);
printf("Количество фиксированных измерений экспресс-отчета: %d\n", report->fixedDimensions()->count());
// Указываем фиксированное измерение
report->putDimensionToFixed(dimension);
printf("Количество фиксированных измерений экспресс-отчета: %d\n", report->fixedDimensions()->count());
printf("Количество измерений, размещенных по столбцам, для первой копии отчета: %d\n",copy->leftDimensions()->count());
// Указываем для первой копии отчета измерение, расположенное по столбцам
copy->putDimensionToLeft(dimension);
printf("Размещение измерения по столбцам для первой копии отчета\n");
printf("Количество измерений, размещенных по столбцам, для первой копии отчета: %d\n", copy->leftDimensions()->count());
// Получаем второе измерение куба в массиве
SPPLDimension dimension1 = allDimensions->objectAtIndex<PPLDimension>(1);
printf("Количество измерений, размещенных по строкам, для второй копии отчета: %d\n", copyWithoutStorage->topDimensions()->count());
// Указываем для второй копии отчета измерение, размещенное по строкам
copyWithoutStorage->putDimensionToTop(dimension1);
printf("Размещение измерения по строкам для второй копии отчета\n");
printf("Количество измерений, размещенных по строкам, для второй копии отчета: %d\n", copyWithoutStorage->topDimensions()->count());
// Получаем источник данных экспресс-отчета
SPPLDataSource dataSource = report->dataSource();
printf("Наименование объекта, на основе которого создан источник данных экспресс-отчета: %s\n",dataSource->descriptor()->name()->UTF8String());
// Получаем контейнер отметок элементов измерения в экспресс-отчете
SPPLDimensionSelectionSet selectionSet = report->selectionSet();
printf("Количество отметок элементов измерения в контейнере отметок экспресс-отчета: %d\n",selectionSet->selectionsCount());
// Задаем для первой копии отчёта новый идентификатор для измерения метрик
copy->setMetrics(NStr("Новое измерение метрик"));
printf("Идентификатор для измерения метрик у первой копии отчета: %s\n",copy->metrics()->UTF8String());
// Задаем для первой копии отчёта новый идентификатор для измерения объектов наблюдения
copy->setObjectives(NStr("Новое измерение объектов наблюдения"));
printf("Идентификатор для измерения объектов наблюдения у первой копии отчета: %s\n",copy->objectives()->UTF8String());
// Задаем для первой копии отчета новый идентификатор календарного измерения, используемого для построения временной шкалы
copy->setTimeline(NStr("Новое измерение временной шкалы"));
printf("Идентификатор календарного измерения, используемого для построения временной шкалы, в первой копии отчета: %s\n",copy->timeline()->UTF8String());
// Создаем копию объекта репозитория для первого измерения
SPPLMetabaseRepositoryObjectDescriptor descriptor = dimension->relatedObjectDescriptor()->copy()->qClass<PPLMetabaseRepositoryObjectDescriptor>();
// Создаем новый источник данных на основе копии объекта репозитория
SPPLDataSource createdDataSource = PPLDataSource::dataSource(descriptor);
if (createdDataSource != NULL) {
// Задаем новое наименование объекта репозитория, на основе которого создан источник данных
createdDataSource->descriptor()->setName(NStr("Новый объект репозитория"));
// Устанавливаем новый источник данных для первой копии отчета
copy->setDataSource(createdDataSource);
printf("Наименование объекта, на основе которого создан источник данных первой копии отчета: %s\n",copy->dataSource()->descriptor()->name()->UTF8String());
} else {
printf("Не удалось создать новый источник данных на основе копии объекта репозитория");
}
printf("Наименование объекта, на основе которого создан источник данных первой копии отчета: %s\n",copy->dataSource()->descriptor()->name()->UTF8String());
// Получаем копию контейнера отметок элементов измерения экспресс-отчета
SPPLDimensionSelectionSet createdSelectionSet = report->selectionSet()->copy()->qClass<PPLDimensionSelectionSet>();
// Получаем последнюю отметку в копии контейнера
SPPLDimensionSelection selection = createdSelectionSet->getSelectionByIndex(createdSelectionSet->selectionsCount() - 1);
// Удаляем последнюю отметку из копии контейнера
createdSelectionSet->removeSelection(selection->dimension()->id());
// Задаем новый контейнер отметок для первой копии отчета
copy->setSelectionSet(createdSelectionSet);
printf("Количество отметок элементов измерения в контейнере отметок первой копии отчета: %d\n",copy->selectionSet()->selectionsCount());
// Выводим информацию об источнике данных карты
[self printMapDSInfo];
}
-(void) printMapDSInfo {
// Получаем контроллер для работы с экспресс-отчётом
MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
// Получаем делегат для работы с экспресс-отчётом
EAReportDelegateImpl *delegate = [contr delegate];
// Сохраняем текущее состояние отчёта
[delegate saveReport];
// Получаем настройки источника данных карты
SNDictionary mapDSSettings = [delegate olapReport]->mapDSSettings();
if (mapDSSettings != nullptr) {
printf("Доступные ключи справочника настроек карты:\n");
N_FOREACH(SNString, key, mapDSSettings->allKeys()) {
printf("%s\n", key->UTF8String());
}
} else {
printf("Настройки источника данных карты не определены\n");
}
}
В результате выполнения примера в консоли среды разработки была выведена информация об экспресс-отчете и его копиях, изменения в массиве измерений метрик, массиве измерений объектов наблюдения и массиве календарных измерений, по которым строится временная шкала объектов отчетов, а также информация о новом источнике данных и контейнере отметок первой копии отчета :
Заголовок экспресс-отчета: &[Dimensions.FACTS_WDI_COPY_1557]
Количество фиксированных измерений экспресс-отчета: 1
Количество фиксированных измерений экспресс-отчета: 2
Количество измерений, размещенных по столбцам, для первой копии отчета: 1
Размещение измерения по столбцам для первой копии отчета
Количество измерений, размещенных по столбцам, для первой копии отчета: 2
Количество измерений, размещенных по строкам, для второй копии отчета: 1
Размещение измерения по строкам для второй копии отчета
Количество измерений, размещенных по строкам, для второй копии отчета: 2
Наименование объекта, на основе которого создан источник данных экспресс-отчета: World Development Indicators
Количество отметок элементов измерения в контейнере отметок экспресс-отчета: 3
Идентификатор для измерения метрик у первой копии отчета: Новое измерение метрик
Идентификатор для измерения объектов наблюдения у первой копии отчета: Новое измерение объектов наблюдения
Идентификатор календарного измерения, используемого для построения временной шкалы, в первой копии отчета: Новое измерение временной шкалы
Наименование объекта, на основе которого создан источник данных первой копии отчета: Новый объект репозитория
Доступные ключи справочника настроек карты:
COLOR_KEY
DIM_KEY
SETTINGSFORMETRICS
SIZE_KEY
HEIGHT_KEY
См. также: