Так подумать, действительно у MS до сих пор не было своего собственного продукта для создания reports. Тем более странно, что CrystalReports давно стал синонимом тупика. Настолькo тупика, что ссли бы меня спросили месяца 3 тому, как быстрее и проще сделать reports для Web, я бы почти наверняка сказал бы - обычный asp.net. И в выборе data provider ты не ограничен, и layout - весь в твоих руках. Время разработки осталось? Кодируйте быстрее!
Но вот появились
Reporting Services - жизнь изменилась. Относительно data providers, то наконец, разрабочик report стал полноценным членом ассоциации Web developers: ado.net и для него стал родным и близким.Кстати заметим, что ADO.NET , конечно, включает и OLAP для Web based reports (aх, Crystal, ну впрямь тупик).
Layout - вообще для reports не совсем адекватно воспринимается Web-разработчиком. Report layout - это не совсем таблица,вернее разработчикам Reporting Services представляется, что в случае с reports, он проще и нет необходимости давать разработчику возмость доступа к коду самой страницы. Только design. Кодом report называют новый, XML-based язык - RDL: Report Definition Language. Как он обрабатывается в конечном итоге показываемую старницу - "тайна" одной из главных компонент RS - Report Processor. Он, в свою очередь, - часть Report Server: набор core-components, которые как за первичную обработку RDL, так и за практически всю остальную функциаональность продукта по части scheduling, delivery, delivery extension, rendering extension, data processing-extension etc.
Все эти компоненты вместе образуют "слой", называемым в документации
Report Server. Его задача - получив RDL на входе, обработать его (с помощью толькo что перечисленных служб) в HTML или , в общем, в то, что будет указано в Rendering Extension.
Еще один "слой" продукта образует
Report Manager. Он отвечает за конфигурацию reports: subscriptions, report parameters, secured access etc.
RS Components Access
Report Manger - это Web application,по умолчанию расположенная в ..Program FilesMicrosoft SQL ServerMSSQLReporting ServicesReport Manager. Она предоставляет UI , с помощью которого и осуществляются соответствующие операции конфигурирования. Default installation makes it with web alias - Reports, т.е. доступ к Report Manager, обычно, такой:
http://server/Reports
(Кстати, по каким-то непонятным причинам, в Report Manager Web application отсутствует default.xxx страница. Вместо этого, default installation конфигурирует IIS на home.aspx по умолчанию.)
Report Server - это Web-service с достаточно широким набором методов. Доступ к нему, может быть осуществлен или напрямую через URL, или через Web-reference. Во втором случае, это достаточно тривиально: методы, как методы, параметры не сложные. Как и ожидалось, используется SOAP. Вызывайте, но только никакого метода, похожего на GenerateReport(), там не найдется. А если бы и нашелся? В конце концов, Report Server должен как-то отобразить report в окне browser. SOAP method вряд-ли подходит для этого. Представьте себе это сами. Как именно вызвать такой SOAP method? Будь я на месте архитекторов Reporting Services, я бы предложил еще одну, дополнительную Web application, которая будет заниматься ислючительно этим - генерировать HTML из report definition (RDL). Такая аппликация существует. И называется она - (отгадайте, догадливые) - Report Processor. Разделение обязанностей между ними очень простое: Report Server отвечает за операции с reports в базе данных, все его методы обращаются к базе за различной информацией, уже ассоциированной с report, или добавляя к report разные элементы, properties.
Report Processor получает имя report, с одной стороны, и (за кулисами - из базы) его properties, с другой, и на основе этих двух, генерирует HTML. Доступ к Report Processor - это и есть известный в документации - URL access.
Выглядит это так:
http://server/reportserver?[/reportpath]&prefix:param=value[@prefix:param=value]...n]
Например : http://flex/reportserver?/everest/agencyReport
Пусть вас не смущает тот же адрес - и для Report Server, и для Report Processor - по сути вы запрашиваете ту самую, дополнительную Web application - Report Processor.
Все бы ничего, но у report есть параметры. Если бы Report Processor имел только URL access, запрос того же самого report с другими параметрами сводился бы каждый раз к изменeнию URL. Это не удобно (хотя тоже возможно)- полный refresh, как ни как. Да и что делать в случае, если report нужно разместить hosted в другой странице? Среди samples, поставляемых с Repoting Services, есть ответ на эту "проблему" - Report Viewer. Не совсем, правда, понятно, почему он удостоился только места в samples, когда внешний вид Report Preview из MS Studio Report Designer от него не отличим, а чего он делает внутри, можно только предположить, что именно его-то разработчики и вынесли в samples.
Но, как бы там не было, он отлично
Читать далее...