List & Label https://www.combit.blog/de/ List & Label Tue, 22 Nov 2022 10:03:31 +0000 de-DE hourly 1 https://www.combit.blog/wp-content/uploads/2021/06/cropped-Favicon_combit-32x32.png List & Label https://www.combit.blog/de/ 32 32 Neues für .NET in List & Label 28 https://www.combit.blog/de/dotnet-list-label-28/ https://www.combit.blog/de/dotnet-list-label-28/#respond Tue, 22 Nov 2022 09:18:11 +0000 https://www.combit.blog/?p=15115 In List & Label 28 gibt es wieder einige neue Funktionen und Verbesserungen für .NET-Entwickler. Das Wichtigste ist wohl die Unterstützung für das gerade erst veröffentlichte .NET 7. Im Hinblick auf die Performance sorgt die verbesserte Verwendung von Bytearrays für Bilder für einen spürbaren Unterschied. Aber auch bei den Datenprovidern hat sich etwas getan. Hier die neuen Funktionen in der Übersicht.

The post Neues für .NET in List & Label 28 appeared first on List & Label.

]]>
Support für .NET 7
  • Ordnerhierarchien in Elementsammlungen werden jetzt automatisch unterstützt, ohne dass Änderungen an bestehenden Implementierungen erforderlich sind. Wenn Sie diese Funktion nicht nutzen möchten, können Sie das Attribut NoHierarchyAttribute auf Ihre Repository-Klasse anwenden. Die RepositoryImportUtil-Klasse hat eine neue CreateFolder-Methode und unterstützt die Übergabe einer optionalen folderId an die Importmethoden.
  • Die Verwendung von Bild-Bytearrays in Datenquellen wurde erheblich verbessert. List & Label prüft nun, ob es sich um einen der allgemein unterstützten Bildtypen handelt und konvertiert diese nicht mehr in Bitmap. Dies führt zu einer viel besseren Performance, kleineren Vorschaudateien und einer besseren Unterstützung von formatspezifischen Eigenschaften wie beispielsweise Transparenz bei PNGs.
  • Neuer Datenprovider für Azure Cosmos DB
  • Neuer Datenprovider für MariaDB
  • Das benutzerdefinierte Designschema kann nun über DOM geändert werden

Wenn Sie mehr über die neuen Funktionen in List & Label 28 erfahren möchten, schauen Sie einfach hier auf der combit-Website nach.

The post Neues für .NET in List & Label 28 appeared first on List & Label.

]]>
https://www.combit.blog/de/dotnet-list-label-28/feed/ 0
Was 64 Zwischenreleases mit der heutigen Qualitätssicherung zu tun haben https://www.combit.blog/de/qualitatssicherung/ https://www.combit.blog/de/qualitatssicherung/#respond Thu, 27 Oct 2022 07:20:09 +0000 https://www.combit.blog/?p=14886 Dieser Artikel wurde durch eine Diskussion in unseren Foren angeregt. Ein Anwender, der List & Label schon seit 1995 benutzt (was tatsächlich länger als meine eigene Erfahrung zurückreicht!), schrieb uns, dass er aus Angst vor Fehlern in aller Regel bis ein Jahr nach Release wartet, bevor er eine neue Version einspielt. Hier möchte ich erklären, warum ich das für keine gute Idee halte und Ihnen einen Einblick in unsere Qualitätssicherung geben, damit Sie List & Label mit einem guten Gefühl jeden Tag mit Ihren Applikationen weitergeben können.

The post Was 64 Zwischenreleases mit der heutigen Qualitätssicherung zu tun haben appeared first on List & Label.

]]>
Qualitätssicherung bei combit

Rückblende – vor 27 Jahren

1995 steckte die Qualitätssicherung tatsächlich noch in den Kinderschuhen. Wir hatten keine eigene Abteilung dafür. Das Release-Prozedere war nicht festgelegt, es gab keine automatisierten Tests. Das Produkt war da auch gerade erst ein paar Jahre alt, combit war deutlich kleiner als heute – es war schlicht eine andere Zeit. Ich erinnere mich noch gut daran, dass wir bei Version 5 schließlich bei Unterversion 64 gelandet waren, d.h. es gab 64 Zwischenreleases, alle paar Tage ein neues. Das Changelog war nicht öffentlich, sodass niemand wusste, was wir geändert haben. Das war – so muss man es aus heutiger Sicht sagen – eine wirklich üble Gemengelage. Uns war klar, so kann es nicht weitergehen.

Daher haben wir uns recht rasch professionalisiert. Ich habe zuletzt vor ca. 2 Jahren unsere Vorgehensweise dazu dokumentiert. Seitdem haben wir aber weiter an unserer Qualität gearbeitet. Es ist Zeit für ein Update.

combit Qualitätssicherung 2022

Die Qualitätssicherung ist mittlerweile eine eigene Abteilung, die von meinem Kollegen Daniel Kenner geleitet wird. Alle Prozesse sind standardisiert und in detaillierten Ablaufplänen (Checklisten) festgehalten. Der gesamte Buildprozess inklusive aller automatisierten Tests läuft jede Nacht vollautomatisch, sodass jeden Morgen ein frisches Setup inklusive aller getesteten Module zur Verfügung steht.

Nachfolgend eine kleine Übersicht, welche vielfältigen Tests List & Label jede Nacht bzw. vor einem Release durchlaufen muss.

Statische Codeanalyse
Schon beim Coden versuchen wir, Fehler soweit wie möglich auszuschließen. Je früher im Prozess ein Fehler gefunden wird, desto einfacher (und billiger) ist es, ihn zu beseitigen. Neben den gängigen Analyzer-Bibliotheken von Microsoft verwenden wir Sonarqube für die statische Codeanalyse. Hier ein Einblick in eine aktuelle Analyse des .NET-Codes von List & Label:

statische Codeanalyse


Mit Sonarqube decken wir sowohl unseren .NET-Code als auch den TypeScript-Code unserer Webkomponenten ab.

Tests der Webkomponenten
Darüber hinaus werden unsere Webkomponenten – der Web Report Designer und Web Report Viewer – einem gründlichen Test durch Cypress unterworfen. Diese Bibliothek erlaubt es, nahezu alle Frontend- und Backendfunktionalitäten mit Tests abzudecken.

Webkomponenten testen

