|
|
|||||||||||||||||||||||||||||
|
Учим MS SQL Server Reporting Services 2008 R2 показывать HTML в отчетахИсточник: habrahabr Cyr
ПроблемаНедавно столкнулся с необходимостью показать в отчете SSRS 2008 R2 HTML-таблицы, хранящиеся в базе данных. И здесь на сцену статисты выносят заботливо подготовленные "грабли". Все дело в том, что Report Manager в SSRS 2008 R2 поддерживает только ограниченное количество тегов HTML, и табличные в их число не входят. Согласно официальной документации, поддерживаются только следующие теги:
Список атрибутов CSS также сильно урезан. После продолжительного поиска в интернете, стало понятно, что ни один из вариантов, предлагаемых сообществом разработчиков, меня не устроит.
ИсследованиеВарианты предлагались следующие:
В одном из обсуждений натолкнулся на подсказку - Javascript на стороне клиента. Готового решения не было. Начал с попыток проанализировать какой код выполняется на стороне клиента при отображении отчета. Подсмотрел в код отчета в браузере и нашел внедренный скрипт ReportingServices.js: <script language="JScript" src="/Reports_SQLEXPRESS/js/ReportingServices.js" type="text/Javascript"></script> Сам скрипт у меня на сервере лежал здесь: c:\Program Files\Microsoft SQL Server\MSRS10_50.SQLEXPRESS\Reporting Services\ReportManager\js\ReportingServices.js Нашел пару статей на тему Javascript-инъекции с помощью данного скрипта, но основная проблема была в том, что мои модификации выполнялись только один раз при отображении первой страницы отчета, и при переходе на следующие страницы интерфейсные элементы уже не перерисовывались (AJAX). Попытки глубже разобраться в принципах работы SSRS продолжились изучением фрагментов кода основных DLL-ей сервера с помощью DevExtras CodeReflect и препарированием отчетов в IE9 developer tool/Opera Dragonfly. В результате нашел следующее:
function pageLoad(sender, args) { //здесь наш код, например alert("Работает!"); } Вставляю данную конструкцию в самое начало скрипта ReportingServices.js. Работает!
РешениеСобственно, дальше уже головоломка собралась и получилось следующее решение:
А теперь примерыТак по-умолчанию показывается поле ("None - Plain text only"): Так показывает таблицы, если тип разметки поставить в "HTML - Interpret HTML tags as styles": Мой вариант:
Про/контра такого решенияДостоинства:
Недостатки:
ВыводыВот так, с помощью нехитрых приспособлений, можно научить SSRS показывать HTML… Но ЗАЧЕМ?! Сотни постов, от растерянных до гневных, переполняют интернеты из-за такой мелочи. Даже BIRT это уже давно умеет, а новейшая версия SSRS2012 еще нет (пруфлинк: http://technet.microsoft.com/en-us/library/ff519562.aspx). Есть мысли, что MS реализовала показ HTML в таком ограниченном виде чтобы не пострадала безопасность/стабильность системы отчетности, но похоже, что все альтернативные решения напоминают пресловутый "троллейбус". UPD: Ссылки по теме
|
|