Von Word-Vorlage nach SSRS-Report

Derzeit erstelle ich für einen Kunden mehrere neue Reports mittels SQLServer Reporting Services (SSRS). Die Vorgaben dafür sind mehrere Beispiel-Word-Dokumente, die möglichst genau umzusetzen sind. Ein Szenario, das vermutlich ziemlich häufig auftritt, das sich was Zeilenabstände angeht aber garnicht mal so leicht gestaltet: Das Demodokument beinhaltet mehrere Textboxen, in jeder sind die Fontgrößen leicht anders eingestellt, und Word kümmerte sich ja selbstständig um die Abstände beim Umbruch. Wie simuliert man so etwas aber in SSRS ohne viel Rechnen und Herumschieben von Textboxen? Ich habe mir dabei wie im folgenden beschrieben geholfen.

Zeichensätze in Word haben Punkt-Angaben. Punkte (pt) sind 1/72 inch groß. Ein Inch widerum hat 2,54 cm. Für eine Textbox, die einen 8pt Font aufnimmt, setze ich eine Höhe von 8 + 1 pt. Das kommt sehr nah an die von Word gewählten Abstände.

Was ist das nun in cm? Einfacher Dreisatz: 2,54cm / 72 x 9 = 0,3175 cm. Prima. Allerdings sind 0,3175 cm nicht so leicht zu positionieren, da hilft auch ein Gitter nicht sonderlich viel. Die folgende Lösung scheint mir am effizientesten für SSRS zu sein:

Als Höhe ist der Wert schnell auf mehreren Boxen eingestellt: Eine der Textboxen wird auf die Höhe angepasst, die weiteren hinzu-selektiert, und den Rest macht der Toolbar-Button „Höhe angleichen“.

Um nun die Boxen mit richtigen Zeilenabständen vertikal zu positionieren hilft ein weiterer Button namens „vertikalen Abstand entfernen“. Ich finde das spart nun wirklich unglaublich viel Zeit und Rechnerei. Man muss ihn nur erstmal entdeckt haben.

Ein weiterer Faktor ist aber noch im Weg: Das Default-Padding einer Textbox ist 2pt;2pt;2pt;2pt. Dieses müssen wir für unsere Boxen auf 0pt;0pt;0pt;0pt ändern, ansonsten würde an allen Seiten zusätzlicher freier Raum um unseren Text gelassen. Das möchten wir in diesem Fall natürlich nicht.

Ein abschließendes Tuning, das verhindert, dass es uns das Layout bei langen Texten mal um die Ohren haut: Wir schalten die CanGrow-Option der Textboxen aus.

Ich denke die obigen Sachen nehmen dem Wandeln von Word nach SSRS-Report erstmal die größten Schrecken.

jqGrid hat echt was

In den letzten Wochen konnte ich mich etwas ausgiebiger mit jqGrid beschäftigen, und ich muss sagen: Diese AJAX-Tabellen-Komponente hat was. Es gibt kaum etwas, was ich als Feature in anderen Tabellenkomponenten kennengelernt habe, das hier fehlen würde. Die zugehörige Demoseite beweist das denke ich eindrucksvoll. Allerdings ist der Einstieg nicht ganz leicht, der Technologiebaum dahinter ist schon recht tief.

jqGrid baut auf JQuery UI auf, das dann widerum auf JQuery. Letzteres setzt obwohl es JavaScript stark vereinfacht doch hier und da detailliertere JavaScript-Kenntnisse voraus (der ideale Einstieg hierfür ist immer noch der O’Reilly JavaScript Definitive Guide und online die JavaScript-W3School).

Für das Backend, das für die Komponente Daten heranschafft, kommt nochmal die eine oder andere Technologie hinzu. Hier ist die Wahl aber frei, solange das Framework jqGrid mit JSON oder XML-Daten befeuern kann. Das Format kann relativ weiträumig angepasst werden: jqGrid offeriert Default-XML/JSON-Formate, erlaubt aber die Konfiguration seines XML-Readers, falls man das Quellformat nicht anpassen kann. Einschränkung dabei: jqGrid kann derzeit nur XML-Tags, nicht aber XML-Attribute als Datenquelle heranziehen.

Hat man ein erstes jqGrid-Skript vor sich, ist oft nicht ganz klar, welches Feature aus welchem Paket kommt. Ich bin wirklich froh Firebug als Firefox-Extension mit an Bord zu haben, sonst würde ich wohl heute noch nicht verstehen wie das Ganze zusammengreift.

