Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере выполняется работа с источником данных аналитической панели и его контейнером. После его запуска выполняются следующие операции:
возвращается объект источника данных аналитической панели;
определяются идентификатор, ключ, наименование, количество изменений объекта источника данных и его идентификатор в аналитической панели;
создаётся справочник c настройками источника данных аналитической панели;
на основе справочника создаётся новый объект источника данных аналитической панели;
для объекта источника данных аналитической панели применяются новые идентификатор и ключ.
Для выполнения примера необходимо разместить взамен метода executeExample класса ViewController (см. раздел «Отображение аналитической панели») следующий код:
-(void)executeExample {
// Получаем массив справочников с настройками контейнера для объектов источника данных
SNArray settings = m_dashboardReport->dataSourceObjects()->generatePlist()->qClass<NArray>();
// Создаём контейнер для объектов источника данных аналитических панелей
SPPLDashboardDataSourceObjects dataSourceObjects = PPLDashboardDataSourceObjects::dataSourceObjects(settings);
// Получаем первый объект источника данных
SPPLDashboardDataSourceObject dataSourceObject = [self getDataSourceObjectFromObjects: dataSourceObjects ByIndex: 0];
// Выводим информацию об объекте источника данных
[self showDataSourceObjectInfo: dataSourceObject];
// Попробуем открыть объект источника данных с новым идентификатором в аналитической панели
SPPLDashboardDataSourceObject object = dataSourceObjects->
getObjectByDashboardRelatedId(dataSourceObject->dashboardRelatedId());
if (object != NULL) {
printf("Объект источника данных с идентификатором %s в аналитической панели найден \n",
dataSourceObject->dashboardRelatedId()->UTF8String());
} else {
printf("Объект источника данных с идентификатором %s в аналитической панели не найден \n",
dataSourceObject->dashboardRelatedId()->UTF8String());
}
// Применяем новый идентификатор и ключ для первого объекта источника данных
[self applyId: NStr("OBJ128")
AndKey: (NNumber::numberWithInt(128))
forDataSourceObjects: dataSourceObjects
WithIndex: 0];
N_FOREACH(SPPLDashboardDataSourceObject, object, m_dashboardReport->dataSourceObjects()->objects()) {
printf("Новый идентификатор объекта: %s \n", object->id()->UTF8String());
printf("Новый ключ объекта: %lld \n", object->key());
break;
}
}
// Возвращает объект источника данных по индексу
-(SPPLDashboardDataSourceObject) getDataSourceObjectFromObjects: (SPPLDashboardDataSourceObjects) dataSourceObjects
ByIndex: (int) index {
// Получаем массив объектов источника данных аналитических панелей
SNArray objects = dataSourceObjects->objects();
// Получаем идентификатор первого объекта источника данных
SNString objectId = objects->objectAtIndex(index)->qClass<PPLDashboardDataSourceObject>()->id();
SPPLDashboardDataSourceObject dataSourceObject1 = dataSourceObjects->getObjectById(objectId);
// Создаём справочник с настройками контейнера, содержащего объекты источника данных
SNMutableDictionary plist = dataSourceObject1->generatePlist()->qClass<NMutableDictionary>();
// Устанавливаем для первого объекта источника данных новый идентификатор
plist->setObjectForKey(NStr("test"), NStr("id"));
// Создаём на основе справочника второй объект источника данных
return PPLDashboardDataSourceObject::dataSourceObject(plist);
}
// Выводит информацию об объекте источника данных
-(void)showDataSourceObjectInfo: (SPPLDashboardDataSourceObject) dataSourceObject {
printf("Идентификатор объекта источника данных: %s \n", dataSourceObject->id()->UTF8String());
printf("Ключ объекта источника данных: %lld \n", dataSourceObject->key());
printf("Наименование объекта источника данных: %s \n", dataSourceObject->name()->UTF8String());
printf("Количество изменений объекта источника данных: %lld \n", dataSourceObject->changeCounter());
printf("Идентификатор объекта источника в аналитической панели: %s \n",
dataSourceObject->dashboardRelatedId()->UTF8String());
}
// Применяем изменения для идентификатора и ключа объекта источника данных с указанным индексом
-(void)applyId: (SNString) objectId AndKey: (SNNumber) objectKey forDataSourceObjects: (SPPLDashboardDataSourceObjects) dataSourceObjects WithIndex: (int) index {
for(int i = 0; i < dataSourceObjects->objects()->count(); i++){
if (i == index) {
SPPLDashboardDataSourceObject object = dataSourceObjects->objects()->
objectAtIndex<PPLDashboardDataSourceObject>(index);
SNMutableDictionary idMapping =
NMutableDictionary::mutableDictionaryWithObjectForKey(objectId, object->id());
SNMutableDictionary keyMapping =
NMutableDictionary::mutableDictionaryWithObjectForKey(objectKey, object->id());
dataSourceObjects->applyIdsAndKeysChanges(idMapping, keyMapping);
break;
}
}
}
В результате выполнения примера в консоли среды разработки была выведена информация об объекте источника данных аналитической панели:
Идентификатор объекта источника данных: OBJ9630
Ключ объекта источника данных: 9630
Наименование объекта источника данных: Социально-экономические показатели
Количество изменений объекта источника данных: 0
Идентификатор объекта источника в аналитической панели: test
Объект источника данных с идентификатором test в аналитической панели не найден
Новый идентификатор объекта: OBJ128
Новый ключ объекта: 128
Результат выполнения примера не изменится, если заменить строку кода
dataSourceObjects->applyIdsAndKeysChanges(idMapping, keyMapping);
на следующую строку:
m_dashboardReport->applyIdsAndKeysChanges(idMapping, keyMapping);
После её выполнения для объектов источника данных аналитической панели будут применены новые идентификаторы и ключи.
См. также: