2009-09-15 12 views
12

Czy można utworzyć niestandardowy interfejs sieci Web do uruchamiania raportów SSRS?Usługa SSRS z niestandardowym interfejsem WWW

Mamy istniejący interfejs sieciowy dla różnych przeglądarek do zbierania danych wejściowych do raportowania (dla platformy innej niż SSRS), który byłby , taki jak, aby zobaczyć, jak kontynuować z SSRS. Obejmuje on kontrolki interfejsu użytkownika specyficzne dla danej domeny, które zostały już opracowane w firmie i nic nie jest tak bliskie OOTB z SSRS.

Nie musimy wykonywać dynamicznego renderowania elementów sterujących typu - choć wyobrażam sobie, że RDL może nam powiedzieć, jakie parametry (i ich typ) raport ma - ale potrzebujemy więcej niż to, co nam daje Report Manager.

Zasadniczo chcielibyśmy spersonalizować/zastąpić interfejs użytkownika zbierający dane wejściowe wygenerowany przez Menedżera raportów. Potrzebujemy także odrobiny brandingu. Czy byłoby łatwiej złapać Report Manager w ogóle (zewnętrznie mam na myśli) i interfejs bezpośrednio z usługą SSRS Web Service za pośrednictwem naszej własnej aplikacji ASP.NET?

Jestem nowy w terenie zgłaszania i nie mogę znaleźć żadnych informacji na ten temat. Korzystamy z usług raportowania SQL Server 2005.

+0

Cześć, jak się skończył z tym, staram się zrobić coś podobnego, ale musi muszę dostarczyć tenantId w kodzie tyłu inaczej będą narażeni na wyciek zabezpieczonych danych do uwierzytelnionych ale niewłaściwych klientów, jakieś pomysły ? dzięki – Mathematics

Odpowiedz

9

Tak, jest to możliwe. Wdrożyliśmy rozwiązanie podobne do tego ponad 2 lata temu, kiedy byliśmy zdyskredytowani wyborem parametru, który przyszedł OOTB.

Zasadniczo mamy niestandardową aplikację ASP.NET, z którą użytkownicy korzystają. Po załadowaniu pierwszej strony wyświetla listę raportów dostępnych dla tego użytkownika (komunikacja z aplikacji ASP.NET do usługi SSRS za pośrednictwem usług sieciowych i personifikacja tożsamości, aby lista została zabezpieczona). Będziesz musiał użyć protokołu Kerberos, jeśli niestandardowa aplikacja ASP.NET znajduje się na innym serwerze niż serwer raportów.

Po wybraniu raportu przez użytkownika wyświetlany jest ekran wyboru parametru (nadal w niestandardowej aplikacji ASP.NET).Kiedy wybierają swoje parametry i klikną "Wygeneruj raport", niektóre JavaScript dodają znaczniki wejściowe dla każdego parametru do formularza HTML w locie (ukryte przed użytkownikiem), a następnie wykonują HTTP POST na serwerze WWW SSRS.

Następnie używamy przeglądarki raportów OOTB do wyświetlania raportu, ale jest on hostowany w ramce, dzięki czemu górna część ekranu pozwala użytkownikowi ograniczyć się do niestandardowej aplikacji internetowej. To pozwala im szybko wrócić i zmienić parametry.

Zastosowaliśmy takie podejście, ponieważ mamy globalną organizację, ale nasza aplikacja była hostowana centralnie - chcieliśmy, aby wydajność była jak najlepsza dla wszystkich użytkowników. Okazało się, że Report Viewer był całkiem niezły, ale wybór OOTB parametru, który pojawił się w OOTB, był okropny w przypadku połączeń z dużym opóźnieniem - wiele wiadomości zwrotnych i zbyt duży ruch przesyłany.

Jeszcze jedna sztuczka - w raporcie uczyniliśmy parametry "ukryte", aby parametry nie były wyświetlane w przeglądarce raportów.

Edycja: Zrobiliśmy to w sposób zamierzony z SSRS 2005 i niedawno uaktualniliśmy do wersji SSRS 2008 z minimalnymi problemami.

+0