Was wirklich hilft bei der optischen Gestaltung des Grids ist, dass diese mittels JQuery UI Themerollererfolgen kann. Im Projekt hat unsere Designerin hiermit relativ schnell ein passendes Theme erstellen können, das mit meiner Grid-Software-Demo auch sofort reibungslos zusammengespielt hat.

Fallstricke bei jqGrid: Das eine oder andere JQuery Plugin muss hinzugefügt werden, damit alle Features funktionieren. Will man beispielsweise mit einem komfortablen Editor Tabellenspalten des Grids sortieren oder filtern, wird die Multiselect Komponente nötig. Achtung dabei: Von dieser gibt es mehrere Quellcode-Varianten im Internet, die nicht alle mit jqGrid zusammenspielen. Der richtige Ort für die Komponente ist Github, das ich so als Social Coding Dienst auch mal kennenlernen durfte.

Fazit: jqGrid ist eine sehr starke Client-Tabellenkomponente für Webanwendungen, man darf die Einarbeitungszeit allerdings nicht unterschätzen. Grob 2-3 Tage sind nötig bis man damit produktiv ist. Danach hat man aber auch JQuery und JQuery UI deutlich besser im Griff. Die Dokumentation ist noch etwas schwach, wäre diese besser, wäre auch sicher der Einstieg reibungsloser. Auch sollte man beachten, dass Javascript recht viel Last auf den Clientbrowser legt. Manchmal ist es sicher sinnvoller seine Tabellen im Backend aufzubauen und via reinem HTML in den Browser zu bringen. Für ein solches Szenario hat sich bei mir Displaytag sehr bewährt.

Präsentation ist (keine) Zauberei

Früher war bei mir Präsentieren ungefähr das hier:

  • Sich Hardy’s großen Zauberkasten zu Weihnachten wünschen,
  • ohne langes Üben das Publikum damit belustigen.
  • Merksatz: Die Anleitung lesen kann man im Zweifelsfall immer noch hinter dem Requisiten-Tisch.
  • Klappt was nicht: Nächster Trick.
  • Klappt etwas überraschenderweise: Das selbe nochmal bis zum Abwinken zeigen.

Ich denke gerade: Meine Business-Präsentationen waren lange Zeit im wesentlichen mit einer ganz ähnlichen Methodik gebaut.

Wäre es nicht interessanter für alle, wenn wir ein klein wenig mehr wie David Copperfield präsentieren könnten? Die Frisuren könnte ich zwar nicht bieten, aber das hier müsste als Methode doch für alle drin sein:

  • Ein oder zwei Tricks (Inhalte) auswählen die einem liegen.
  • Üben.
  • Über das Publikum, seine Probleme, Wünsche, seine Träume und Alpträume nachdenken,
  • eine Routine ausarbeiten.
  • Den eigenen Vortrag schleifen,
  • Üben.
  • Auftreten.
  • Aufmerksamkeit aufbauen und sicherstellen.
  • Das Problem, die Wünsche, die Träume und Alpträume skizzieren. Sein Publikum auf diese Art dort abholen wo es sich mental befindet.
  • Kurz und bündig den Trick zeigen und damit alle überraschen.
  • Nicht die Lösung verraten; dem Publikum eine Ahnung zu vermitteln reicht.
  • Den selben Trick niemals wiederholen (selbst auf Wunsch nicht).
  • Und runter von der Bühne.

PS: Hatte ich die bezaubernde Assistentin erwähnt, die (falls die erarbeitete Routine noch holpert) vom Geheimnis hinter dem Trick ablenkt? Was das Gegenstück dazu in einer Business-Präsentation sein kann müsste ich noch mal näher durchdenken.

JSON oder XML?

Derzeit habe ich in einem Kunden-Projekt das erste mal die Chance, mir die JavaScript Framworks JQueryJQuery UI sowie die Gridkomponente jqGrid etwas näher anzuschauen. Im Zusammenhang mit letzterem muss ich von einem Backend Listen mit Produktdaten abholen, die auf dem Host im XML-Format vorliegen.

Weil jqGrid nicht zu 100% an das bestehende XML-Format anzupassen ist (es kann beispielsweise keine Attribute als Zellinhalten nutzen) bin ich gezwungen, das XML-Dokument umzuwandeln. Diese Aufgabe erledige ich mit einem kleinen Servlet, das auch gleich die Aufteilung der Daten in Seiten vornimmt.

Da ich das XML ohnehin umschreiben muss dachte ich ich werfe auch mal einen Blick auf JSON als Austauschformat. Meine Kollegen gaben mir den Tipp dass es einfacher zu generieren sei und deutlich kompakter ist. Und tatsächlich: Das Format ist eindeutig schlanker. Es könnte damit für AJAX-Aufgaben mein neues Protokoll der Wahl werden.