ValidierenScriptForCurrentDotUpdate

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 2 Minuten Lesedauer
  • Die ValidierenScriptForCurrentDotUpdate Die Validierung findet Workflow-Aktivitäten mit Skripts, die verwenden Aktuell.Update() Funktion.

    Wird Aufgerufen Aktuell.Update() Verursacht erhebliche Leistungsverzögerungen bei der Transaktionsverarbeitung und kann dazu führen, dass eine Instanz hängen bleibt.

    Validierungszusammenfassung

    • Risiko : Bestenfalls ein Workflow, der verwendet Aktuell.Update() In Skripts weist eine Verschlechterung der Leistung auf. Im schlimmsten Fall geht der Workflow in eine endlose, rekursive Schleife über, die den Server abstürzt.
    • Schweregrad : Warnung
    • Gültiges Ergebnis : Gültig
    • Gültige Nachricht : Das JavaScript in diesem Workflow hat keine Instanzen von „current.Update()“.
    • Ungültiges Ergebnis : Ungültig
    • Ungültige Nachricht : Dieser Workflow verwendet „current.Update()“ in <count of current.Update references> JavaScript-Anweisungen.
    • Vorgeschlagene Aktion : Entfernen Aktuell.Update() Aus den Aktivitätsskripts, die von diesem Validator zitiert werden. Workflows werden innerhalb einer Transaktion ausgeführt, und die aktuelle wird gegebenenfalls am Ende der Transaktion aktualisiert oder eingefügt. Der Datensatz muss während der Transaktion nicht explizit aktualisiert werden.
    • Veröffentlichbar : Ja
    • Ausführbar : Ja

    Probleme mit Aktuell.Update() In Workflow-Skripts

    Ein Workflow initiiert die Ausführung auf eine der folgenden Arten:
    • Skript-Engine : Wenn ein Workflow einer bestimmten Tabelle zugewiesen ist und eine Ausführungsbedingung gegeben wird, wird der Workflow beim EINFÜGEN ausgeführt.
    • Skript : Jede Business-Regel, Skripteinbindung, Hintergrundskript oder Clientskript kann einen Workflow mithilfe der Workflow-Skripteinbindung initiieren und aufrufen StartFlow() .

    Die Workflow-Engine initiiert einen Workflow basierend auf den übereinstimmenden Kriterien des aktuellen Datensatzes, der eingefügt wird. Die Transaktion für die aktuelle wird von der Skript-Engine und nicht vom Workflow verwaltet. Workflows, die auf fortfahren Aktualisieren () Des aktuellen Datensatzes werden nicht über die Workflow-Engine aufgerufen, sondern als Aufruf von entweder einem Client-Skript oder einer Business-Regel. In beiden Fällen wird die Skript-Engine aufgerufen, und der aktuelle Datensatz wird in den Arbeitsspeicher gelegt. Änderungen an aktuellen Feldern werden vorgenommen und sind für andere Aktivitäten und Skripts verfügbar, die in derselben Transaktion ausgeführt werden.

    Gegebenenfalls werden andere Engines, die sequenziell mit der Workflow-Engine ausgeführt werden, z. B. die Business-Regel-Engine oder Feldnormalisierung, für dieselbe aktuelle Datensatztransaktion aufgerufen. Alle Änderungen, die über diese Skripts und Aktivitäten am aktuellen Tag vorgenommen werden, ändern den Datensatz im Arbeitsspeicher. Diese sich ändernden Werte sind als Referenz in allen anderen Transaktionen verfügbar, die von Aktivitäten und Skripts in derselben EINFÜGETRANSAKTION aufgerufen werden. Wenn alle erwarteten Änderungen ausgeführt werden, wird der aktuelle Datensatz eingefügt.

    Wenn eines dieser Skripts aufruft Aktuell.Update() Für einen Datensatz, der noch eingefügt werden muss, erzwingt die Aktion eine unnötige und fehleranfällige Datenbanktransaktion. Wenn sich ein Datensatz noch nicht in der Datenbank befindet, kann er nicht aktualisiert werden. Business-Regeln, die ausgelöst werden Aktualisieren () In einem Datensatz, der gerade eingefügt wird, kann eine sehr instabile und potenziell unendliche Schleifenbedingung verursachen.

    Problembehandlung

    Diese Validierung erkennt die Verwendung von Aktuell.Update() In einem der bearbeitbaren Skriptfelder. Nicht anrufen Aktuell.Update() Aus einem Workflow-Skript. Im Falle einer EINFÜGUNG oder AKTUALISIERUNG von „aktuell“ sind die am aktuellen Wert vorgenommenen Änderungen für alle Skripts verfügbar, die in derselben Transaktion ausgeführt werden, und die Skript-Engine speichert alle Änderungen in der Datenbank. Belassen Sie die Aktualisierung des Stroms in der Engine. Verwenden Sie die Skripts nur zum Festlegen und Verweisen auf die aktuellen Feldwerte.