14. July 2011: Warum kompliziert...
Es gibt Tage, an denen man die Welt nicht mehr versteht. Letztens war einer dieser Tage. Ich programmierte ein kleines Tool um Labels auf einem Zebra Drucker auszugeben. Dachte ich Anfangs noch das die Erstellung des Layouts in ZPL die größte Herausforderung werden würde, wurde ich alsbald eines besseren belehrt.
ZPL – das sei an dieser Stelle ausdrücklich erwähnt – ist eine schnörkellose, schnell erlernbare Beschreibungssprache. Hat man sich erst einmal an die Syntax gewöhnt, kann man in kürzester Zeit ansprechende Layouts erstellen. Das man die Anweisungen in Klartext via TCP/IP direkt an den Drucker übergeben kann, macht es auch sehr angenehm die Schnittstelle in eigenen Programmen zu implementieren – ganz gleich welche Sprache man benutzt.
So verwundert es im Nachhinein nicht wirklich, dass dies nicht die befürchtete Herausforderung darstellte. Nun sollte das Tool noch Daten aus einem MS SQL Server laden um diese in das Label-Layout einzufügen. Es ist nicht mein erstes Programm, dass Daten aus einem MS SQL Server laden sollte – und um die Dinge noch einfachere zu machen wählte ich VB.NET als meine Programmiersprache. Doch hier begann die Verzweiflung zuzuschlagen…
Da ich keinen direkten Zugriff auf die Datenbank hatte, musste ich den Umweg über die SSRS gehen. Naiv wie ich bin, ging ich davon aus das dies kein Problem darstellen sollte – gibt es doch entsprechende Objekte und Klassen im .NET Framework. Und siehe da: Man kann sogar mit wenigen Mausklick eine Referenz auf einen SSRS Server anlegen (wenn man die URL kennt und manuell entsprechend aufbereitet):
Aber… da habe ich wohl zu einfach gedacht. Denn trotz mannigfaltiger Ansätze, dem quer-lesen dutzender Artikel und des testens nahezu jeder Funktion der ReportingService2005-Klasse musste ich nach zwei Tagen aufgeben. Zwar konnte ich den Server ansprechen und auch diverse Aktionen durchführen – allein Daten auszulesen war mir nicht möglich. Und darum ging es ja nun schließlich.
Also besann ich mich auf eine althergebrachte Methode: XML. Und ein XML-Export stellt für die SSRS kein Problem dar (wenn man die URL entsprechend manuell aufbereitet). Hier also meine kleine Funktion für all jene, die gegebenenfalls in dieselbe Bredouille geraten:
Public Function LoadSsrsData() As Boolean Dim url As String = _ + _ + _ "&rs:Command=Render&rs:Format=XML&" + + "=" + Dim httpReq As WebRequest = _ WebRequest.Create(url) With httpReq .Credentials = CredentialCache.DefaultCredentials End With Dim httpDoc As WebResponse Try httpdoc = httpReq.GetResponse() Catch ex As Exception Debug.Print(ex.Message) Return False End Try Dim xmlDoc As New XmlDocument() Dim xmlNodes As XmlNodeList Dim xmlNode As XmlNode Dim xmlAttr As XmlAttribute Try xmlDoc.Load(httpDoc.GetResponseStream()) Debug.Print(xmlDoc.InnerXml) Catch ex As Exception Debug.Print(ex.Message) Return False End Try Return True End Function
Kommentieren
your_ip_is_blacklisted_by sbl.spamhaus.org