Reporting Services rapporten verversen vanuit een SSIS package
Een veel gehoorde wens bij gebruikers van Reporting Services is het verversen van rapporten op het moment dat er nieuwe gegevens beschikbaar zijn. Het opzetten van snapshots voor dergelijke rapporten, is niet altijd een optie omdat je niet altijd weet wanneer de nieuwe gegevens beschikbaar zijn. Omdat de nieuwe gegevens vaak met behulp van Integration Services packages worden klaargezet, zou het erg mooi zijn wanneer je het verversen van rapport snapshots zou kunnen initiëren vanuit een SSIS package. En met slechts een klein beetje .NET code, is dat mogelijk! Het voorbeeld package wat in dit artikel wordt geconstrueerd, kun je hier downloaden. Let op dat dit voorbeeld is gemaakt voor Reporting Services 2008 R2 in SharePoint integrated mode. Het voorbeeld is eenvoudig aan te passen naar een native mode omgeving of een 2005 of 2008 omgeving. Het dient slechts als voorbeeld!
Als je gebruik wilt maken van het vanuit een SSIS package verversen van report snapshots, zet je als eerste van één of meer rapporten de Data Refresh Options op Use snapshot data. Vervolgens maak je geen schedule aan voor de snapshot(s), maar je maakt alleen eenmalig een snapshot aan bij het verlaten van de pagina.
In een SSIS package neem je vervolgens een script task op. In de Script Task Editor klik je op Edit Script… om de benodigde code te gaan schrijven. In de Project Explorer klik je vervolgens met rechts op web references en vervolgens op Add Web Reference…
In de Add Web Reference dialoog die nu verschijnt, geef je URL op van het ReportService 2010 management endpoint van de Reporting Services web service. Je verkrijgt deze URL door de URL van de web service uit te breiden met ReportService2010.asmx (voor SQL Server 2008 en ouder, ReportService2005.asmx gebruiken). De URL van de web service kun je achterhalen via de Reporting Services Configuration Manager.
Het communiceren met de web service om te achterhalen welke diensten deze allemaal verleent, duurt enige tijd! Zodra de dialoog de gevonden diensten toont, geef je de web reference een naam, bijv. ReportService en klik je op Add Reference.
In de code moet je nu als eerste een using statement opnemen om de diensten van de zojuist toegevoegde web service te kunnen gebruiken. Hoe het using statement wordt opgebouwd, heb ik in onderstaande figuur proberen te illustreren. Je neemt als eerste de namespace van de script task. Omdat dit een gegenereerde namespace is, ziet die er wat raar uit. Daar voeg je de naam aan toe die je aan de web service referentie hebt gegeven.
Nu is het tijd voor de daadwerkelijke code die je nodig hebt om de rapporten die geconfigureerd zijn met een snapshot te refreshen. De volgende code doet dat (het voorbeeld is gemaakt voor een Reporting Services 2008 R2 omgeving gebruik makend van het ReportingService2010 management endpoint):
Deze code neem je als code binnen de Main methode van de script task. Als je nu deze script task uitvoert, worden alle rapporten in de gebruikte SSRS instance die geconfigureerd zijn met een snapshot ververst.
Een SSIS package met bovenstaande voorbeeld code, vind je hier. Let op dat dit voorbeeld is gemaakt voor een Reporting Services 2008 R2 in SharePoint integrated mode omgeving.