Hierbei werden aktuell 90 verschiedene Testeinheiten ausgewertet, welche wiederum aus bis zu 20 Assertions bestehen.

Unit-Tests der .NET-Komponente mit NUnit
Auf Codeebene werden eine Reihe von Unittests durchgeführt. Wir verwenden hierfür NUnit. Die Tests werden bei jedem Build auf unserem TeamCity-Buildserver automatisch ausgeführt und testen über diverse Assertions das Verhalten der .NET-Programmierschnittstelle:

Unit-Tests der .NET-Komponente mit NUnit

Die Liste geht natürlich weiter. Bei jeder Abweichung wird der Build als ungültig gekennzeichnet und so auch verhindert, dass die Module z.B. über unseren Support bei Ihnen landen können. Hier wie auch bei allen anderen im folgenden beschriebenen Tests gilt: kein Modul, das nicht alle Tests erfolgreich durchlaufen hat, darf an Kunden weitergegeben werden.

Automatisierte Drucktests
Die Liste der Tests hatte ich ja in meinem oben angelinkten Artikel schon aufgeführt. Inzwischen haben wir noch deutlich mehr Tests. Diese decken sowohl die Druckengine als auch die PDF-Generierung als unser wichtigstes Exportformat ab. Insgesamt werden bei jedem Build aktuell 1236 Druckausgaben erzeugt und mit hinterlegten Referenzen verglichen. Diese Zahl nimmt ständig zu, da wir bei jedem neu entdeckten Fehler einen weiteren Test hinzufügen, der eine Regression genau dieses Problems für die Zukunft ausschließt.

Für die automatisierten Vergleiche nutzen wir je nach Zielformat unterschiedliche Tools: PDF-Dateien werden mit DiffPDF, einem kommerziellen Tool, verglichen. Für die Vorschaudateien nutzen wir unser eigenes Vergleichstool, das „versteckt“ in unseren DLLs integriert ist. Über eine API können wir damit zwei LL-Dateien auf Vektorebene miteinander vergleichen. So entgeht uns auch nicht die kleinste Veränderung. Sobald sich eine beliebige Ausgabe auch nur um 1/1000 mm verschiebt, würden wir dies sofort bemerken. Das kann von Zeit zu Zeit natürlich „normal“ sein, z.B. wenn wir eine neue PDF-Bibliothek einspielen und dort das Rendering minimal angepasst wird. Hier werden die fehlgeschlagenen Tests dann manuell betrachtet, bewertet und ggf. freigegeben.

Ein (leider) ganz aktuelles Beispiel für diese Vorgehensweise: wir hatten für Version 28 die Rendering-Bibliothek für SVG-Dateien auf den neuesten Stand gebracht. Dabei wurde ohne weiteren Hinweis in den Releasenotes der Rückgabewert einer Funktion geändert, sodass die Größenbestimmung für SVG-Dateien falsche Ergebnisse liefert, was sich insbesondere bei stark rechteckigen SVGs deutlich zeigt, sie werden zu klein dargestellt. Ein Kunde wies uns im Forum auf das Problem hin. Selbstverständlich hatten wir die SVG-Ausgabe über eine Reihe von Tests abgedeckt. Ein mehrseitiger Test verwendet einige Dutzend Test-SVGs des W3C, die alle erdenklichen SVG-Features abdecken, die wir unterstützen. Allerdings gab es mit den Tests ein Problem:

automatisierte Drucktests

Fast alle Bilder sind quadratisch – genau in dieser Konstellation war der Fehler nicht wirklich zu sehen. Links sind die fehlerhaften, rechts die korrigierten Bilder. Mittlerweile gibt es natürlich auch Tests mit rechteckigen SVGs. Die kommen für diesen Fall aber zu spät. So konnten wir nur so schnell wie möglich reagieren und dem Kunden 37 Minuten nach der Problemmeldung eine neue DLL mit einem Fix zusenden.

Automatisierte UI-Tests
Auch die Benutzeroberfläche wird ständig getestet, Hierfür verwenden wir Ranorex, ein weiteres kommerzielles Tool. Über dieses führen wir jede Nacht die komplette Freigabecheckliste für den Designer durch, die bei einem Service Pack zusätzlich auch manuell getestet wird. Darin enthalten ist das Einfügen, Bearbeiten und Löschen verschiedenster Objekttypen, die Ausgabe auf die unterschiedlichsten Exportformate, ein Test der Eigenschaftseditoren, der Hotspot-Funktionalität von Chart und Kreuztabelle usw. Der folgende Screenshot gibt einen guten Eindruck, wie Ranorex in Zusammenarbeit mit TeamCity arbeitet:

automatisierte UI-Tests


Ein voller Testlauf dauert hier aktuell ca. 30 Minuten, was für eine automatisch klickende Engine eine Ewigkeit ist und die Tiefe der abgedeckten Funktionalität zeigt. Auch hier gilt: Kein Modul, das nicht alle Tests besteht, wird an Kunden ausgeliefert.

Manuelle Whitebox- und Blackbox-Tests
Natürlich arbeiten bei combit nicht nur Maschinen, sondern auch echte QA-Profis, die bei manuellen Tests versuchen, auf alle erdenklichen (und auch mal absurden) Ideen zu kommen, um das Feature „kaputt zu machen“. Dies ist ein wesentlicher Teil des Prozesses, den ein Feature durchlaufen muss, bis es eine Release-Freigabe erhält. Vor jedem Service Pack Release werden zudem die wichtigsten Programmteile, zusätzlich zu den o.g. automatisierten Tests, nach detaillierten Testplänen manuell nachgetestet.

Fazit

Wir sind seit 1995 einen weiten Weg gegangen und haben uns auf allen Ebenen professionalisiert. Hätte ich damals selber noch ein Jahr gewartet, bevor ich eine neue Version eingespielt hätte, bin ich mittlerweile überzeugt, dass wir jederzeit die bestmögliche Qualität ausliefern können. Das früher übliche „ich warte mal bis zum zehnten Service Pack“ würde überhaupt nicht mehr funktionieren. In aller Regel geben wir nur noch ein Service Pack pro Quartal frei. Und die gefundenen Fehler werden immer exotischer, wenn sie auch nicht aufhören aufzutauchen. Aber das kennen Sie vermutlich aus Ihrer eigenen Software ebenso. Ich würde mich freuen, wenn hier Ideen für Sie enthalten wären, Ihre eigene QS noch breiter aufzustellen. Und wenn Sie im Gegenzug noch Vorschläge haben, was wir noch umsetzen sollten, freue ich mich über Ihre Kommentare dazu.

