Веб экспорт и печать в Asp.net
Привет техподдержка, а Александру персональный пламенный привет!
Прежде всего спасибо за ваше бравое дело, которое живет
Имею след проблему:
У мну есть страница, которая динамически подгружает нужные UserControls в зависимости от параметров URL.
Один из этих контролов содержит WebReport. При попытке экпорта или печати этого отчета, после постбека URL в риквесте теряет параметры.
Похоже, что постбек при экпорте не предусмотрен, поскольку идет редирект с параметрами, что есть криво ИМХО.
Посмотрев код исходников, нашел интересную штуку:
Как результат такого выполнения, после нажатия кнопки экпорта или печати я получаю загруженными на странице совсем не те юзерконтролы которые мне нужны.
Если идти таким путем, то по идее надо более ровно парсить уже существующие параметры, хотя я ожидаю постбек, я идет редирект.
Я понимаю, почему так сделано, но все равно не совсем верно. Ведь после такого редиректа я потеряю значения всех контролов которые были проиницилизированы на странице пользователем вне отчета. Я там еще нашел закомментированный код с попытками дернуть экспорт в новом окне. Как вариант могу подкинуть идею попробовать использовать IFRAME, чтобы не хлопать окнами при формирования Response c результатом экпорта.
Как пример, было:
Прежде всего спасибо за ваше бравое дело, которое живет
Имею след проблему:
У мну есть страница, которая динамически подгружает нужные UserControls в зависимости от параметров URL.
Один из этих контролов содержит WebReport. При попытке экпорта или печати этого отчета, после постбека URL в риквесте теряет параметры.
Похоже, что постбек при экпорте не предусмотрен, поскольку идет редирект с параметрами, что есть криво ИМХО.
Посмотрев код исходников, нашел интересную штуку:
private string GetReponseRedirect(string guid)
{
return this.Page.Request.CurrentExecutionFilePath + "?" + FExportPrefix + "=" + guid;
}
А как же быть с остальными параметрами, если WebReport пусть даже при редиректе теряет уже существоващие параметры?Как результат такого выполнения, после нажатия кнопки экпорта или печати я получаю загруженными на странице совсем не те юзерконтролы которые мне нужны.
Если идти таким путем, то по идее надо более ровно парсить уже существующие параметры, хотя я ожидаю постбек, я идет редирект.
Я понимаю, почему так сделано, но все равно не совсем верно. Ведь после такого редиректа я потеряю значения всех контролов которые были проиницилизированы на странице пользователем вне отчета. Я там еще нашел закомментированный код с попытками дернуть экспорт в новом окне. Как вариант могу подкинуть идею попробовать использовать IFRAME, чтобы не хлопать окнами при формирования Response c результатом экпорта.
Как пример, было:
http://localhost:88/Corporate/Corporate.aspx?type=statistics&ID=e5ed68b2-3c11-481e-aff6-154a7d996874
После экспорта стало:
http://localhost:88/Corporate/Corporate.aspx?frxexp=5cda970c-1525-4646-880e-787b803f3244&ID=e5ed68b2-3c11-481e-aff6-154a7d996874
Как результат параметр type канул в лету
Комментарии
Вынес реализацию получения результатов экпорта в отдельный HttpHandler и добавил пропертю в WebExportItem, поскольку мне кажется, что респонсу все-таки надо указывать ContentType. Это решает все путаницы с параметрами и т.д., поскольку все равно обмен идет через Кеш вебсервера.
Регистрируем хандлер в webconfig: Добавляем указание ContentType во все методы экпорта, например для PDF: И меняем код метода ResponseExport на что-то типа такого: Остается повесить JavaScript на кнопку экпорта с открытием нового окошка браузера в который толкнуть урл на хендлер с параметром гуида отчета.
И еще. Поотпадали картинки кнопок на тулбаре, если WebReport кинуть на UserControl.
Глянул код одним глазом, думаю стоит сделать через WebResources. Бегло почитать можно здесь.
1. Загрузка происходит через отдельный HttpHandler
2. Устранены проблемы с параметрами URL при экпорте, я этот метод просто выкинул потому что п.1.
3. Правильно формируется ContentType для стрима с экпортом и стрим содержит правильные хидеры с именем файла и другими атрибутами.
4. Печать из тулбара открывается в новом окне (popup), загружая Acrobat Reader ActiveX.
5. Кнопки тулбара уехали с файловой системы в WebResources. Если ButtonPath не указан тянет из ресурсов библиотеки.
Жду фидбека, мне эти изменения критичны.
Спасибо.
Имею след код, который припарит отчет и толкает в него параметры
При первой загрузке отчсета все шикарно, рипорт припарится, параметры в событии StartReport передаются.
При экспорте или печати все тоже работает правильно, поскольку выполняется вот это из ваших сорцов:
При навигации кнопками на тулбаре, получаю пустой отчет, что есть естесственно, состояния ведь нет.
Я мог бы конечно заприпарить отчет в постбеке в Page_Load опять, но к тому моменту у меня еще нет значений моих параметров из моих контролов. Как мне быть в такой ситуации?
По идее, в этом случае мое дело обеспечить только передачу внешних параметров в StartReport и если навигация делатся средствами тулбара, вьюбвер сам должен заботится о запуске.
Спасибо!
Не подымается из кеша экземляр отрендереного отчета.
После постебека меняется ReportGuid, поскольку почему-то он не сохраняется во вьюстейте, соответсвенно нет такого ключа в кеше.
Разбираюсь почему, думаю это связанно с тем, что я гружу юзерконтрол на котором лежит отчет динамически.
Все гут, претензии снимаются
Надо править в консерватории
Прежде всего спасибо за новую версию, которая 1.5.
Многое исправлено, за что всем респект, но проблему с печатью и экпортами так и не устранили. Все так же фастрипорт во время печати или экпортов пытается безапеляционно редиректить со своими параметрами на страницу, где лежит компонета отчета, абсолютно игнорируя пользовательские парамеры в URL.
Я уже предлагал вариант как исправить эту проблему раз и навсегда через HttpHandler.
Печать и экпорты так и не работают в моем проекте и на новой версии, приходится опять модифицировтаь и компилировть исходники.
Чтоб не быть голословным, скриншот в аттаче (В всплывшем окне - результат печати, вместо стрима с пдфом я получаю редирект на свою же страницу, потому как моя страница формируется динамически, как результатат парамеров в урле, загружая программно мои юзерконтролы. И я об этом писал выше, еще до релиза 1.5, см. мои квоты в этом сообщении)
Вопрос логичный, как исправить ситуацию?