Tylko wyjaśnić: formularz, który wystawia zgłoszenie HTTP POST, jest po prostu obiektem 'iframe'? Czy były jakieś zasoby, które pomogły ci to rozgryźć (książki, dokumenty itp.)? Myślałem, że warstwa usługi sieci Web SSRS jest bardziej "standardowym" sposobem generowania raportów z niestandardowej aplikacji, w przeciwieństwie do HTTP POST. Interesujące znać tę sztuczkę. – JPot

+1

Oto artykuł MSDN na temat dostępu do raportów za pośrednictwem parametrów URL - http://msdn.microsoft.com/en-us/library/ms155391.aspx Powodem, dla którego skończyliśmy robić HTTP POST (te same polecenia mają zastosowanie) było uniknięcie problemy z wieloma wybranymi parametrami i limitem długości URL 1024 (?). Właśnie sprawdziłem podwójnie, a nasz formularz znajduje się w innej ukrytej ramce, więc celuje w jego własną ramkę, zmieniając rozmiar ramek po opublikowaniu formularza. Korzystamy z usług internetowych, aby uzyskać listę raportów dostępnych dla użytkownika i użyć rodzimej przeglądarki raportów, aby wyświetlić raport. Użytkownik może wtedy normalnie współdziałać z nim. – Harv

3

To, co zrobiliśmy, to zbudowanie interfejsu użytkownika w celu zbierania kryteriów i formatowania danych (PDF, XLS itp.) I użycia SSRS Web Services do wywoływania raportów.

Pozwoliło nam to zrobić dokładnie to, o czym mówimy, jeśli chodzi o używanie własnego identyfikatora użytkownika przy tworzeniu raportów.

Zasadniczo przekazujesz nazwę RDL i zbiór parametrów raportu do usługi internetowej, a ona zwróci kod HTML (lub inny format określony przez Ciebie).

Niektóre pułapek obejmują konieczności re-write URL podczas korzystania SSR za kolumny sortowania i konieczności zakładania własnych typów MIME, jeśli chcesz obsługiwać PDF/DOC/XLS/etc ...

+0

Czy ten interfejs był względnie statyczny? Czy na przykład kontrolki wejściowe były "zakodowane na sztywno" lub tworzone dynamicznie w oparciu o parametry raportu? Ciekawe ... – JPot

+1

Każdy raport miał swój własny zestaw kontroli wejść (niektóre raporty wymagają więcej kryteriów niż inne). Zrobiliśmy więc niestandardową kontrolę, która zarządzała całą komunikacją między każdą niestandardową stroną aspx a SSRS. W ten sposób wszystko, co było konieczne do stworzenia raportu, to definicja danych wejściowych, zbieranie danych wejściowych i przekazywanie tych danych do naszego niestandardowego Reporting Services Control. Każdy z naszych raportów był nową stroną aspx z własnym zestawem kontroli wprowadzania danych. Niektóre kontrolki wprowadzania były pokazywane/ukrywane w zależności od praw dostępu i konfiguracji użytkowników. –

4

Jeśli rozumiem poprawnie, będziesz chciał użyć ReportViewer do renderowania raportów.

można zaimplementować wejście zebranie w każdym razie, a potem po prostu przejść wejść do sprawozdań jako parametry:

//the report classes are in the namespace: Microsoft.Reporting.WebForms 
Collection<ReportParameter> paramList = new Collection<ReportParameter>(); 
string reportPath = ApplicationInfo.ScorecardReportPath; 
paramList.Add(new ReportParameter("UID", "5")); 

ReportViewer1.ProcessingMode = ProcessingMode.Remote; 
ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://servername/ReportServer"); 
ReportViewer1.ServerReport.ReportPath = reportPath; 
ReportViewer1.ServerReport.SetParameters(paramList); 
ReportViewer1.ServerReport.Refresh(); 

ReportViewer jest kontrolką można upuścić na swojej stronie:

<rsweb:ReportViewer id="ReportViewer1" runat="server" documentmapwidth="175px" 
font-names="Verdana" font-size="8pt" promptareacollapsed="true" width="100%" 
zoommode="Percent" zoompercent="100"/> 

Użyłem tego podejścia, aby zagnieździć reportviewer wewnątrz strony zawartej na stronie wzorcowej. Umożliwia wyświetlanie menu/nagłówka/stopki.