The post Was 64 Zwischenreleases mit der heutigen Qualitätssicherung zu tun haben appeared first on List & Label.

]]>
https://www.combit.blog/de/qualitatssicherung/feed/ 0
Vorschau in Web-Anwendungen mit dem Web Report Viewer https://www.combit.blog/de/web-report-viewer/ https://www.combit.blog/de/web-report-viewer/#respond Thu, 22 Sep 2022 07:51:25 +0000 https://www.combit.blog/?p=14469 Bis Version 27 konnte man in eigenen .NET Web-Anwendungen den HTML5 Viewer verwenden, um direkt im Browser die Vorschau eines Berichts anzeigen zu lassen. Mit diesem waren bereits interaktive Benutzeraktionen wie Drilldown, Filterung der Daten mit Hilfe der Berichtsparameter und vieles mehr möglich. Aber die dort verwendete Technologie ist in die Jahre gekommen wie bspw. das verwendete jQuery Framework. Natürlich stehen wir nicht still und haben eine moderne Ablösung bei hoher Kompatibilität mit dem neuen Web Report Viewer geschaffen, der seit Version 27 (Jahr 2021) zur Verfügung steht.

The post Vorschau in Web-Anwendungen mit dem Web Report Viewer appeared first on List & Label.

]]>
Vorschau mit Web Report Viewer

Web Report Viewer mit WebComponents

Der neue Web Report Viewer basiert auf den aktuellen Web Technologien und verwendet dabei die sogenannten WebComponents. Das ermöglicht die einfache Ablösung von jQuery und bringt den enormen Vorteil, dass der Web Report Viewer in anderen JavaScript Frameworks verwendet werden kann. Er ist also flexibel in beliebten JavaScript Frameworks wie React, Angular oder Vue integrierbar.

Die Oberfläche des Viewers ist für alle gängigen Browser auf Desktop und Tablet optimiert. So können Anwender:innen Berichte plattformunabhängig auf Windows, iOS, Linux oder Android betrachten.

Der Funktionsumfang des Web Report Viewers ist dabei identisch mit dem des HTML5 Viewers:

  • interaktive Berichts-Aktionen wie Berichtsparameter, Drilldown, Sortierungen, ausklappbare Bereiche
  • Export in beliebte Formate wie PDF, Word, Excel und viele mehr
  • client-seitiges Drucken
Web Report Viewer mit WebComponents

Mit dem Web Report Viewer wird eine veraltete Variante der Berichtsvorschau im Browser abgelöst. Der „alte“ HTML5 Viewer wird nicht mehr weiterentwickelt. Die Umstellung oder Aktualisierung auf den neuen Web Report Viewer wird empfohlen.

How-To und Tipps zum Einbau des Web Report Viewers

Eine allgemeine Information, wie Sie den Web Report Viewer in ASP.NET MVC Web Anwendungen einbauen, finden Sie in dieser Anleitung aus der .NET Hilfe. Beachten Sie, dass mit der List & Label Installation auch zahlreiche Programmierbeispiele für ASP.NET bereitgestellt werden, die zur freien Verfügung stehen.

Darüber hinaus zeigt der Artikel Verwendung von Web Report Viewer in React, Angular oder Vue.js wertvolle Tipps für moderne JavaScript Frameworks wie React, Angular und Vue.js.

Sie möchten über eine URL gezielt einen Bericht im Web Report Viewer innerhalb Ihrer Anwendung aufrufen? Im Artikel Web Report Viewer: Gezielt Berichte über eine URL inkl. Berichtsparametern aufrufen erfahren Sie, wie.

Der Web Report Viewer ist im Web Report Designer voll integriert und wird dort im Rahmen der Echtdatenvorschau verwendet.

Machen Sie sich ein Bild davon in unserer List & Label Online-Demo.

The post Vorschau in Web-Anwendungen mit dem Web Report Viewer appeared first on List & Label.

]]>
https://www.combit.blog/de/web-report-viewer/feed/ 0
Vier neue Funktionen für den Excel-Export https://www.combit.blog/de/excel-export-list-label-28/ https://www.combit.blog/de/excel-export-list-label-28/#respond Thu, 15 Sep 2022 08:27:53 +0000 https://www.combit.blog/?p=14353 Einer der Hauptbereiche, auf den wir uns bei List & Label 28 konzentriert haben, war die weitere Optimierung unserer Exportformate. Insbesondere haben wir den Excel-Export um eine Reihe von leistungsstarken neuen Funktionen erweitert. Ohne weitere Umschweife stellen wir Ihnen die neuen Funktionen vor.

The post Vier neue Funktionen für den Excel-Export appeared first on List & Label.

]]>
neue Funktionen Excel-Export

Excel-Formeln in Arbeitsblättern generieren

Es gibt einen neuen Modus, der es ermöglicht, Texte, die mit „=“ beginnen, in Excel-Formeln zu konvertieren. Das Hinzufügen dieser Funktion war eine häufige Anfrage aus der Community. Die Funktion kann sowohl über die Benutzeroberfläche als auch über den Code aktiviert werden. Verwenden Sie einfach

LL.ExportOptions.Add(LlExportOption.XlsAutoFormula, „1“);

um sie einzuschalten. Eine sehr einfache Aufgabe wäre dann z.B., das von Excel berechnete aktuelle Datum auf das Blatt zu bekommen. Verwenden Sie einfach die Formel „=TODAY()“ in einem Textobjekt und stellen Sie sicher, dass es als Datum formatiert ist, damit es auch in der resultierenden XLS-Datei mit einer Datumsformatierung erscheint:

Formeln in Arbeitsblättern beim Export generieren

Dann exportieren Sie nach XLS. Im Ergebnis erhalten Sie die Zelle als Excel-Formel:

Beispiel für Datumsformatierung

Natürlich funktioniert dies auch für den reinen XLS-Export.

Passwortgeschützte Excel-Tabellen

