загрузка json данных из http request

Обсуждение Stimulsoft Reports.JS
Atiss
Сообщения: 11
Зарегистрирован: 02 июн 2017, 09:01

загрузка json данных из http request

Сообщение Atiss »

Добрый день.
Можно ли подгрузить json данные в dataset, используя url и параметры напрямую,
Сейчас я делаю сначала аякс запрос, получаю json и потом только передаю в dataset. А хотелось бы какой то механизм, которому достаточно лишь сообщить откуда и с какими параметрами получать данные.
Atiss
Сообщения: 11
Зарегистрирован: 02 июн 2017, 09:01

Re: загрузка json данных из http request

Сообщение Atiss »

спасибо
Аватара пользователя
Vladimir
Сообщения: 415
Зарегистрирован: 06 авг 2008, 09:48
Откуда: Earth

Re: загрузка json данных из http request

Сообщение Vladimir »

Здравствуйте,

Вы можете использовать указанный ниже код для загрузки данных по URL, так же в строке адреса можно использовать GET параметры.

Код: Выделить всё

var dataSet = new Stimulsoft.System.Data.DataSet();
dataSet.readJsonFile("http://localhost:54200/Data/Demo.json");
report.regData("Demo", null, dataSet);
POST параметры и соответствующий запрос не предусмотрены, здесь необходима предварительная загрузка данных отдельным AJAX методом.

Спасибо.

(извините за предыдущий не совсем верный ответ)
Atiss
Сообщения: 11
Зарегистрирован: 02 июн 2017, 09:01

Re: загрузка json данных из http request

Сообщение Atiss »

Добрый день. Спасибо за ответ. Т.е. параметры необходимо задавать следующим образом? А нет ли более элегантного метода?

Код: Выделить всё

dataSet.readJsonFile("/reports/well_reports/"+"?id="+this.id+"&start_dt="
            +this.lookupReference('fromDate').getValue().toISOString().substr(0,19)
            +"&end_dt="+this.lookupReference('toDate').getValue().toISOString().substr(0,19)
            +"&report_type="+this.lookupReference('reports').getValue());
И еще вопрос. вышеуказанным способом удалось считать json.
Но, изначально первый вопрос появился из за того, что загрузка json занимается достаточно долгое время, а вьюер не показывает маску загрузки. Была мысль, что если запрашивать непосредственно в dataset, маска появится перед загрузкой. Однако не появляется. Подскажите пожалуйста, как сделать чтобы маска загрузки появлялась раньше?
Aleksey
Сообщения: 2777
Зарегистрирован: 22 апр 2010, 06:57

Re: загрузка json данных из http request

Сообщение Aleksey »

Здравствуйте,

В данный момент, указанная функция может работать только с GET параметрами запроса.

Для показа, скрытия загрузки можно использовать следующий код:
viewer.jsObject.controls.processImage.show();
viewer.jsObject.controls.processImage.hide();

Спасибо.
Atiss
Сообщения: 11
Зарегистрирован: 02 июн 2017, 09:01

Re: загрузка json данных из http request

Сообщение Atiss »

Пишу так:

Код: Выделить всё

var viewer = new Stimulsoft.Viewer.StiViewer(options, "StiViewer", false);
 viewer.jsObject.controls.processImage.show();
но, viewer.jsObject = undefined
Aleksey
Сообщения: 2777
Зарегистрирован: 22 апр 2010, 06:57

Re: загрузка json данных из http request

Сообщение Aleksey »

Здравствуйте,

viewer.jsObject инитиализируется только после viewer.renderHtml("viewerCont");

Код: Выделить всё

var viewer = new Stimulsoft.Viewer.StiViewer(options, "StiViewer", false);
viewer.renderHtml("viewerCont");
viewer.jsObject.controls.processImage.show();
Спасибо.
Atiss
Сообщения: 11
Зарегистрирован: 02 июн 2017, 09:01

Re: загрузка json данных из http request

Сообщение Atiss »

К сожалению проблема не решается таким образом. Т.е. пока происходит загрузка емкого отчета, вьюер не появляется, т.е. просто пустое место. И после того как данные загрузились через несколько секунд, только потом появляется и вьюер и маска загрузки. Что я делаю не так? Хотелось бы чтобы сначала отрисовался вьюер, потом только пошел запрос отчета и параллельно появилась маска загрузки.

Код: Выделить всё

let options = this.createViewerOptions();
        // Create the report viewer with default options
        this.viewer = new Stimulsoft.Viewer.StiViewer(options, "StiViewer", false);
        this.viewer.renderHtml("viewerContent");
        this.viewer.jsObject.controls.processImage.show();
        // Create a new report instance
        var report = new Stimulsoft.Report.StiReport();
        var dataSet = new Stimulsoft.System.Data.DataSet();
        dataSet.readJsonFile("/reports/well_reports/"+"?params);
        let type = this.lookupReference('reports').getSelection().data.type;
        report.loadFile("static/js/map/components/reportTemplates/"+type+".mrt");
        report.dictionary.databases.clear();
        report.regData("tmpl", "tmpl", dataSet);
        // Assign report to the viewer, the report will be built automatically after rendering the viewer
        this.viewer.report = report;
        this.viewer.jsObject.controls.processImage.hide();
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: загрузка json данных из http request

Сообщение HighAley »

Здравствуйте.

Возможно мы немного не с той стороны подошли к вашей проблеме.
В нашем продукте можно в отчёт добавить переменную и потом использовать их в URL подключения к JSON данным.
Для этого не надо запрашивать JSON данные вашим кодом. Они будут запрошены перед построением отчёта нашим движком.
Значение переменной можно запросить у пользователя или задать её из кода.
В самом URL переменную можно использовать следующим образом:

Код: Выделить всё

http://example.com/json/{VarParam1}
Напишите какой вариант вам больше подходит, и, если вам ещё нужна наша помощь, то в каком направлении.

Спасибо.
Atiss
Сообщения: 11
Зарегистрирован: 02 июн 2017, 09:01

Re: загрузка json данных из http request

Сообщение Atiss »

Здравствуйте. Вот тут мы и возвращаемся к самому началу. Все так и было. Я изначально забираю откуда надо аяксом данные, и потом подгружаю в отчет. Вся проблема в том, что загрузка данных занимает ощутимое время, и все это время крутится наша маска, а потом в момент подрузки в report, включается ваша маска, что выглядит некрасиво. Нужно либо нашу маску отключить, но при этом чтобы была возможность включить вашу маску еще до того, как данные подгружены в репорт, либо отключить вашу совсем. Даже второй вариант предпочтительнее, чтобы во всей системе была единая маска.

Код: Выделить всё

this.viewer.jsObject.controls.processImage.hide();
как то не очень помогает.
Ответить