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

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

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

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

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

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

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 элементом.

Спасибо.


person Marley    schedule 29.09.2016    source источник
comment
Вы пытались закрыть и снова открыть QS?   -  person Stefan Stoichev    schedule 29.09.2016
comment
Похоже, что строки не загружаются во время запуска console.log. Вам нужно получить к ним доступ позже.   -  person Roland Starke    schedule 29.09.2016
comment
Как предложил Роланд, попробуйте получить данные с обещанием. Что-то вроде: field.getData().then( function ( fieldData ) { console.log(fieldData.rows.length) });   -  person Stefan Stoichev    schedule 29.09.2016
comment
@Stefan Stoichev - Да, я много раз пытался закрыть и открыть QS.   -  person Marley    schedule 30.09.2016
comment
@Roland Starke - я понимаю, какие данные не загружаются, когда пытаюсь с ними работать   -  person Marley    schedule 30.09.2016
comment
@Stefan Stoichev - я пытался работать с синтаксисом, как вы предлагаете, но всегда получаю TypeError: myField.getData(...).then не является функцией   -  person Marley    schedule 30.09.2016


Ответы (2)


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

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);
            }
        }); 
    }
person maxim1500    schedule 10.01.2017
comment
Обратите внимание, что по умолчанию вы будете ограничены первыми 200 строками. Существует параметр для количества возвращаемых строк. См. документацию. Тем не менее, все еще пытаюсь понять, как пейджинговать. На данный момент функция getMoreData() у меня не работает. - person maxim1500; 10.01.2017

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

var fieldValues = app.field("SomeFieldName").getData();
fieldValues.OnData.bind(function () {
    console.info("waitedForData>>>",fieldValues.rows);
});
person Pro_To    schedule 11.03.2017
comment
Попробуйте объяснить, почему это подходящее решение. - person Mawcel; 11.03.2017