Jetzt können Sie optional Ihre Tabellenblätter vor Manipulationen schützen. Es gibt eine Reihe von Optionen, um das Verhalten zu steuern:

  • XLS.Protection.ProtectSheets
    Schützt alle Blätter vor der Bearbeitung.
  • XLS.Protection.ProtectSheetsPassword
    Optionales Kennwort, mit dem sich der Schutz in Excel aufheben lässt. Wenn dieses Kennwort nicht festgelegt ist, kann jeder den Schutz mit einem einfachen Klick aufheben
  • XLS.Protection.ProtectSheetsMode
    Definiert die Art des Schutzes. Es gibt eine Reihe von Optionen zur Auswahl. Sie können verhindern, dass Zellen ausgewählt, dass Zeilen und Spalten gelöscht werden oder Sie können Zellen nur vor der Formatierung schützen usw.

In Excel zeigt eine geschützte Arbeitsmappe diese Informationen in der Backstage-Ansicht an:

Passwortschutz in Excel-Tabellen

Sie kann von dort aus freigeschaltet werden (falls Sie das Passwort kennen).

Anpassen des Kopf- und Fußzeilenbereichs

Die Kopf- und Fußzeilen, die Excel beim Drucken hinzufügt, können jetzt per Code eingestellt werden. Auch dieses Feature war ein Wunsch der Community. Um diese Funktion zu nutzen, legen Sie einfach die erforderlichen Inhalte über eine Reihe neuer Optionen fest. Ein einfaches Beispiel würde wie folgt aussehen:

LL.ExportOptions.Add(LlExportOption.XlsHeaderContent, "&Lcombit&CProducts&R&D");
LL.ExportOptions.Add(LlExportOption.XlsHeaderMargin, "0.1");
LL.ExportOptions.Add(LlExportOption.XlsFooterContent, "&CPage &P of &N");
LL.ExportOptions.Add(LlExportOption.XlsFooterMargin, "0.1");

Beachten Sie die „ungewöhnliche“ Zeichenkette in der ersten Zeile. Sie ist eigentlich ganz einfach, wenn man sie erst einmal verstanden hat. &L bezeichnet den Anfang der linken Spalte. Sie können einen festen Text (wie „combit“ im Beispiel) oder eine breite Palette anderer Platzhalter hinzufügen, z.B. für das Datum, den Blattnamen, die Seitenzahl oder den Dateinamen der XLS. Die anderen Abschnitte werden über die Zeichen &C (Mitte) und &R (rechts) der Zeichenfolge festgelegt.

Der Code oben führt zu folgendem Ergebnis in der Druckvorschau von Excel:

Anpassen des Kopf- und Fußzeilenbereichs beim Excel-Export

Automatische Anpassung der Spaltenbreite

Beim reinen Datenexport wird jetzt die Excel-Funktion zur automatischen Anpassung verwendet, um die optimalen Spaltenbreiten zu ermitteln. Dies kann bei Bedarf abgeschaltet werden. Allerdings ist das Ergebnis für den Empfänger in der Regel wesentlich besser lesbar, da alle Daten nun automatisch auf einen Blick sichtbar sind wie unser Vorher-Nachher-Vergleich eindrucksvoll darstellt:

Vorher:

Spaltenbreite ohne Anpassung

Nachher:

Spaltenbreite mit Anpassung

Zum Schluss …

… möchte ich die Gelegenheit nutzen und Ihnen allen für Ihren wertvollen Beitrag während der Feature-Findungsphase für jede einzelne Version unseres Reporting Tools danken. Es ist immer großartig zu sehen, was unsere Kunden wirklich benötigen und sicherzustellen, dass wir entsprechend reagieren, so wie wir es bei der Erweiterung des Excel-Exports auf vielfachen Wunsch getan haben. Ohne Ihre Unterstützung und Ihre Ideen wäre das Produkt nicht das, was es heute ist.

List & Label 28 enthält über 30 neue Funktionen und Verbesserungen. Erfahren Sie mehr über die neueste Version unserer Reporting-Komponente.

The post Vier neue Funktionen für den Excel-Export appeared first on List & Label.

]]>
https://www.combit.blog/de/excel-export-list-label-28/feed/ 0
Neues Service Pack 27.004 für List & Label und den Report Server https://www.combit.blog/de/service-pack-27004/ https://www.combit.blog/de/service-pack-27004/#respond Thu, 04 Aug 2022 08:40:01 +0000 https://www.combit.blog/?p=13666 In dieser Zusammenfassung finden Sie die wichtigsten neuen Features und Verbesserungen im Service Pack 27.004. Die einzelnen Einträge wurden dabei direkt aus dem englischen Readme übernommen. Eine ausführliche Liste aller Änderungen finden Sie im ServicePack.pdf in Ihrer Installation sowie im Download-Bereich des Service Packs.

The post Neues Service Pack 27.004 für List & Label und den Report Server appeared first on List & Label.

]]>

Features

Komponenten

  • VCL: Support for Embarcadero RAD Studio 11.1 (BDE & FireDAC).

Druck

  • As „MS Sans Serif“ is a raster font and causes problems with the PDF export, the font is now replaced in the RTF stream to „Microsoft Sans Serif“, looking the same, but scaling correctly.

Verbesserungen

.NET

  • Improved schema detection and field type handling for SchemaAwareJsonDataProvider.

Designer

  • Non-existent project includes did show up using empty entries in the configuration dialog. Since this could be confusing, they now show up again with their name but additionally marked with an asterisk.
  • Changing of 3d chart view angles in the chart dialog always triggered creation of completely new random sample data. Now the created sample values persist hereby leading to a smoother user experience.
  • Added internal option LL_OPTION_COMPAT_FORCE_PRNOPT_PAGE to still force execution of LL_PRNOPT_PAGE even if it’s not used as intended to initially set the start page only.
  • Vastly improved performance of large HTML object exports to XHML.

Dataprovider

  • The MongoDBDataProvider now supports multiple root tables. All tables that are available as collections are now also available on the root level. As a side effect, this allows to add relations via filter condition if the data is stored non-relational on the server.
  • The regex used to find if a JSON field contains an ISO8601 date format was too sloppy and accepted a date anywhere inside a string. Now we only allow preceding white space and parse a field as string otherwise.

Export

  • The XHTML export now uses the overflow-wrap: break-word style if „Force Wrap“ is activated for a text. This yields a better result than the word-break: break-all used before.
  • During a single sheet and/or endless pages excel export in ‚only data from tables‘ mode the line wrapping and width/height calculation of text cells now is omitted by default for performance reasons.

