Kompatibilitätseinstellungen – Verschachtelte Transaktionen (Teil 3)

Automatisch übersetzt von Deepl

Willkommen zu unserer fortlaufenden Serie über Kompatibilitätseinstellungen und „versteckte“ Funktionen zur Verbesserung der Leistung. Im ersten Beitrag haben wir uns mit dem Befehl QUERY BY FORMULA und seinen Auswirkungen auf das Verhalten einer Anwendung beschäftigt. Im zweiten Beitrag ging es um die Kompatibilitätsoption„Punkt und Komma als Platzhalter verwenden„, mit der sich Probleme mit der Anzeige der Zahlen als >>>>>>>>> vermeiden lassen.

In diesem dritten Teil werden wir uns mit verschachtelten Transaktionen beschäftigen.

Wenn diese Option auf Ihrer Kompatibilitätsseite nicht sichtbar ist (weil Sie Ihre Struktur mit 4D v11 oder später erstellt haben) oder sie bereits aktiviert ist, brauchen Sie nicht weiterzulesen. Wenn dies nicht der Fall ist, läuft Ihre Anwendung in einem Modus, der 4D v2004 emuliert. Sie verpassen nicht nur eine Menge großartiger Funktionen, sondern befinden sich auch in einer riskanten Lage, da dieser Modus nicht mehr von 4D getestet wird.

Als 4D vor 25 Jahren erstmals Transaktionen einführte, unterstützte es nur eine einzige Transaktionsebene: Operationen waren entweder in einer Transaktion oder nicht. Seit mehr als 10 Jahren unterstützt 4D jedoch mehrstufige (verschachtelte) Transaktionen. Das sollten Sie ausnutzen!

Wenn Sie noch nie mit Transaktionen gearbeitet haben, empfehle ich Ihnen, diesen Blogbeitrag über Transaktionen zu lesen … ansonsten lesen Sie weiter!

Kompatibilitätskennzeichen für verschachtelte Transaktionen

Warum gibt es dann überhaupt eine Option? Ist es nicht besser, immer verschachtelte Transaktionen zu verwenden?

Ja, das ist viel besser. Es kann jedoch sein, dass Ihr vorhandener Code mit nur einstufigen Transaktionen geschrieben wurde, daher die Option.

START TRANSACTION
START TRANSACTION // second call by accident, ignored from 4D v2004
VALIDATE TRANSACTION // v2004 was now at the end, no transaction running anymore
// v11 still has a transaction open…

Aber warum? Was könnte passieren? Gut, dass Sie fragen!! Nehmen wir an, ein Endbenutzer beendet eine Anwendung mit nur einstufigen Transaktionen, die möglicherweise noch unbestätigte, nicht validierte Transaktionen offen hat. Diese werden automatisch storniert, und die ganze Arbeit könnte verloren gehen!

Bevor Sie das Kompatibilitätskennzeichen für verschachtelte Transaktionen aktivieren, sollten Sie Ihren Code sorgfältig überprüfen und sicherstellen, dass alle Aufrufe von Transaktionen ausgeglichen sind. Stellen Sie sicher, dass sie nicht nur geöffnet, sondern auch geschlossen werden. Eine Methode, die innerhalb einer WENN-Bedingung aufgerufen wird, könnte beispielsweise eine Transaktion starten, aber schwer zu finden sein, wenn der Code nicht gut strukturiert und organisiert ist.

Es gibt zwei Möglichkeiten, dies zu überprüfen:

  1. Die erste besteht darin, einen vollständigen Code-Audit durchzuführen, was sehr zeitaufwendig sein kann. Es gibt aber auch eine andere Möglichkeit.
  2. Wenn Ihre Anwendung nur einen Prozess verwendet, könnte es sehr einfach sein. Prüfen Sie im Ereignis On Exit, ob noch irgendwelche Transaktionen offen sind. Wenn ja, melden Sie dies (senden Sie sich selbst eine E-Mail, rufen Sie den Administrator an usw.) UND validieren Sie die Transaktion (vorausgesetzt, es handelt sich um eine versehentlich geöffnete Transaktion).

