ValidateScriptForCurrentDotUpdate

  • Rversion finale: Zurich
  • Mis à jour 31 juil. 2025
  • 3 minutes de lecture
  • Le validateur ValidateScriptForCurrentDotUpdate trouve les activités de workflow avec des scripts qui utilisent la fonction current.update( ).

    L’appel de current.update() entraîne des retards de performance importants dans le traitement des transactions et peut entraîner le blocage d’une instance.

    Résumé de validation

    • Risque : au mieux, un workflow qui utilise current.update() dans les scripts subit des performances dégradées. Dans le pire des cas, le flux de travail entre dans une boucle récursive infinie qui fait planter le serveur.
    • Niveau de gravité : Avertissement
    • Résultat valide : valide
    • Message valide : le JavaScript dans ce workflow n’a pas d’instances de « current.update() ».
    • Résultat non valide : non valide
    • Message non valide : ce workflow utilise « current.update() » dans les instructions JavaScript <nombre de références current.update>.
    • Action suggérée : supprimez current.update() des scripts d’activité cités par ce validateur. Les workflows s’exécutent au sein d’une transaction, et la valeur actuelle est mise à jour, voire insérée, à la fin de la transaction, selon le cas. Il n’est pas nécessaire de mettre à jour explicitement l’enregistrement pendant la transaction.
    • Publiable : oui
    • Exécutable : oui

    Problèmes avec current.update() dans les scripts de workflow

    Un workflow initie l’exécution de l’une des façons suivantes :
    • Moteur de script : si un workflow est affecté à une table spécifique et qu’une condition d’exécution est donnée, le workflow s’exécute sur INSERT.
    • Script : Toute règle métier, script include, script d’arrière-plan ou script client peut initier un workflow en utilisant l’include de script du workflow et en appelant startFlow().

    Le moteur de workflow lance un workflow en fonction des critères de correspondance de l’enregistrement actuel en cours d’insertion. La transaction pour la transaction actuelle est gérée par le moteur de script et non par le workflow. Les workflows qui progressent sur update () de l’enregistrement actuel ne sont pas invoqués via le moteur de workflow, mais en tant qu’appel à partir d’un script client ou d’une règle métier. Dans les deux cas, le moteur de script est invoqué et l’enregistrement actuel est mis en mémoire. Les contrôles et modifications apportés à tous les champs actuels sont effectués et sont disponibles pour d’autres activités et scripts exécutés dans la même transaction.

    Le cas échéant, d’autres moteurs qui s’exécutent en séquence avec le moteur de workflow, tels que le moteur de règle métier ou la normalisation de champ, sont invoqués par rapport à la même transaction d’enregistrement en cours. Tous les changements apportés à la mise à jour par le biais de ces scripts et activités modifient l’enregistrement en mémoire. Ces valeurs changeantes peuvent être consultées dans toutes les autres transactions appelées à partir d’activités et de scripts de la même transaction INSERT. Lorsque tous les changements attendus sont exécutés, l’enregistrement actuel est inséré.

    Lorsque l’un de ces scripts appelle current.update() sur un enregistrement qui n’a pas encore été inséré, l’action force une transaction de base de données inutile et sujette aux erreurs. Si un enregistrement ne se trouve pas encore dans la base de données, il ne peut pas être mis à jour. Les règles métier qui se déclenchent sur update() sur un enregistrement en cours d’insertion peuvent provoquer une condition de bouclage très instable et potentiellement infinie.

    Dépannage

    Ce validateur détecte l’utilisation de current.update() dans l’un des champs de script modifiables. N’appelez pas current.update() à partir d’un script de workflow. En cas d’INSERT ou de UPDATE de current, les modifications apportées à current sont disponibles pour tous les scripts exécutés dans la même transaction, et le moteur de script stocke toutes les modifications dans la base de données. Laissez la mise à jour du courant au moteur. Utilisez les scripts uniquement pour définir et référencer les valeurs de champ actuelles.