Druck

  • LL_OPTION_PRN_FORCE_PROJECTSIZE_AS_PAPERSIZE: 4 did not remove „paper size“ in the DEVMODE structure.

Report Server

  • When sending emails in the report server, the client-server communication is now available in the debug log.
  • RS User Import Summary now has a clearer button to get back to the overview.

Sonstiges

  • Debwin4 could throw an exception if somehow two messages with the same line number were added.
  • Enhanced EXIF orientation detection for JPEGs.

The post Neues Service Pack 27.004 für List & Label und den Report Server appeared first on List & Label.

]]>
https://www.combit.blog/de/service-pack-27004/feed/ 0
Wie Sie den Report Server auf einer Azure-Container-Instanz bereitstellen und über eine Azure-Funktion verwenden https://www.combit.blog/de/report-server-auf-azure-container-instanz/ https://www.combit.blog/de/report-server-auf-azure-container-instanz/#respond Tue, 19 Jul 2022 13:32:37 +0000 https://www.combit.blog/?p=13118 Da wir immer wieder Anfragen erhalten, List & Label aus einer Azure Function aufzurufen, und wir List & Label in diesem Kontext aufgrund verschiedener Einschränkungen wie z.B. GDI-Sandboxing nicht direkt verwenden können, dachte ich, es könnte interessant sein, einen anderen Weg in die Cloud zu erkunden. Diesmal mit dem Report Server. Mit seiner REST-API können Sie sogar Berichte aus einer Azure-Funktion erstellen. Aber lassen Sie uns den Prozess Schritt für Schritt durchgehen.

The post Wie Sie den Report Server auf einer Azure-Container-Instanz bereitstellen und über eine Azure-Funktion verwenden appeared first on List & Label.

]]>
Report Server auf einer Azure Instanz installieren

Zunächst benötigen Sie eine Report Server-Instanz, die von außen zugänglich ist. Da wir ohnehin planen, ihn von Azure aus zu nutzen, ist es sinnvoll, ihn in einem Windows-Docker-Image zu installieren und auf Azure Container Instances bereitzustellen. Diese Tutorials helfen Ihnen bei den ersten Schritten:

Daten von Azure SQL verwenden

Natürlich kann der Report Server problemlos Daten aus Azure SQL-Datenquellen nutzen. Für diesen Test – und nur um sicherzustellen, dass wir alles nutzen, was in Azure verfügbar ist – habe ich eine Instanz der berüchtigten Northwind-Datenbank in Azure bereitgestellt. Die Verbindung zu ihr ist einfach. Fügen Sie einfach eine neue Azure-SQL-Datenquelle hinzu und legen Sie ihre grundlegenden Eigenschaften wie folgt fest:

Configure Microsoft Azure SQL

Erstellen Sie anschließend einen neuen Bericht auf der Grundlage dieser Datenquelle:

Edit Report Server Template

Auf den Report Server über REST aus einer Azure-Funktion zugreifen

Das letzte Glied in der Kette besteht nun darin, diese Report Server-Instanz zu verwenden und von einer Azure-Funktion aus zu berichten. Natürlich kann diese Funktion auch Parameter entgegennehmen und diese als Berichtsparameter an den Server weiterleiten. Erstellen Sie zu diesem Zweck eine http-ausgelöste Funktionsinstanz:

Create New Azure Function Application
Create New Azure Function Application

Stellen Sie sicher, dass Sie die Autorisierungsebene hier auf Anonym setzen, um die Verwendung zu erleichtern. Wenn Sie die Standardstufe „Funktion“ wählen, müssen Sie in Anfragen den Funktionsschlüssel angeben, um auf Ihren Funktionsendpunkt zuzugreifen.

Visual Studio erstellt ein Projekt und eine Klasse, die Boilerplate-Code für den Funktionstyp HTTP-Trigger enthält. Der Boilerplate-Code sendet eine HTTP-Antwort, die einen Wert aus dem Anforderungstext oder der Abfragezeichenfolge enthält. Das HttpTrigger-Attribut gibt an, dass die Funktion durch eine HTTP-Anforderung ausgelöst wird.

Um die Funktion umzubenennen, ändern Sie einfach das Methodenattribut FunctionName in den gewünschten Wert:

  1. Klicken Sie im Datei-Explorer mit der rechten Maustaste auf die Datei Function1.cs und benennen Sie sie in CreateRSReport.cs um.
  2. Benennen Sie im Code die Klasse Function1 in CreateRSReport um.
  3. Benennen Sie in der HttpTrigger-Methode namens Run das Methodenattribut FunctionName in CreateRSReport um.

Ihre Funktionsdefinition sollte nun wie der folgende Code aussehen:

 [FunctionName("CreateRSReport")]
  public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)

Stellen Sie nun sicher, dass Sie die REST-API im Report Server über „Verwaltung > Erweiterte Einstellungen > REST-API vor der Verwendung aktivieren. Einen Schnellstart finden Sie hier. Wenn Sie die API durchsuchen möchten, stellen Sie außerdem sicher, dass Sie die Swagger-Dokumentation über „Verwaltung > Erweiterte Einstellungen > REST API > Spezifikation durch Swagger / OpenAPI“ aktivieren und auf „Dokumentation der REST API anzeigen“ klicken.

REST-API Report Server

Erstellen Sie dann ein API-Konto mit Token:

  1. Legen Sie in der Benutzerverwaltung einen Benutzer „apiuser“ an und wählen Sie bei „Registrierung konfigurieren“ den Authentifizierungstyp „API-Konto mit Token“. Bestätigen Sie mit „weiter“.
  2. Erzeugen und definieren Sie ein neues Client-Token mit „Übernehmen“. Kopieren Sie dieses Token. Das Token kann nicht erneut angezeigt werden. Wenn Sie einen neuen Token generieren, wird der bisher verwendete Token ungültig und alle Clients müssen neu konfiguriert werden!

Damit können Sie sich nun von Ihrer Azure-Funktion aus wie folgt mit dem Report Server verbinden:

using combit.ReportServer.ClientApi;
using combit.ReportServer.ClientApi.Objects;
 
// Create a connection to the Report Server
ReportServerClient rsClient = await ReportServer.ConnectAsync("http://.../combitreportserver",
new ClientOptions()
{
Authentication = new ApiTokenAuthentication("apiuser", "...")
});

