Как получать данные из поля в Qlik Sense 3.0?

#javascript #field #qliksense

#javascript #поле #qliksense

Вопрос:

Я работаю над расширением для приложения Qlik Sense 3.0.

Я создал ту же тему в сообществе qlik, но не получил ответа.

https://community.qlik.com/thread/231938

Я надеюсь, что кто-нибудь здесь может мне помочь.

ОК. У меня есть функция:

 function whenMonthsSelected(fieldName){  

    var field = app.field(fieldName);  

    var fieldData = field.getData();  

    console.log("fieldData");  
    console.log(fieldData);  

    console.log(fieldData.rows.length);  
} 
  

И когда я его выполняю, я получаю в браузере:

введите описание изображения здесь

В результате у меня есть массив с 0 элементами.

И мой вопрос…
Что я должен сделать, чтобы получить массив из 12 строк?

В этом массиве хранятся 12 строк (информация о месяцах). И я могу получать данные, нажимая на дерево. Но в консоли я всегда получаю массив с 0 элементом.

Спасибо.

Комментарии:

1. Вы пробовали закрывать и повторно открывать QS?

2. Похоже, строки не загружаются при запуске console.log. Вам нужно получить к ним доступ позже.

3. Как предложил Роланд, попробуйте получить данные с помощью promise. Что-то вроде: field.getData().then( function ( fieldData ) { console.log(fieldData.rows.length) });

4. @Stefan Stoichev — Да, я много раз пытался закрыть и открыть QS.

5. @Roland Starke — Я понимаю, какие данные не загружаются, когда я пытаюсь с ними работать

Ответ №1:

Вам нужно привязаться к событию onData. Данные загружаются асинхронно в коллекцию строк. Следующий пример typescript демонстрирует идею.

 getField(field: string): Promise<any> {
        let self = this.app;
        return new Promise(function (resolve, reject) {
            try {                    
                let reply: any;

                let listener = function () {
                    self.field(field).OnData.unbind(listener); 
                    resolve(reply.rows);
                }

                self.field(field).OnData.bind(listener); 
                reply = self.field(field).getData();
            } catch (ex) {
                reject(ex);
            }
        }); 
    }
  

Комментарии:

1. Обратите внимание, что по умолчанию вы будете ограничены первыми 200 строками. Существует параметр для количества возвращаемых строк. Смотрите документацию. Все еще пытаюсь понять, как перейти на страницу. Функция getMoreData() на данный момент у меня не работает.

Ответ №2:

Похоже, этот код сделает то, что вам нужно:

 var fieldValues = app.field("SomeFieldName").getData();
fieldValues.OnData.bind(function () {
    console.info("waitedForData>>>",fieldValues.rows);
});
  

Комментарии:

1. Попытайтесь объяснить, почему это подходящее решение