Rdlc: проблемы с передачей объектов в пользовательскую сборку в .Net 4

До недавнего времени мы использовали ReportViewer 9.0 в среде .Net 3.5. Все наши отчеты используют бизнес-объекты в качестве источника данных и обрабатываются локально.

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

=reporting.ReportFunction.ValueOf(Fields!Self.Value, "sometext")

При переходе на ReportViewer 11.0 в среде .Net 4 мы столкнулись с проблемами с вышеупомянутой конструкцией. Любое обычное свойство бизнес-объектов может быть передано таким функциям, как ValueOf, что даст правильные результаты. Но использование выражения, подобного тому, что с Self, приводит к ужасному #Error в результирующем отчете; ValueOf никогда не вызывается с использованием свойства Self.

Эта функция сломана? Или это вопрос безопасности? Кто-нибудь знает, можно ли и как передать весь объект пользовательской сборке с помощью ReportViewer 11.0 и .Net 4? Предложение в Как для отправки параметра List‹string› из файла rdlc в статический метод в сборке клиента для передачи свойства Fields, похоже, не работает.

Любая помощь будет оценена. Заранее спасибо, Ян.


person KoruNL    schedule 29.04.2014    source источник


Ответы (1)


Как оказалось, в .Net 4 отчет по умолчанию выполняется в другом домене приложения. .Net Remoting используется для передачи данных из текущего домена приложения на «другую сторону». Для связи объектов с .Net Remoting эти объекты должны быть сериализуемыми.

Добавление атрибута [Serializable] к классам и свойствам в моем приложении решило проблему #Error.

См. также этот сайт.

person KoruNL    schedule 06.05.2014