Der nächste Schritt besteht darin, die Berichts-ID des zu exportierenden Berichts zu ermitteln. Am einfachsten ist es, die Berichtsvorlage im Report Server zu bearbeiten und die ID aus der URL zu kopieren:

Edit Report Server Template

Mit Hilfe der Berichtsvorlagen-ID können Sie den Bericht aus Ihrer Funktion heraus z.B. als PDF exportieren:

...
// Set Report Template ID
string reportTemplateId = "FEF8ED98-52C5-4A95-AAF9-F03B5069DA75";
 
// With null as export profile, the default export profile of the report template will be used
string exportProfileId = null;
 
// Prepare an export and set the options:
PreparedReport preparedExport = rsClient.Exporter.PrepareExport(reportTemplateId, exportProfileId);
preparedExport.DisableCaching = true;
 
// Set export path
string exportPath = Path.GetTempPath();
 
// Query parameter for Report Parameter Category
string id = req.Query["Category"];
 
// Add Report Parameters
preparedExport.ReportParameters.Add("Category", id);
 
// Exports the report and download the export file
ExportResult result = await preparedExport.ExportAsync();
await result.DownloadFilesAsync(exportPath, CancellationToken.None);
 
return new FileContentResult (System.IO.File.ReadAllBytes(Path.Combine(Path.GetTempPath(), "azure_test.pdf")), "application/pdf");
...

Azure Funktion lokal testen

In Visual Studio sind die Azure Functions Core Tools integriert. Diese ermöglichen ein einfaches lokales Debugging von Azure Functions. Drücken Sie einfach F5 in Visual Studio, um es auszuprobieren und stellen Sie sicher, dass die Firewall so konfiguriert ist, dass die Tools HTTP-Anfragen verarbeiten können. Wenn dieser lokale Server eingerichtet ist und läuft, können Sie Ihre Funktion testen – entweder über einen Browser oder innerhalb einer Testanwendung:

var client = new HttpClient();
var url = "http://localhost:7071/api/CreateRSReport?Category=2";
HttpResponseMessage response = await client.GetAsync(url);

Wenn Sie mit dem Ergebnis zufrieden sind, können Sie Ihre Funktion in Azure bereitstellen. Klicken Sie im Solution-Explorer mit der rechten Maustaste auf das Projekt und wählen Sie Veröffentlichen. Wählen Sie Azure alsZielund dann Weiter. Wählen Sie dann eine vorhandene Funktionsanwendung oder erstellen Sie eine neue:

Publish New Azure Function

Dann veröffentlichen Sie die Funktion:

Succesfully Published Azure Function

Wenn Sie nun Ihre URL und Funktion öffnen, erhalten Sie den PDF-Download wie erwartet von der neu erstellten Azure-Funktion.

The post Wie Sie den Report Server auf einer Azure-Container-Instanz bereitstellen und über eine Azure-Funktion verwenden appeared first on List & Label.

]]>
https://www.combit.blog/de/report-server-auf-azure-container-instanz/feed/ 0
Open Sourcing unseres Debug Tools Debwin https://www.combit.blog/de/logging-tool-debwin/ https://www.combit.blog/de/logging-tool-debwin/#respond Thu, 23 Jun 2022 11:47:44 +0000 https://www.combit.blog/?p=12344 Hier ist ein weiteres Open-Source-Projekt auf unserer GitHub-Seite: Wir haben den Quellcode für unsere Logging-Anwendung Debwin unter der MIT-Lizenz veröffentlicht. Den Quellcode finden Sie auf unserem GitHub-Profil. Die ursprüngliche Ankündigung der App aus dem Jahr 2016, in der eine Reihe von Funktionen beschrieben wird, finden Sie hier.

The post Open Sourcing unseres Debug Tools Debwin appeared first on List & Label.

]]>

Neben der Protokollierung der Debug-Ausgaben von List & Label oder dem Report Server kann es als generischer UDP-Paketlogger verwendet werden, der auf einem frei konfigurierbaren UDP-Port auf eingehende Nachrichten wartet. Sie können die eingehenden Nachrichten auch parsen, ein Beispielparser für Log4J-Pakete ist enthalten.

Viele von Ihnen sind mit Debwin4 vertraut, da wir im Rahmen unseres Support-Prozesses häufig nach Log-Dateien fragen, die mit diesem Tool erstellt wurden. Sie sollten noch heute damit beginnen, Logging in Ihre eigene Anwendung einzubauen, wenn Sie es nicht schon tun – für uns ist es ein unverzichtbares „Feature“ von List & Label. Eigenes Logging ist ganz einfach, wenn Sie List & Label in Ihrer Anwendung integriert haben. Die grundlegendste Anwendung ist die LlDebugOutput-API. Sie ermöglicht die Ausgabe von einfachen Strings. Wenn Sie mehr wollen, finden Sie hier ein Beispiel, wie Sie die Protokollierung zu Ihrer eigenen IDataProvider-Implementierung hinzufügen können.

Fügen Sie einfach die Schnittstelle ISupportsLogger zu Ihrer Datenanbieter-Implementierung hinzu. Sie hat eine einzige Methode:

void SetLogger(ILlLogger logger, bool overrideExisting);

Die ILlLogger-Schnittstelle ist der interessante Teil. Sie können Debug-, Info-, Warn- und Fehlermeldungen ausgeben:

public interface ILlLogger
{
    bool WantOutput(LogLevels level, LogCategory category);
    void Debug(LogCategory category, [Localizable(false)] string message, params object[] args);
    void Debug(int indentationDelta, LogCategory category, [Localizable(false)] string message, params object[] args);
    void Info(LogCategory category, [Localizable(false)] string message, params object[] args);
    void Info(int indentationDelta, LogCategory category, [Localizable(false)] string message, params object[] args);
    void Warn(LogCategory category, [Localizable(false)] string message, params object[] args);
    void Error(LogCategory category, [Localizable(false)] string message, params object[] args);
}

Anschließend können Sie in der Debwin Logger App nach dem gewünschten Log-Level filtern.

Wenn Sie andere Teile Ihrer Anwendung protokollieren möchten, können Sie jederzeit eine ILlLogger-Schnittstelle erstellen, indem Sie die statische Eigenschaft LoggingHelper.LlCoreDebugOutputLogger wie folgt verwenden:

LoggingHelper.LlCoreDebugOutputLogger.Error(LogCategory.Net, "Server connection error ({0}): {1}", response.StatusCode.ToString(), response.Result);