Da Sie höchstwahrscheinlich mehrere Prozesse haben werden, müssen Sie diese identifizieren. Wenn Sie eine generische Methode haben, die Sie in jedem Prozess aufrufen, wenn Sie ihn starten oder beenden, ist das kein Problem. Wenn nicht, müssen Sie diese Prozesse finden und jeden von ihnen ändern. Prüfen Sie am Ende eines jeden Prozesses die Transaction level.

Zu diesem Zeitpunkt sollten Sie nichts weiter unternehmen. Bevor Sie verschachtelte Transaktionen verwenden, überprüfen Sie Ihren Code!

Aussetzen von Transaktionen

Sobald Sie verschachtelte Transaktionen aktiviert haben, werden Sie einen weiteren Vorteil bemerken. Sie können die Schlummertaste drücken!

Nehmen wir an, Sie befinden sich in einer Transaktion und müssen einen Zähler erhöhen, der in einer anderen Tabelle gespeichert ist(z. B. eine Rechnungsnummer). Solange die Transaktion geöffnet ist, sind alle geänderten Datensätze gesperrt, so dass andere Benutzer oder Prozesse sie nicht ändern können. Während dies für die Rechnung selbst in Ordnung sein mag, ist es für den Rechnungsnummernzähler nicht so gut. In der Vergangenheit haben die Entwickler versucht, dieses Problem zu umgehen, indem sie einen weiteren Prozess starteten und Prozesse zur Abwicklung der Kommunikation erstellten. Das ist eine Menge Code, nur um etwas außerhalb einer Transaktion auszuführen. Glücklicherweise gibt es einen besseren Weg… sobald verschachtelte Transaktionen aktiviert sind, können Sie sie jederzeit unterbrechen. So können Sie den Zähler erhöhen und die Transaktion fortsetzen.

Dies ist eine so fantastische Funktion, dass es in der Dokumentation einen ganzen Artikel darüber gibt!

Speicher

Unabhängig davon, ob Sie verschachtelte Transaktionen verwenden oder nicht, sollten Sie sich darüber im Klaren sein, dass Transaktionen den benötigten Speicherplatz erhöhen , da geänderte Daten in einem temporären Puffer gespeichert werden. Darüber hinaus erstellt 4D intern auch temporäre Indizes, die die Ausführung von Abfragen ermöglichen.

Je größer Ihre Tabellen sind (da mehr Felder indiziert werden und mehr Datensätze geändert werden), desto mehr Speicher wird benötigt. Wenn Ihr Speicher nicht ausreicht, werden neben Ihren .4DD-Dateien temporäre Dateien angelegt (um den temporären Puffer zu speichern). Diese Dateien beheben zwar die Speicherknappheit, können aber die Leistung Ihrer Anwendung beeinträchtigen.

Auch wenn Transaktionen großartig sind, ist es nicht die beste Idee, Millionen von Datensätzen in einer einzigen Transaktion zu bearbeiten!

Thomas Maul
• VP of Strategy, 4D Product Line • Als die deutsche Niederlassung von 4D 1988 gegründet wurde, trat Thomas dem Unternehmen als Technischer Direktor bei und half beim Aufbau der 4D Entwicklergemeinschaft in Deutschland und Österreich. Nach vielen Jahren, in denen er Kunden bei technischen Problemen unterstützte und zunehmend in Vertriebs- und Managementfragen involviert war, wurde er 1999 zum Geschäftsführer von 4D Deutschland befördert. Seit 2005 war er als Mitglied der Geschäftsleitung an der weltweiten Strategie des Unternehmens beteiligt, was zu seiner jetzigen Position als Vice President of Strategy, 4D Product Line, führte, wo er für die Definition und Umsetzung der Gesamtstrategie für die 4D Produktlinie in Verknüpfung mit den Teams für Programm, F&E, Vertrieb und Marketing verantwortlich ist.