Работа с источником данных аналитической панели

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

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

Описание

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

Исходный код

Для выполнения примера необходимо разместить взамен метода 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);

После её выполнения для объектов источника данных аналитической панели будут применены новые идентификаторы и ключи.

См. также:

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