Das Hinzufügen von Logging zu einer Anwendung ist ein No-Brainer für jede Entwicklung, in der auf Qualität gesetzt wird. Und falls die Logging-App nicht alle Funktionen hat, die Sie für eine Analyse benötigen, können Sie noch heute einen Beitrag leisten. Wir würden uns freuen, Pull Requests für das Projekt zu erhalten.

The post Open Sourcing unseres Debug Tools Debwin appeared first on List & Label.

]]>
https://www.combit.blog/de/logging-tool-debwin/feed/ 0
Neues Service Pack 27.003 für List & Label und den Report Server https://www.combit.blog/de/service-pack-27003/ https://www.combit.blog/de/service-pack-27003/#respond Thu, 05 May 2022 08:10:25 +0000 https://www.combit.blog/?p=11256 In dieser Zusammenfassung finden Sie die wichtigsten neuen Features und Verbesserungen im Service Pack 27.003. Die einzelnen Einträge wurden dabei direkt aus dem englischen Readme übernommen. Eine ausführliche Liste aller Änderungen finden Sie im ServicePack.pdf in Ihrer Installation sowie im Download-Bereich des Service Packs.

The post Neues Service Pack 27.003 für List & Label und den Report Server appeared first on List & Label.

]]>

Features

Komponenten

  • Added new property „Printerless“ to OCX control.

Druck

  • A new option LL_OPTION_RTF_SHARE_OBJECTS_THRESHOLD limits the number of RTF controls to be used exclusively. Once the number of RTF objects surpasses this value, shared RTF objects are used to limit the resources needed. Suggested is something between 10 and 100 (default), depending on the number of parallel threads used for printing.

Web-Komponenten

  • Web Report Designer: New table editor to easily create and modify tables in report containers. You can drag and drop fields to create and move them, and adjust properties without opening a dialog box. Table editing mode replaces the inline editor that was available in the design area.
  • Web Report Designer: Added a Project Wizard for labels, lists and cards/letters.
  • Web Report Designer: Backups are automatically created at a specified interval during project processing and can be restored in case of a crash.
  • Web Report Designer: Repository mode for Images.
  • Web Report Designer: Ellipse objects are now supported.
  • Web Report Viewer: Report parameters can now be specified and applied via url parameters (e.g. ?$ParameterName=Value1;Value2&$apply).
  • Web Report Viewer: Added the possibility to define custom data before initialization using customData property to Web Report Viewer component. This data will be available as ClientCustomData in OnProvideListLabel.
  • And many more new features and improvements

Report Server

  • Azure SQL Database can now be used in the backend.

Verbesserungen

.NET

  • Optimized SQL-JOIN-Statement generation when using 1:1 relations in a report.
  • Allowing #-character in table name for SQL-based dataproviders like SqlConnectionDataProvider and DbCommandSetDataProvider.
  • Added new property FirstVisiblePage to ListLabelPreviewControl. As opposed to CurrentPage, this returns the first page that is currently visible – it doesn’t have to be selected.

Datenprovider

  • SchemaAwareJsonDataProvider now always uses the type from the schema even if JSON data is present.

Druck

  • If there was no message processing from the parent window while exporting, the abort dialog could show up very late, if ever.
  • If – under heavy printing load – StartDoc() fails, LL kills all known cached printer DCs and tries again. Alternatively, try to clear the cache of printer DCs (set LL_OPTION_PRINTERDCCACHE_TIMEOUT_SEC to 0).
  • Like announced in the debug log, if more than 50 RTF controls are being used, they are now created and re-used on the fly. This greatly reduces system resource usage, but is slower.
  • „StrictThreadSeparation“ now defaults to „TRUE“ for Windows 11, otherwise there are crashes in Windows 11 code.

Report Server

  • If the preview is closed, active printing in that session is canceled and will no longer be shown in the system load page.
  • Improved displayed error messages in the Report Server Designer.
  • Improved handling of the cancel button when there is no previous page in the history.
  • Improved displayed messages if the connection to a data provider is not possible.
  • Active export jobs page now displays a more clearer page breadcrumb navigation.
  • For report parameters with multiple selection, the option to select all values is now available.
  • Allowing #-character in table name for SQL-based dataproviders like SqlConnectionDataProvider and DbCommandSetDataProvider.

Sonstiges

  • Debwin4 now applies a filter by severity on the fly when clicking the respective item in the filter panel.
  • Applied fixes for CVE-2022-0561, CVE-2022-0562 and CVE-2022-0908 libtiff vulnerabilities.
  • When Embarcadero Theming was used, the theming wrapper of caused crashes or wrong updates, no scrolling etc. In order to suppress LL’s wrapper, use registry entry „HKCU\software\combit\cmbtll“ „Compatibility.UseThemingWrapper“ [String] „F“.
  • When Embarcadero Theming was used, the theming wrapper of RTF controls did crash. In order to suppress LL’s wrapper, use registry entry „HKCU\software\combit\cmbtll“ „Compatibility.UseRTFThemingWrapper“ [String] „F“.
  • Formula wizard: improved startup time if there are many fields.
  • Functions added using LlDesignerProhibitFunction() are now excluded from execution too. Unless they are needed like „ProjectPath$()“ for a drilldown subreport.
  • Redistribution Assistant: Removed the Web Report Designer as it should be deployed differently.
  • LS_VIEWERCONTROL_GET_PAGE: if wParam == 1, the returned value is the page index of the first (at least partially) page.

The post Neues Service Pack 27.003 für List & Label und den Report Server appeared first on List & Label.

]]>
https://www.combit.blog/de/service-pack-27003/feed/ 0
Weitere Highlights in List & Label 27 https://www.combit.blog/de/weitere-highlights-list-label-27/ https://www.combit.blog/de/weitere-highlights-list-label-27/#respond Tue, 26 Apr 2022 11:19:09 +0000 https://www.combit.blog/?p=11110 Wie bei jeder Version gibt es auch in Version 27 viel zu viele neue Funktionen, um sie alle in einem eigenen Blogbeitrag zu behandeln. Deshalb gibt es hier eine kurze Zusammenfassung von einigen versteckten Funktionen, die durchaus Aufmerksamkeit verdienen.

