Страница 1 из 1

Вопрос по API класса StiReport

Добавлено: 29 сен 2016, 05:19
antonio

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

    
public partial class StiReport
{
...
public void ExportDocument(StiExportFormat exportFormat, StiExportService exportService, Stream stream, StiExportSettings settings)
Наличие параметра StiExportService exportService, наводит на мысль, что я могу создать наследника этого класса и, переопределив виртуальный метод StiExportService.ExportTo(StiReport report, Stream stream, StiExportSettings settings) реализовать свой кастомный алгоритм экспорта.
Так, логично?

Дальше:

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

                switch (exportFormat)
                { ...
                    case StiExportFormat.RtfTable:
                        if (exportService != null && (!(exportService is StiRtfExportService)))
                            throw new ArgumentException("The incorrect type of the 'exportService' argument is used. The StiExportService must have same type of export as declared in exportFormat argument.");
Для каждого формата, переопределённый сервис должен быть наследником сервиса соответствующего типа.

Непонятно зачем, но ok - делаем кастомный сервис - наследник StiRtfExportService.

Но дальше следует прекрасное:

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

                        var rtf1service = exportService as StiRtfExportService;
                        if (rtf1service == null) rtf1service = new StiRtfExportService();

                        rtf1service.ExportRtf(this, stream, settings as StiRtfExportSettings);
ExportRtf - невиртуальный метод.
Т.е. что бы я не передал в качестве сервиса экспорта, пойдёт выполнение кода из стандартного StiRtfExportService.ExportRtf()

И так - абсолютно для каждого формата.

Вопрос 1 - в чём смысл этого метода, если передаваемый сервис экспорта игнорируется вызовом НЕвиртуального метода базового класса?
Вопрос 2 - как мне обойти это ограничение и таки использовать свой сервис экспорта?

Re: Вопрос по API класса StiReport

Добавлено: 29 сен 2016, 13:56
HighAley
Здравствуйте.

У нас есть пример проекта по созданию своего экспорта.
Надеюсь он даст ответы на ваши вопросы.

Спасибо.

Re: Вопрос по API класса StiReport

Добавлено: 29 сен 2016, 16:10
antonio
Дам уточнение по второму вопросу.

Моя задача - не добавить пункт меню в дизайнере отчётов, а переопределить алгоритм экспорта конкретного формата - RtfTable, поскольку ваш алгоритм работает неудовлетворительно.
Ваш API это позволяет. StiReport.ExportDocument принимает на вход StiExportService, который я реализовал.

Но внутри этого метода, очевидно, присутствует ошибка - передаваемый сервис игнорируется.


Ответьте, пожалуйста, как мне решить задачу и что Вы намерены делать с собственной ошибкой?

Re: Вопрос по API класса StiReport

Добавлено: 30 сен 2016, 14:14
HighAley
Здравствуйте.

На данный момент не было необходимости делать подобные переопределение.
Мы посмотрим что можно для вас сделать.
Не могли бы вы уточнить что именно не устраивает вас в текущем экспорте?
И как вы хотите его улучшить? Возможно мы можем сделать это с нашей стороны.

Спасибо.