Использование FastReport3 совместно с .NET
alman
космополит
Господа, Вы можете принять участие в тестировании и обкатке FastReport3 COM-server. Данный продукт позволяет использовать FastReport совместно с Visual C++, C#.NET, VB.NET и другими продуктами.
http://www.fast-report.com/pbc_download/frx3com_trial.exe
Продукт находится в стадии ранней альфы, мы будем рады учесть все Ваши пожелания.
В архиве находится FastReport COM-server (frxCOM.dll ), примеры использования для МS VC++, C# и VB и множество демонстрационных отчётов.
http://www.fast-report.com/pbc_download/frx3com_trial.exe
Продукт находится в стадии ранней альфы, мы будем рады учесть все Ваши пожелания.
В архиве находится FastReport COM-server (frxCOM.dll ), примеры использования для МS VC++, C# и VB и множество демонстрационных отчётов.
Комментарии
1. Будет ли навигация по таблице данных вынесена в интерфейс, который бы реализовывал нетовский класс?
2. работает ли COM в Multi Threaded Appartment?
3. Так как датасеты у нас формируются динамически, возможна ли проверка
корректности (соответствия) настроек отчета (наименований таблиц и полей ) с соответствующими таблицами и полями датасета с данными? ( Имею ввиду нетовский датасет)
Списибо.
Добрый день.
Не могли бы Вы уточнить вопрос? Навскидку можно сказать - любые методы, которые не нарушают структурной целостности FastReport, могут быть вынесены в интерфейс. Если Вы объясните Ваше пожелание на примере, это гораздо сократит время имплементации.
В текущей версии frxCOM работает в Single Threading Appartment. Мы планируем перевести СОМ объекты в Multithreading Appartment в бета версии.
В текущей версии достучаться до внутренней структуры отчёта очень сложно, можно сказать что невозможно. Пожалуй, единственный способ - генерировать скрипт FastScript в прикладной программе, затем передавать скрипт в FastReport и уже скрипт может сам строить отчёт или, в простейшем случае, менять наименование таблиц и полей. Весьма трудоёмкий способ.
Мы постараемся реализовать доступ к внутренней структуре отчёта в ближайших версиях.
Как подключить свой user dataset?
На клиенте находится только клиентская часть системы. Компоненты BDE, ODBC и т.д. не являются обязательными.
Поэтому frxCOM ( в нашем случае ) должен работать независимо. Для этого получение данных и навигация по ним должны быть реализованы с помощью интерфейсов.
Например:
модуль интерфейсов
public interface IFrxDataBand{
.................
bool Eof();
void Exit();
void First();
void Init();
void Next();
void Prior();
}
В frxCOM в качестве датасетов для frxReport используется класс, дергающий методы интерфейса IFrxDataBand.
В нетовском проекте создается класс, реализующий этот интерфейс
public class RepTable : IFrxDataBand
{
bool Eof()
{
// Реализация интерфейса
}
.................
}
А может, решение задачи возможно, используя FastReport Server?.
Еще вопрос
1. Будут ли в комовскую библиотеку включены ActiveX дизайнера и Preview?
Этот вопрос связан с нашим корпоративным стандартом пользовательского интерфейса
UserDataSet можно подключить из скрипта или непосредственно в дизайнере.
Мы планируем на следующей неделе выложить новую версию с расширенным интерфейсом IfrxReport, которая позволит подлключать DataSet программно.
Спасибо. Теперь я понял Ваш вопрос. Добавление интерфейсов к frxDataBand и другим внутренним объектам FastReport мы планруем в отдалённой перспективе.
FastReport Server позиционруется для решения других задач, впрочем если Вам удастся использовать его для решения данной задачи, мы будем только рады.
ActiveX Preview компонент появится в ближайшее время. Мы планируем вынести Preview в отдельную DLL.
function ExternalDS.GetValue(Index: String): Variant;
begin
result := iDataBand.GetValue( Index );
end;
Для этого нужно импортить библиотеку типов, описанных в нетовском проекте интерфейсов.
Аналогично перекрываются остальные методы базового класса(их немного по сравнению с борландовским TDataSet), используемые в FastReport.
1. Пробегаем по всем объектам
2. Получаем TStrings(TfrxMemoView(myCurrentView).Memo) - коллекцию строк Expr для анализа.
3. Парсим выражение, используя как основу код процедуры
ExpandVariables(var Expr: String);
Находим переменную:
S := frxGetBrackedVariable(Expr, '', i, j);
4. Повторяем п.п. 2-3 для тэгов и скрипта.
Для поиска ошибок:
В блоке try ... except
вызываем функцию CalcAndFormat(m, S), где m - это TfrxMemoView.
При генерации исключений добавляем S в список ошибочных переменных.
Если m = nil,
тогда вызываем метод fReport.Calc(S);
Хотелось узнать, насколько далеко FastReport 3.net на данный момент ушел от "ранней альфы". Планируется ли на ближайшее время выпуск следующей стабильной версии?
На данный момент и "ранняя альфа" неплохо у меня работает и я бы хотел ее начать использовать в своих проектах уже сейчас. Реально ли стать пользователем на данный момент или выпуск коммерческого релиза не планируется до окончания тестинга?
Так же хотелось узнать, планируется ли создание компонентов для web-отчетов на основе FastReport 3.net.
Пока столкнулся со следующими проблемами (в порядке критичности для меня):
1. У меня прокет базируется на ASP.NET, поэтому обнаружилась следующая ошибка, которой не наблюдается в WinForms:
TfrxReportClass frx = new TfrxReportClass();
TfrxUserDataSetClass DataSet = new TfrxUserDataSetClass();
//DataSet.UserName = "NewDataSet"; - в альфе работало
// Следующие строки работать в бете под ASP.NET не желают
string ds = DataSet.Name;
DataSet.UserName = "NewDataSet";
Чтобы воспроизвести ошибку, достаточно создать WebApplication и вставить на Page_Load вышеуказанный код.
2. Экспорт в BMP происходит при 96 dpi. Это крайне мало. Для распечатки документов требуется 300 dpi.
3. При экспорте в BMP установка LeftMargin не дает желаемого эффекта - отчет не только не сдвигается, но и с правой стороны появляется часть отчета (задвоение изображения).
4. При попытке экспорта в HTML изображение баркода не сохранилось на диск.
5. При экспорте в PDF изображение баркода размытое. Боюсь, что сканер такой баркод не прочитает.
6. Если будет реализован экспорт в PNG - это будет большим плюсом, так как формат более экономичный, чем BMP.
Жду откликов.
Решение первых трех проблем достаточно критично для меня, так как очень хочется продолжить работать на вашем продукте, но заказчикам это объяснить сложно - им нужен результат.
Жду также сообщения о ценовой политике относительно российских клиентов или хотя бы сроки ее утверждения.
С уважением,
Антон
В версии trial2 свойство UserName переименовано в Name. Скорее всего это является причиной ошибки.
Установка количества dpi для экспорта будет добавлена в следующей версии. Очень возможно, что в траильной версии разрешения более 96 dpi будут отключены.
Спасибо за отзывы, Ваши пожелания направлены разработчику, ответственному за экспорт.
С уважением
DataSet.Name = "NewDataSet";
Я привел строку string ds = DataSet.Name; потому-что даже при обращении к ней уже выбрасывается исключение.
Привожу полный текст:
Server Error in '/WebApplication1' Application.
QueryInterface for interface FastReport.IfrxUserDataSetAggregate failed.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidCastException: QueryInterface for interface FastReport.IfrxUserDataSetAggregate failed.
Source Error:
Line 28: DataSet = new TfrxUserDataSetClass();
Line 29: //DataSet. UserName = "NewDataSet";
Line 30: string ds = DataSet.Name;
Line 31: DataSet.Name = "NewDataSet";
Source File: c:\inetpub\wwwroot\webapplication1\webform1.aspx.cs Line: 30
Stack Trace:
[InvalidCastException: QueryInterface for interface FastReport.IfrxUserDataSetAggregate failed.]
FastReport.TfrxUserDataSetClass.get_Name() +0
WebApplication1.WebForm1.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\webapplication1\webform1.aspx.cs:30
System.Web.UI.Control.OnLoad(EventArgs e)
System.Web.UI.Control.LoadRecursive()
System.Web.UI.Page.ProcessRequestMain()
Version Information: Microsoft .NET Framework Version:1.1.4322.2032; ASP.NET Version:1.1.4322.2032
MasterData1.Visible := <myDataset."MyField"> > some_value
http://fast-report.com/pbc_download/frx3com_trial2.exe
Изменения:
1. Исправлена бага при работе под ASP.NET
2. Добавлены два экспорта: TIFF и JPEG
3. Добавлены параметры для всех экспортов, кроме экспорта в txt.
4. Базируется на FastReport 3.14
5. Багофиксы
6. Добавлены новые баги
хотелось бы воспроизвести пример из документации
я пока дальше
а дальше не знаю как получить указатели на обьекты, которые лежат на странице
В версии Beta2 - можно получить доступ только к структуре репорта, а в версии Beta3, которая сейчас на подходе, уже кое что можно.
Ещё нет обёрток для COM объектов, введённых в версию Beta3, поэтому демонстрационная программа напрямую общается с COM сервером. Приблизительно так выглядит вышеприведенный пример:
Поскольку объект Report наследован от TfrxComponent, то можно получить интерфейс на TfrxComponent. В свою очередь, TfrxComponent имеет свойство ObjectsCount и метод GetObject, с помощью которых можно получить дочерние объекты класса TfrxReport. Далее можно анализировать свойство BaseName у дочерних объектов и в зависимости от типа объекта запрашивать соответсвующий интерфейс.
Конечно, это весьма громоздко, поэтому в последующих версиях рутинные операции будут реализованы в обёртке.
1. А когда выйдет примерно beta3?
2. Нельзя ли уменьшить размер COM dll. А то 4.5 мегобайта - мне кажется многовато!
Вышла сегодня:
http://fast-report.com/pbc_download/frx3com_trial3.exe
Уменьшили. Сейчас 2.75 Мб.
PS: В beta3 уже VC6 собрали, неплохо бы еще и VC6 проектик класть
когда появится новая версия
ждем
а то наблюдается какой то перерывчик