Сериализация XML в объект отчета
Сериализация XML в объект отчета
Здравствуйте.
В качестве источника данных я указываю XML, возможно ли как нибудь сериализовать эту XML в отчете в объект, например datatime. Или можно ли как нибудь из флеша посылать данные в отчет не в виде XML, а сразу в виде объекта?
Спасибо.
В качестве источника данных я указываю XML, возможно ли как нибудь сериализовать эту XML в отчете в объект, например datatime. Или можно ли как нибудь из флеша посылать данные в отчет не в виде XML, а сразу в виде объекта?
Спасибо.
Сериализация XML в объект отчета
Здравствуйте,
Да, это возможно. Вы можете воспользоваться указанными ниже способами:
Example 1:
Example 2:
Example 3:
Спасибо.
Да, это возможно. Вы можете воспользоваться указанными ниже способами:
Example 1:
Код: Выделить всё
var xml: XML =
<Demo>
<Customers>
<ID>1</ID>
<CustomerName>John Smith</CustomerName>
</Customers>
<Customers>
<ID>2</ID>
<CustomerName>Antonio Moreno</CustomerName>
</Customers>
<Customers>
<ID>3</ID>
<CustomerName>Elizabeth Brown</CustomerName>
</Customers>
</Demo>;
var report: StiReport = new StiReport();
report.regData("Demo", "Demo", data);
report.dictionary.synchronize();
report.design();
Example 2:
Код: Выделить всё
var table: DataTable = new DataTable("Customers");
var column: DataColumn = new DataColumn("CustomerName", StorageType.StringType);
table.columns.add(column);
table.addNewRow().setValue("CustomerName", "John Smith");
table.addNewRow().setValue("CustomerName", "Antonio Moreno");
table.addNewRow().setValue("CustomerName", "Elizabeth Brown");
var dataSet: DataSet = new DataSet("DataSetName");
dataSet.tables.add(table);
var report: StiReport = new StiReport();
report.regDataSet("DataSetName", "DataSetName", dataSet);
report.dictionary.synchronize();
report.design();
Example 3:
Код: Выделить всё
var dataSet: DataSet = new DataSet("Demo");
var table: DataTable = new DataTable("Employees");
dataSet.tables.add(table);
var column: DataColumn;
var row: DataRow;
column = new DataColumn("EmployeeID", StorageType.IntType);
table.columns.add(column);
column = new DataColumn("LastName", StorageType.StringType);
table.columns.add(column);
column = new DataColumn("FirstName", StorageType.StringType);
table.columns.add(column);
column = new DataColumn("BirthDate", StorageType.DateTimeType);
table.columns.add(column);
column = new DataColumn("DrivingLicense", StorageType.BooleanType);
table.columns.add(column);
row = table.addNewRow();
row.setValue("EmployeeID", 1);
row.setValue("LastName", "Fuller");
row.setValue("FirstName", "Andrew");
row.setValue("BirthDate", new StiDateTime(1972, 02, 18)); // Так же, метод может принимать на вход стандартный для Flex объект Date.
row.setValue("DrivingLicense", true);
row = table.addNewRow();
row.setValue("EmployeeID", 2);
row.setValue("LastName", "Buchanan");
row.setValue("FirstName", "Steven");
row.setValue("BirthDate", new StiDateTime(1965, 03, 03));
row.setValue("DrivingLicense", true);
row = table.addNewRow();
row.setValue("EmployeeID", 3);
row.setValue("LastName", "Peacock");
row.setValue("FirstName", "Margaret");
row.setValue("BirthDate", new StiDateTime(1974, 09, 12));
row.setValue("DrivingLicense", false);
var report: StiReport = new StiReport();
report.regDataSet("Demo", "Demo", dataSet);
report.dictionary.synchronize();
report.design();
Спасибо.
Сериализация XML в объект отчета
Ага, спасибо, совет с DataSet подходит как нельзя лучше. Тогда вытекает следующий вопрос. Как правильно прогрмаммно организовать связи между таблицами в этом DataSet. Или можно ссылку на документацию вашего API(ее не смог найти в инете).
Сериализация XML в объект отчета
Здравствуйте.
К сожалению, документации по API нет.
Вот полный код создания Data Source:
Спасибо.
К сожалению, документации по API нет.
Вот полный код создания Data Source:
Код: Выделить всё
var ds1: StiDataSource = new StiDataTableSource("Database", "DataSource1", "DataSource1");
report.dictionary.dataSources.add(ds1);
var ds2: StiDataSource = new StiDataTableSource("Database", "DataSource2", "DataSource2");
report.dictionary.dataSources.add(ds2);
var col1: StiDataColumn = new StiDataColumn("ID", "ID", "ID");
ds1.columns.add(col1);
var col2: StiDataColumn = new StiDataColumn("ID", "ID", "ID");
ds2.columns.add(col2);
var columns1: StiDataColumnsCollection = new StiDataColumnsCollection();
columns1.add(ds1.columns.getByName("ID"));
var columns2: StiDataColumnsCollection = new StiDataColumnsCollection();
columns2.add(ds2.columns.getByName("ID"));
var rel: StiDataRelation = new StiDataRelation("Relation1", "Relation1", "Relation1", ds1, ds2, columns1, columns2);
report.dictionary.relations.add(rel);
Сериализация XML в объект отчета
Ну тогда еще пару вопросов для полного прояснения ситуации. Когда мы пишем в коде:
то мы же как то должны в генераторе отчета указать, что мы ему будем посылать DataSet, причем имя этого соединения Demo. В генераторе отчета я нашел только соединение с XML данными(что самое близко мне подходит), как указать, что я буду посылать именно DataSet.
И еще, когда я у себя в приложении запускаю отчет, то мне вечно говорит, что Compiling Report или Loading Data. Как избавиться от этого? Вот код, который вызывает отчет:
В самом отчете имя источника данных Schema, имя соединения такое же. Недостаток знаний и документации приходится компенсировать вопросами на форуме)
Код: Выделить всё
report.regDataSet("Demo", "Demo", dataSet);
И еще, когда я у себя в приложении запускаю отчет, то мне вечно говорит, что Compiling Report или Loading Data. Как избавиться от этого? Вот код, который вызывает отчет:
Код: Выделить всё
report = new StiReport();
report.loadReportFromString(reportString);
report.dictionary.dataSources.clear();
report.dataStore.clear();
report.dictionary.clear();
report.dictionary.databases.clear();
report.regDataSet("Schema","Schema",XMLHead);
report.dictionary.synchronize();
report.render(true);
report.show(viewerFx);
Сериализация XML в объект отчета
Код: Выделить всё
Вот ссылка на отчет: http://narod.ru/disk/50232156001.250b84 ... s.mrt.html
Сериализация XML в объект отчета
Здравствуйте,
Эти методы очищают структуру данных в шаблоне отчёта, сами данные в шаблоне отчёта не хранятся.
Этот метод регистрирует данные в объекте отчёта.
Этот метод полностью пересоздаёт структуру данных шаблона отчёта на основе зарегистрированных данных (могут быть нарушены связи таблиц).
Так как структура данных в отчёте у вас уже определена, то её нет необходимости очищать и пересоздавать заново, достаточно лишь убрать соединения с источником данных. Попробуйте следующий код:
Для очистки массива данных (если они были зарегистрированы ранее), нужно использовать следующий метод:
Для того, что бы не отображать сообщения Compiling Report, используйте такой вызов метода:
Спасибо.
Код: Выделить всё
report.dictionary.dataSources.clear();
report.dictionary.clear();
report.dictionary.databases.clear();
Код: Выделить всё
report.regDataSet("Schema","Schema",XMLHead);
Код: Выделить всё
report.dictionary.synchronize();
Так как структура данных в отчёте у вас уже определена, то её нет необходимости очищать и пересоздавать заново, достаточно лишь убрать соединения с источником данных. Попробуйте следующий код:
Код: Выделить всё
report.dictionary.databases.clear(); // удаляем источники данных
report.regDataSet("Schema","Schema",XMLHead); // регистрируем массив данных в объекте отчёта, структура таблиц должна повторять структуру словаря в шаблоне отчёта
report.render(true); // рендерим отчёт
report.show(viewerFx);
Код: Выделить всё
report.dataStore.clear();
Код: Выделить всё
report.render(false);
При рендеринге отчёта данные переносятся в DataStore из указанного соединения (XML, SQL и др.), если соединения не заданы (или очищены при помощи метода report.dictionary.databases.clear(), то данные будут браться из DataStore по имени источника данных, которое определено в regData() методе.то мы же как то должны в генераторе отчета указать, что мы ему будем посылать DataSet, причем имя этого соединения Demo. В генераторе отчета я нашел только соединение с XML данными(что самое близко мне подходит), как указать, что я буду посылать именно DataSet.
Спасибо.
Сериализация XML в объект отчета
Спасибо, с Compiling Report разобрался. Немного поразбирался и понял, почему данные XML, посылаемые мной в отчет воспринимались как строка.
С помощью этого выражения мы регистрируем наши данные
А можем ли мы еще программно указать XML схему тех данных, которые мы посылаем, как показано в примере выше.
С помощью этого выражения мы регистрируем наши данные
Код: Выделить всё
report.regDataXML("Schema","Schema",XMLHead);
Сериализация XML в объект отчета
Здравствуйте,
К сожалению, нет, но есть обходные пути:
1. Формировать коллекцию DataSet, где указаны типы данных
2. Можно указывать тип данных прямо в XML:
Спасибо.
К сожалению, нет, но есть обходные пути:
1. Формировать коллекцию DataSet, где указаны типы данных
2. Можно указывать тип данных прямо в XML:
Код: Выделить всё
var xml: XML =
<Demo>
<Employees>
<ID type="int">1</ID>
<Name>John Smith</Name>
<Discount type="float">0.05</Discount>
<Birthday type="dateTime">1958-01-08</Birthday>
</Employees>
<Employees>
<ID type="int">2</ID>
<Name>Antonio Moreno</Name>
<Discount type="float">0.15</Discount>
<Birthday type="dateTime">1966-01-26</Birthday>
</Employees>
</Demo>;
Сериализация XML в объект отчета
Спасибо за помощь, все работает как и должно работать! Только появилась одна загвоздка, связанная с форматированием даты. В самом отчете я указываю в каком формате ее выводить, и когда кидаю тестовую XML со схемой в дизайнер отчета, то все работает как надо, а когда пытаюсь послать в отчет XML из приложения то даты выводит в другом формате, который мне не приемлем(M/D/YYY K:N:SS A). С чем это может быть связано?