Web-Reporte in Lazarus unter Linux

2020-12-15

Bis vor kurzem war die Aufgabe, Reporte über das Web aus einer in Lazarus geschriebenen Anwendung zu erstellen, beispielsweise sehr kreativ.Heute freuen wir uns, Ihnen mitteilen zu können, dass sich die Client-Server-Komponenten für Lazarus im Beta-Test befinden. Mit ihrer Hilfe können Sie einen Server für Ihre Anforderungen zum Remote-Erstellen und Exportieren von Reporten erstellen und konfigurieren. Sowohl Ihr Programm als auch ein Webbrowser können als Client fungieren.

Client-Server-Komponenten in VCL FastReport sind seit langem implementiert, wurden jedoch zuvor nicht für Lazarus angepasst und funktionierten nur in Rad Studio Delphi und C ++ Builder.

Der Artikel ist nicht nur für diejenigen nützlich, die sie noch nie verwendet haben, sondern auch für diejenigen, die ihren FR-Server auf Linux migrieren möchten, da er ehrlich alle Vor- und Nachteile beschreibt. Auch haben wir einen Fehler in Lazarus gefunden und eine Lösung vorgeschlagen.

Und weiter zu technischen Fragen.

Client-Server-Komponenten für die Reporterstellung in Lazarus

Die Client / Server-Komponenten in Lazarus sind unter zwei Betriebssystemen verfügbar: Windows und Linux (nur GTK2). Sie sind im Paket "fr6CS_lazarus.lpk" implementiert, in dessen Abhängigkeiten das Exportpaket angegeben ist. Daher müssen Sie vor der Installation das Exportpaket im Ordner "Source / ExportPack" installieren.

Nach der Installation des Pakets der Client-Server-Komponenten wird eine neue Registerkarte "FastReport 6.0 Client / Server" angezeigt, auf der 4 Komponenten vorhanden sind:

Web-Reporte in Lazarus unter Linux

1. TfrxReportServer ist eine Serverkomponente, ein Reportsserver und ein Zwei-in-Eins-HTTP-Server. Das wichtigste Feld ist ConfigFileName, in dem Sie den Pfad zur XML-Datei mit den Einstellungen angeben sollten.

In dieser Datei können viele Einstellungen angegeben werden, hier nur die wichtigsten:

  • Servereinstellungen wie Port und Timeout;
  • Einstellungen der FR-Engine, z. B. Deaktivieren der Ausführung von Skripten;
  • Riesige Exporteinstellungen;
  • Cache-Einstellungen, z. B. die Lebensdauer von Cache-Dateien, deren Speicherort oder das vollständige Deaktivieren.
  • Systemeinstellungen protokollieren;
  • Einstellungen für die Verbindung zur Datenbank.

Über alle diese Einstellungen können Sie hier lesen.

2. TfrxServerConnection - Clientkomponente mit Informationen zur Remoteverbindung zu TfrxReportServer, z. B.: Host, Port, Anzahl der Fehlerversuche, Zeitüberschreitung usw.

3. TfrxReportClient - Eine Clientkomponente führt analog zu TfrxReport eine Reportsanforderung auf dem Server aus und zeigt sie auf dem Client an. Um Informationen über den Server zu erhalten, wird die erwähnte TfrxServerConnection-Komponente verwendet. Es kann einen erstellten Report vom Server empfangen und ihn selbst (auf dem Client-Computer) anzeigen oder exportieren.

4. TfrxHTTPClient - Eine Client-Komponente, die beliebige Dateien über das HTTP-Protokoll empfängt. Beispielsweise kann der Server nach bereits exportierten Reporten gefragt werden.

Wir bieten auch 3 Demo-Anwendungen:

- 1 Server - zusammen mit Reporten und Datenbanken;
- 2 Kunden - einfach und fortgeschritten.

Für einen "erweiterten" Client können Sie Last-Multithread-Tests durchführen, indem Sie auf die Schaltfläche Start klicken:

Web-Reporte in Lazarus unter Linux

Ich möchte Sie auch daran erinnern, dass der Client ein normaler Browser sein kann und die Generierung der Site für den Webclient auch nach Ihrem Geschmack angepasst werden kann und der Demoserver bereits für den Webclient konfiguriert ist.

Web-Reporte in Lazarus unter Linux

“Engpass” GTK2

Lazarus ist eine plattformübergreifende Open Source-IDE. Aber hier gibt es leider auch eine "Fliege in der Salbe". Wir beginnen mit dem unangenehmsten, nämlich dem Linux-Server.

GTK2 hat eine äußerst ärgerliche Eigenschaft: Single-Threading.

Dies bedeutet, dass GTK2 alles auf nur einzigen Thread einschränkt, selbst wenn 2 Programme in einer Endlosschleife Zahlen auf ihre BitMaps zeichnen. Insgesamt zeichnen diese beiden Programme daher weniger Zahlen als ein Programm, da ein Teil der Zeit für die Synchronisation aufgewendet wird.

In diesem Fall wird die Synchronisation jedoch ohne unsere Teilnahme organisiert.

Nehmen wir zum Beispiel eine Situation, in der Zahlen von einem Programm in mehreren Threads gezeichnet werden (jeder Thread hat seine eigene lokale BitMap). In diesem Fall müssen Sie im Code ein Schließsystem erstellen, da wir uns daran erinnern, dass diese Bibliothek Single-Threaded ist. Dies sollten jedoch keine gewöhnlichen kritischen Abschnitte sein, sondern globale kritische Abschnitte der GTK2-Ebene. Und wenn einer der Threads in diese kritische Funktion eintritt, hängt sogar die Hauptform, bis sie sie verlässt.

