Process Flag
Kurze Beschreibung
Der Process Flag ermöglicht es dem System, zu wissen, dass ein bestimmter Prozess läuft oder eine Funktionalität ausgeführt werden soll.
Warum keine "Single Instance"
Eine "Single Instance"-Codeunit überlebt Fehler, was dazu führen kann, dass nachfolgende Prozesse den vorherigen Zustand sehen und Code im falschen Kontext ausführen. Das Process Flag wird jedoch bei einem Fehler automatisch deaktiviert.
Vorteile
- Ermöglicht eine gezielte Reaktion im gesamten System auf einen laufenden Prozess.
- Vermeidet den Erhalt veralteter Informationen, indem es bei Fehlern zurückgesetzt wird.
Nachteile
- Funktioniert nur, solange die "Process Flag"-Codeunit aktiv ist.
- Erfordert Überlegungen, um Flags über mehrere Event Subscriber hinweg zu setzen und aufrechtzuerhalten.
Beispiel
Sie benötigen eine "Funktion", die tief innerhalb einer Standardbuchungsfunktionalität ausgeführt werden soll, jedoch nur, wenn der Benutzer die Buchung über eine spezifische "Seitenaktion" gestartet hat.
Das Problem:
Es gibt keinen direkten Weg, diese Information durch die Standardbuchungsfunktionalität hindurch zu übermitteln.
Die Lösung:
Sie setzen ein "Flag", bevor Sie in Ihrer "Seitenaktion" die Standardbuchungsfunktionalität aufrufen. An einem bestimmten Punkt innerhalb der Standardbuchungsfunktionalität führen Sie Ihre "Funktion" basierend auf diesem "Flag" aus. Wenn Sie eine Single Instance-Codeunit für das "Flag" verwenden würden, würde dieses einen Fehler überleben und eine nachfolgende Ausführung der Standardbuchungsaktion würde weiterhin das "Flag" sehen und Ihre "Funktion" ausführen.
Nachteil:
Das "Process Flag" funktioniert nur, solange die "Process Flag"-Codeunit aktiv ist. Um ein "Flag" in einem Event Subscriber zu setzen und es später in einem anderen Event Subscriber noch aktiv zu halten, sind einige Überlegungen notwendig.
Anwendung
Enum "Process Flag"
Enthält die definierten Flags und muss mit Ihren Flags erweitert werden.
Vorschläge:
- Definieren Sie Flags basierend auf dem Ziel und nicht auf der Quelle.
- Beispiel: „Standardbuchungsfunktionalität - Funktion ausführen“ statt „Dokument - Seitenaktion“.
- Namensschema: „
- “.
Codeunit "Process Flag"
Schnittstelle zum Aktivieren, Deaktivieren oder Überprüfen von Flags.
Basisfunktionen:
- Enable(Flag):
- Aktiviert das Flag für die Codeunit-Instanz. Bindet die manuelle Subscription der Codeunit-Instanz, sobald das erste Flag gesetzt ist.
- Disable(Flag):
- Deaktiviert das Flag für die Codeunit-Instanz. Hebt die manuelle Subscription der Codeunit-Instanz auf, nachdem das letzte Flag entfernt wurde.
- DisableAll():
- Deaktiviert alle Flags für die Codeunit-Instanz. Hebt die manuelle Subscription der Codeunit-Instanz auf.
Erweiterte Funktionen:
- Enable(Flag; Value):
- Wie "Enable(Flag)". Zusätzlich wird ein Wert für das Flag gespeichert (z. B. eine Codeunit, um mehrere Werte zu speichern).
- Check(Flag):
- Überprüft, ob das Flag in allen Codeunit-Instanzen mit gebundenen manuellen Subscriptions aktiviert ist.
- GetLevel(Flag):
- Gibt die Anzahl der Codeunit-Instanzen zurück, die das Flag aktiviert haben.
- GetValue(Flag):
- Gibt den zuletzt gespeicherten Wert für das Flag aus den Codeunit-Instanzen mit gebundenen manuellen Subscriptions zurück.
Beispiel
- Erweitern Sie das Enum "Process Flag" mit Ihrem "Flag" (z. B. „Standardbuchungsfunktionalität - Funktion ausführen“).
- Erstellen Sie einen OnAction-Trigger für Ihre Seitenaktion.
- Aktivieren Sie Ihr Flag mit einer lokalen Codeunit-Instanz der "Process Flag"-Codeunit.
- Rufen Sie die Standardbuchungsfunktionalität auf.
- Erstellen Sie den Subscriber für den erforderlichen Event Publisher innerhalb der Standardbuchungsfunktionalität.
- Überprüfen Sie, ob Ihr Flag aktiviert ist, mit einer lokalen Codeunit-Instanz der "Process Flag"-Codeunit.
- Führen Sie die Funktion aus, wenn Ihr Flag aktiviert ist.