Gyakran felmerülő üzleti igény - az SQL Server Reporting Services (SSRS) felhasználók körében (is) -, hogy az aktuális napi/heti/havi riportokat rögtön Excel-ben vagy PDF -ben kérik és lehetőség szerint e-mailben, hogy ne is kelljen "felmenni" a webes felületre, hogy futtassák vagy exportálják kedvükre a riportot.
A rossz megoldások között szerepel az, hogy az előzőleg kiexportált Excel-t vagy PDF-et elküldik a felhasználónak e-mailben. A fő probléma ezzel, hogy jellemzően nem kicsi dokumentumokról van szó, így hamar betelhet az ügyfél postafiókja, arról nem is beszélve, hogy adatbiztonság szempontjából is hagy kívánnivalót maga után.
Másik megoldás szokott lenni, hogy kiteszik a fájlokat egy fileshare-re, amely jóval optimálisabb, de nem kényelmes, mert oda is "fel kell menni".
A legjobb megoldás az lenne, ha a felhasználó e-mail-ben kapna egy olyan linket, amely-re ha rákattint, akkor a megfelelő paraméterekkel futtatott riport - Excel-ben vagy PDF-ben vagy igény szerinti formátumban - automatikusan letöltődik a felhasználó által beállított helyi mappába.
SSRS-ben ezt a funkciót ún. URL Access (URL-en keresztüli elérés) segítségével valósíthatjuk meg.
Mi az az SSRS URL Access?
Az SQL Server Reporting Services lehetőséget ad arra, hogy URL kéréseken keresztül különböző parancsokat küldjünk a riportszervernek.
A riport linkjét megfelelően paraméterezve tehát utasításokat küldhetünk a szervernek például a renderelés módjáról, vagy a riport formátumára vonatkozó beállításokról, de természetesen beágyazhatunk előre definiált futtatási riport paramétereket is, hogy csak a legfontosabbakat említsem.
URL Access szintaxis
rswebserviceurl
?
reportpath
[&prefix:param=value]...n]
Építsük fel az URL-ünket!
Kezdjük az rswebserviceurl-lel! Ez nem a riport szokásos elérési linkje, hanem az ún. Web Service URL, amelyet a Reporting Services Configuration Manager-ből érhetsz el:
Pl.: http://myserver:8080/ReportServer
(A myserver helyére értelemszerűen a saját szervered neve kell)
Ezt követően egy ? jel után a reportpath következik, itt a kipublikált riport elérési útját (és a nevét) kell megadnod pl. az alábbi példában a SalesReports mappában lévő SalesDataBySalesTerritories riportra hivatkozunk.
Pl.: http://myserver:8080/ReportServer?/SalesReports/SalesDataBySalesTerritories
Ezután pedig következhetnek a paraméterek.
[&prefix:param=value]...n]
A paramétereket egymástól &-jellel választjuk el.
A prefix-xel specifikálhatjuk, hogy milyen jellegű utasítást adunk.
rs: (Report Server Commands) vagy rv: (Report Viewer Web Part Commands) vagy rc: (HTML Viewer Commands).
Fontos, hogy ha nem használsz semmilyen prefix-et, akkor akkor a szerver úgy értelmezi, hogy azok a riport bemenő paraméterei.
Ezután következik a param=value, tehát paraméter és értékadás =-jellel.
Nézzünk konkrét példákat!
1) Szeretnénk, ha a SalesDataBySalesTerritories riportunkat egyből Excel-ben (.xlsx) kapnánk vissza, anélkül, hogy külön futtatnánk a riportot.
Ezt az &rs:Format=EXCELOPENXML utasítással tudjuk megtenni, ebben az esetben így néz ki a teljes link:
http://myserver:8080/ReportServer?/SalesReports/SalesDataBySalesTerritories&rs:Format=EXCELOPENXML
(Ne felejtsd el beírni a myserver helyére a saját szervered nevét, illetve a módosítani a riport elérési útvonalát!)
A linkre kattintva automatikusan Excel formátumban töltődik le a riport a felhasználó beállításainak megfelelő mappába.
2) PDF-et is hasonló módon generálhatunk
http://myserver:8080/ReportServer?/SalesReports/SalesDataBySalesTerritories&rs:Format=PDF
/További elérhető formátumok: HTML4.0, MHTML, IMAGE, WORDOPENXML (docx), CSV, XML, stb./
3) Van olyan eset is amikor az adatokkal tovább szeretnénk dolgozni, ezért a CSV formátum lenne a legmegfelelőbb. További igény szokott lenni például, hogy a file ne tartalmazza az oszlopneveket (rc:NoHeader) illetve legyen pontosvessző a köztes elválasztó (rc:FieldDelimiter). Ez a következőkép valósítható meg:
http://myserver:8080/ReportServer?/SalesReports/SalesDataBySalesTerritories&rs:Format=CSV&rc:NoHeader=True&rc:FieldDelimiter=;
4) Végezetül egy példa arra is, ha csak konkrét paraméterekkel futtatnánk a riportot. Ez jellemzően felmerül azokban az esetekben, ha egy Summary adat mögött van egy részletező riport és egy másik riportra mutató linket kell definiálni.
http://myserver:8080/ReportServer?/SalesReports/SalesDataBySalesTerritories&Company=431&WarehouseCode=17
Látható, hogy ebben az esetben nem használtunk prefix-et, mivel riport paramétereket állítottunk. Természetesen & jel után folytatható a paraméterezés ugyanúgy.
Számtalan további példát lehetne ebben a témakörben megemlíteni, én most egyre fókuszáltam. További paraméterezési lehetőségekről itt olvashatsz.