Multithreading mit Bildern kann nur organisiert werden, indem eine ähnliche Komponente gefunden wird, die eine Zeichnung implementiert, die unabhängig von GTK2 ist (für dieses Beispiel mit Bildern ist beispielsweise Kairo geeignet). In unserem Fall ist eine andere Komponente nicht geeignet.

Daher werden einige Vorgänge auf dem Server auf 1 Thread eingegrenzt.

Insbesondere aufgrund dieser Funktion ist es besser, keine Dialoge zu verwenden, da die Erstellung von Reporten für andere Clients angehalten wird, solange 1 Client auf den Dialog reagiert.

Es kann sich die Frage stellen: "Warum benötigen Sie dann einen Single-Threaded-Server?" und Sie werden teilweise Recht haben, da es dem Engpassproblem auf Straßen ähnlich ist, bei denen die Gesamtkapazität der Straße gleich der Kapazität der Straße an ihrer engsten Stelle ist.
Aber Sie werden nur teilweise Recht haben. Nur drei große Vorgänge werden auf einen Stream eingegrenzt: Laden von den Reporten, vom Erstellen und vom Exportieren. Empfang und Übertragung erfolgen parallel, und aufgrund des Caching-Systems der generierten Reporte ist in einigen Fällen keine Neuerstellung erforderlich.

Und dieser Umstand in Kombination mit einem leistungsstarken Server macht dieses Problem weniger auffällig. Darüber hinaus ist dies nur für Linux (GTK2) ein Problem, da Windows dieses Problem nicht hat und mit der Veröffentlichung von GTK3 (das bereits Multithreading unterstützt) in Lazarus vollständig verschwindet.

Der Rest der Probleme ist um ein Vielfaches kleiner und im Vergleich zu diesem sogar winzig.

Was bleibt hinter den Kulissen?

Ein kleiner Teil der Funktionalität wurde während der Portierung gekürzt, nämlich CGI und das Autorisierungssystem. Wie schnell wir sie implementieren, hängt von den tatsächlichen Anfragen unserer Kunden ab.

Das Exportieren in HTML für Lazarus ist noch lange nicht perfekt. Sie können und sollten den Webclient verwenden, da er praktisch ist, aber Reporte nicht ganz perfekt anzeigt.

Sie können das System jedoch so konfigurieren, dass der Webclient Reporte empfängt, die nicht in HTML, sondern beispielsweise in PDF exportiert wurden. Schließlich können die meisten modernen Browser PDF-Dateien perfekt anzeigen. Wir haben dieses Exportformat sehr effizient implementiert, wie Sie selbst sehen können.

Fehlerbehebung bei der Lazarus 2.0.10-Nachrichtenwarteschlange

Für diejenigen, die unsere neuen Komponenten unter Linux verwenden wollen, ist eine wichtige Sache erwähnenswert: Beim Blockieren der Nachrichtenwarteschlange ist ein Fehler aufgetreten, der nicht umgangen werden konnte. Wir haben es geschafft, die Programmierer in Lazarus zu kontaktieren, sie haben dieses Problem bereits behoben und in der nächsten Version von Lazarus wird alles stabil funktionieren. Bisher muss dieser Fehler in Version 2.0.10 und niedriger lokal behoben werden. Es kostet nicht viel Zeit und Mühe, Sie müssen nur 3 Zeilen zu einer der Lazarus-Dateien hinzufügen und sie neu erstellen, nämlich:

1. Öffnen Sie den Ordner, in dem sich Lazarus befindet (unter Ubuntu beispielsweise "/usr/share/lazarus/2.0.10").
2. Öffnen Sie die Datei ~ / lcl / interfaces / gtk2 / gtk2msgqueue.pp
3. Suchen Sie die Prozedur: procedure TGtkMessageQueue.Lock;
4. Suchen Sie in dieser Prozedur die Zeile: g_main_context_acquire (FMainContext);

Dieser Code berücksichtigt nicht die Tatsache, dass die Funktion g_main_context_acquire möglicherweise fehlschlägt.

Ersetzen Sie es also durch:

repeat
until g_main_context_acquire(FMainContext);

Das heißt, wir rufen g_main_context_acquire in einer Schleife auf, bis True zurückgegeben wird (erfolgreich).

Wir laden Sie ein, unsere neuen Komponenten für Lazarus auszuprobieren, möchten Sie jedoch daran erinnern, dass dies eine Beta-Version ist und nach Ihren Anforderungen weiter verbessert wird. Melden Sie sich bei uns im Fehlerfall unbedingt für Unterstützung.

20. November 2024

Lokalisierung und Ändern von Sprachen in FastReport VCL

FastReport VCL unterstützt 40 Sprachen für die Schnittstellenlokalisierung und ermöglicht es Ihnen, die Sprache im laufenden Betrieb über Menüs oder Code ohne Neukompilierung zu ändern.
28. Oktober 2024

WSL 2 Anpassung an FastReport und FastCube

In diesem Artikel werden wir versuchen, gemeinsam herauszufinden, wie man WSL 2 konfiguriert, um mit FastReport und FastCube Komponenten in Lazarus für Linux zu arbeiten.
9. April 2024

Handhabung von FastReport Avalonia auf .NET 8 in Visual Studio Code for Linux

In diesem Artikel erfahren Sie, wie Sie Avalonia FastReport unter .NET 8 unter einem Linux-Betriebssystem mit Visual Studio ausführen.
Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2024 Fast Reports Inc.