2009-04-28 6 views
4

Wie liest man SQL Server Report History programmatisch?

Da SQL Server Reporting Services einen Scheduler enthält, mit dem die Ausführung von SQL-Berichten geplant werden kann, weiß jemand einen Weg zu programmgesteuertem Lesen (über C#) den Verlauf eines Berichts vom Berichtsserver (und möglicherweise die Ergebnisse des Berichts abrufen)?

Nach etwas mehr Graben sieht es so aus, als müsste ich eine WSDL für den Berichtsserver generieren und dann mit dem ReportingService-Objekt auf Informationen zugreifen - hat jemand das schon einmal gemacht (mit 2008) und kann einige Hinweise geben?

Hinweis: sieht aus wie (nach SQL 2008 Bücher online) die WSDL-Adresse für SQL 2008 ist:

http://server/reportserver/ReportService2005.asmx?wsdl 

Wenn ich diese Arbeit bekommen, werde ich eine Antwort post up mit den grundlegenden Schritten es zu implementieren :) Es ist ein wenig verwirrend, da die Dokumentation eine Mischung aus SQL 2000 und SQL 2005 Referenzen ist!

+0

+1 ich nicht einmal wußte, verwenden können, dass dies überhaupt möglich war. – Sung

Antwort

2

OK, also habe ich tatsächlich herausgefunden, wie man diese scheinbar unmögliche Aufgabe bewerkstelligt.

Bevor ich beginne, lassen Sie mich einfach sagen, wenn Sie mit SQL Server Reporting Services 2008 (SSRS 08) und haben (dh Sie haben keine Wahl) etwas wie Basic Auth zu verwenden, finden Sie nur eine Welt der Verletzung mit den WCF-basierten Service Stubs & IIS. Ich werde später über die Konfiguration bloggen.

Die kurze Antwort lautet wie folgt:

  • Connect (zB neue ReportingService2005() oder ReportingService2005SoapClient())

Hinweis: Es ist einfacher, den alten (pre-WCF) ASMX-Dienst zu verwenden , aber nicht unmöglich, die neue CF-Version zu verwenden. Die Authentifizierung erfordert einige Konfigurationsschritte. Es gibt auch einige leichte syntaktische Änderungen zwischen den Versionen.

  • Suchen Sie die Berichtshistorie, nach der Sie suchen, z. ReportHistorySnapshot [] Verlauf = reportServer.ListReportHistory (@ "/ Reports/MyHandyReport");
  • die HistoryID Erhalten von welcher Schnappschuss Sie wollen (aus dem ListHistoryReport zurückgegeben)
  • Nun, verwenden Sie einen Report den historischen Bericht zu machen, so wie sonst mit anderen Berichten, zB:

    Report rv = new ReportViewer();
    rv.ProcessingMode = ProcessingMode.Remote;
    rv.ServerReport.ReportServerUrl = neuer Uri (@ "http://localhost/reportserver");
    rv.ServerReport.ReportPath = @ "/ Reports/MyHandyReport";
    rv.ServerReport.HistoryId = historyId;
    //..snip
    byte [] Bytes = rv.ServerReport.Render ("Excel", null, out mimeType, out-Codierung, out-Erweiterung, out streamids, out-Warnungen);

Hinweis: Sie auch den zweiten WCF Web Service (? ReportExecution2005.asmx wsdl) als auch für die Berichtsausführung

1

Nun, es hat soap und Erweiterbarkeit API, vielleicht können sie verwendet werden?

+0

Yup, ich war eigentlich auf diesem Weg :) Sieht nicht so aus, als hätte es sich zwischen 2005 und 2008 verändert – RobS

Verwandte Themen