The post Weitere Highlights in List & Label 27 appeared first on List & Label.

]]>
  • Unterstützung für Windows 11, Visual Studio 2022 und .NET 6
  • Parametrisierte Datenquellen unterstützen jetzt die Übergabe einer Anzeigeformeloption, um den angezeigten Wert für den automatisch generierten Parameter festzulegen. Dies ermöglicht die Verwendung von ID-Werten für den Parameter selbst, während ein benutzerfreundlicher Anzeigewert angezeigt wird.
  • Die Dialogfelder AskString$ und AskStringChoice$ sind jetzt in der Größe veränderbar.
  • Neuer Barcodetyp: Pharmacode
  • Neuer Bildtyp: SVGZ (komprimiertes SVG)
  • Berichtsparameter können nun über einen regulären Ausdruck validiert werden.
  • Die Funktion Drawing() kann eine gültige SVG-Zeichenkette empfangen, die sofort in ein Bild umgewandelt wird, z. B. Drawing(‚<svg height=“100″ width=“100″><circle cx=“50″ cy=“50″ r=“40″ stroke=“black“ stroke-width=“3″ fill=“red“ /></svg>‘).
  • Linien werden jetzt als Inline-SVG-Dateien nach XHTML exportiert. Linienstile werden ebenfalls teilweise unterstützt, diagonale Linien sind keine Rasterbilder mehr.
  • Die .NET-Komponente versucht nun automatisch, Base64-kodierte Bilder zu dekodieren, wenn sie z.B. über LL.Fields.Add(„MyBase64Image“, Base64String, LlFieldType.Drawing) definiert sind. Hinweis: Diese Funktion erfordert, dass der Base64-String auf ein Vielfaches von vier Bytes mit „=“ aufgefüllt wird, wie in RFC 4648 definiert.
  • Wenn eine Vorschau Eingabeobjekte enthält, bietet das Ribbon nun zwei verschiedene PDF-Modi (PDF mit Eingabeobjekten und PDF mit Eingabedaten als fester Text).
  • JPEG-Bilder mit EXIF-Drehinformationen werden jetzt automatisch korrekt angezeigt.
  • Die erweiterten Eigenschaften von 2D-Barcodes (Aztec, QRCode, DataMatrix, PDF417, MicroPDF417, Maxicode) sind jetzt über DOM zugänglich.
  • Kreisdiagramme unterstützen jetzt eine maximale Segmentanzahl. Alle zusätzlichen Segmente werden dann als „Andere“ zusammengefasst. Vorher gab es nur einen Mindestanteil, der nicht flexibel genug war, wenn viele Segmente denselben (kleinen) Anteil hatten.
  • Das HTML-Objekt unterstützt jetzt https für Downloads.
  • VCL FireDac: Die ExportOptions können nun direkt über die Klasse ExportOptions gesetzt werden.
  • VCL FireDac: vereinfachte Variante für Einstellungsoptionen & Druckoptionen
  • Kreuztabellen-Gruppierungszellen können jetzt ein Bild enthalten.

Damit sind die Beiträge zur Version 27 abgeschlossen. Wir beginnen in Kürze, über die kommende Version 28 zu bloggen. Bleiben Sie dran!

The post Weitere Highlights in List & Label 27 appeared first on List & Label.

]]>
https://www.combit.blog/de/weitere-highlights-list-label-27/feed/ 0
Neue Funktionen für den Excel-Export https://www.combit.blog/de/excel-export/ https://www.combit.blog/de/excel-export/#respond Tue, 29 Mar 2022 14:51:53 +0000 https://www.combit.blog/?p=10936 Nachdem wir in Version 26 den PDF-Export überarbeitet haben, haben wir in Version 27 dem Excel-Export etwas mehr Aufmerksamkeit geschenkt. Gleich drei häufig gewünschte Funktionen haben wir hinzugefügt.

The post Neue Funktionen für den Excel-Export appeared first on List & Label.

]]>

Mehr Flexibilität bei der Benennung von Arbeitsblättern

Der XLS-Export ermöglicht es nun, die verschiedenen Arbeitsblätter besser zu benennen. Geben Sie hierfür den Elementen des Berichts-Containers im Designer einen beschreibenden Namen und verwenden Sie „{ItemName}“ als Platzhalter in der für XLS.WorksheetName verwendeten Zeichenfolge. Dementsprechend kann der bisherige Platzhalter „%d“ für die Seitenzahl nun durch „{PageNumber}“ ersetzt werden, was übersichtlicher ist. Diese Funktion stammt aus unserem Idea Place. Ein Beispiel wäre (.NET):

LL.ExportOptions.Add(LlExportOption.XlsAllPagesOneSheet, „0“);
LL.ExportOptions.Add(LlExportOption.XlsWorksheetName, „{ItemName} on Page {PageNumber}“);

Die erste Option sorgt dafür, dass die Seiten auf verschiedene Blätter aufgeteilt werden. Ein Bericht mit diesem Layout …

… führt in Excel zu folgendem Ergebnis:

Gitternetzlinien ausblenden

Die meisten Excel-erfahrenen Benutzer, die das Ergebnis oben sehen, blenden als erstes die Gitternetzlinien aus. Dadurch gestalten sie das Ergebnis visuell ansprechender. Jedoch mussten Ihre Benutzer diesen Vorgang jedes Mal wiederholen, wenn sie einen Excel-Export öffneten. An dieser Stelle kommt eine weitere neue Option zur Hilfe, die das Leben einfacher macht:

LL.ExportOptions.Add(LlExportOption.XlsShowGridlines, „0“);

Diese liefert sofort das gewünschte Ergebnis.

Hyperlinks in Texte einfügen

Bislang wurden Hyperlinks nur in der Vorschau sowie im HTML- und PDF-Export unterstützt. Jetzt sind Ihre Hyperlinks auch auf Textobjekten und Tabellenzellen in Excel verfügbar. Wenn Sie also das Feld für den Kategorienamen auf diese Weise konfigurieren, …

… wird jetzt auch in Excel ein Hyperlink angezeigt:

Hinzu kommt eine beträchtliche Einsparung von Speicherplatz, die wir bereits in Version 25 unterversionär heimlich hinzugefügt haben. Vielen Dank für all die großartigen Ideen, die wir in unserem Idea Place sammeln – machen Sie weiter so!

The post Neue Funktionen für den Excel-Export appeared first on List & Label.

]]>
https://www.combit.blog/de/excel-export/feed/ 0