JSON в дизайнере и рендеринг на беке

Обсуждение Stimulsoft Reports.JS
Ответить
d_s_
Сообщения: 1
Зарегистрирован: 07 июн 2021, 23:26

JSON в дизайнере и рендеринг на беке

Сообщение d_s_ » 08 июн 2021, 00:03

Доброго времени суток,
пытаюсь построить следующую схему работы - на фронте загружается дизайнер к которому автоматически подгружается небольшой набор данных в формате json нужной структуры. Пользователь строит отчет, сохраняет его. Позже на беке открывается данный шаблон и вместо указанного источника данных подставляются данные с большим количество объектов в той же структуре что и данные для фронта, рендерится и сохраняется отчет на большой выборке данных.

Удалось сделать следующее - на фронте подключить пустой дизайнер, добавить мышкой json файл как источник данных, построить отчет, сохранить. А потом на беке(nodejs) следующим кодом заменить данные на массив данных большей структуры и построить отчет.

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

var report = new Stimulsoft.Report.StiReport();
report.loadFile("r1.mrt");
report.dictionary.databases.clear();
var dataSet = new Stimulsoft.System.Data.DataSet("data");
dataSet.readJson(JSON.stringify(fullData));
report.dictionary.databases.clear();
report.regData("data", "data", dataSet);
report.renderAsync(function () {
            report.saveDocumentFile("r_1.mdc");
        });
 
Указанная схема работает, строиться отчет по заданной структуре но на большем объеме данных. Но мне нужно чтобы при загрузке дизайнера пользователю не нужно было добавлять файл вручную, а он загружался автоматически.
Я попробовал на фронте действовать в таком же духе как и на фронте:

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

 var report = new Stimulsoft.Report.StiReport();
 var dataSet = new Stimulsoft.System.Data.DataSet("JSON");
 dataSet.readJson(JSON.stringify(demoData));
 report.regData("JSON", "JSON", dataSet);
 
Данные подключаются, я строю и сохраняю отчет, но на беке при рендеренге с тем же кодом строится пустой отчет. Как я понимаю при таком добавлении не создаются сущности resource database, и они храниться уже в несколько другой структуре в шаблоне. Но подход на беке и фронте одинаковый, возможно ли построить такой вариант?

Напрашивается еще один способ - как-то на фронте имитировать действия пользователя и подключить програмно json как файл. Поискал на форуме, попробовал безуспешно использовать такие функции

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

 
 var dataSet = Stimulsoft.Base.StiJsonToDataSetConverter.GetDataSetFromFile(textFile);
 var dataSet = Stimulsoft.Base.StiJsonToDataSetConverter.GetDataSet(json);
обе не удалось подключить, пишет "TypeError: Stimulsoft.Base.StiJsonToDataSetConverter.GetDataSet is not a function".

Возможно также есть какой-то другой способ "собрать" такую связку с рендерингом отчета на беке.
Заранее спасибо!
Aleksey
Сообщения: 2341
Зарегистрирован: 22 апр 2010, 02:57

Re: JSON в дизайнере и рендеринг на беке

Сообщение Aleksey » 11 июн 2021, 07:27

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

Если структура JSON данных одна и таже, то все должно строиться корректно.
Добавьте еще метод synchronize(), чтобы автоматически поддягивались все связи между вложенными объектами:
report.dictionary.synchronize()

Спасибо.
Ответить