Exemples JavaScript pour des scénarios courants de Advanced Script Rules — présence d’un champ, comparaisons numériques, exigences conditionnelles et validation de tableaux.
Use this file to discover all available pages before exploring further.
Les exemples JavaScript ci-dessous illustrent des cas courants d’utilisation des Advanced Script Rules : vérifier la présence d’un champ, comparer des valeurs numériques, appliquer une validation conditionnelle et valider des données de tableau. Copiez-les et adaptez-les à vos propres noms de champ et règles métier.
La comparaison directe de nombres à virgule flottante peut produire des résultats imprévisibles. Utilisez les méthodes de l’objet natif Math pour comparer les nombres de manière fiable, en particulier les montants.
// comparer deux nombres à virgule flottantevar floatField1 = Context.GetField("Number Field 1");var floatField2 = Context.GetField("Number Field 2");var floatVal1 = floatField1.Value;var floatVal2 = floatField2.Value;if (Math.round(floatVal1) === Math.round(floatVal2)) { return;} else { Context.CheckSucceeded = false; Context.ErrorMessage = 'The values are different';}// comparer deux valeurs monétairesvar moneyField1 = Context.GetField("Money Field 1");var moneyField2 = Context.GetField("Money Field 2");var value1 = moneyField1.Value.Amount;var value2 = moneyField2.Value.Amount;if (Math.abs(value1 - value2) <= 0.0001) { return;} else { Context.CheckSucceeded = false; Context.ErrorMessage = 'The values are different';}
Exiger une valeur non vide en fonction d’un autre champ
Un champ optionnel peut devenir obligatoire en fonction de la valeur d’un autre champ. Par exemple, si MaritalStatus est Married, les champs correspondant au nom du conjoint doivent être renseignés.Cette règle de script vérifie que, lorsque MaritalStatus est Married, SpouseFirstName et SpouseLastName sont tous deux renseignés :
function checkFieldValuePresence(field) { if (!field.Value) { Context.ErrorMessage = 'La valeur du champ ' + field.Name + ' ne doit pas être vide'; return false; } return true;}var conditionField = Context.GetField("MaritalStatus");if (conditionField === null) { Context.CheckSucceeded = false; Context.ErrorMessage = 'Champ MaritalStatus introuvable';} else if (checkFieldValuePresence(conditionField)) { var lastName = Context.GetField("SpouseLastName"); var firstName = Context.GetField("SpouseFirstName"); if (conditionField.Text === "Married") { if (lastName === null || firstName === null) { Context.CheckSucceeded = false; Context.ErrorMessage = 'Champ nom du conjoint introuvable'; } else if (!checkFieldValuePresence(lastName) || !checkFieldValuePresence(firstName)) { Context.CheckSucceeded = false; } }} else { // statut matrimonial non renseigné, vérification échouée Context.CheckSucceeded = false;}
Les règles peuvent également servir à renseigner les valeurs du champ, même si la valeur n’est pas imprimée sur le document. Par exemple, si plusieurs taxes s’appliquent, la taxe totale peut être calculée automatiquement. Toutefois, certains pays exigent que le montant de la taxe totale figure sur le document.Cette règle de script vérifie que, pour les reçus émis en Allemagne, la taxe totale est bien présente sur l’image. Pour les autres pays, aucune vérification supplémentaire n’est nécessaire, car l’indicateur champ obligatoire est activé pour le champ de la taxe totale :
function checkFieldRegion(field) { if (!field || !field.HasRegion) { Context.ErrorMessage = 'Le champ (' + field.Name + ') n\'est pas présent sur l\'image du document'; return false; } return true;}var conditionField = Context.GetField("CountryOfOrigin");if (!conditionField.Value) { Context.ErrorMessage = 'Pays d\'origine inconnu, impossible de vérifier les taxes'; Context.CheckSucceeded = false;} else { var totalTaxField = Context.GetField("TotalTax"); if (conditionField.Text === "DE" && !checkFieldRegion(totalTaxField)) { Context.CheckSucceeded = false; }}
Vérifier que la taxe totale est égale à la somme de toutes les taxes peut se faire à l’aide d’une règle prédéfinie (Check Sum). Mais si, dans certains pays, l’une des taxes peut être négative, seule une règle de script peut gérer les deux cas — additionner toutes les taxes, ou additionner et soustraire une taxe de remboursement, selon le pays d’origine.Ce script vérifie que la somme de deux taxes est égale à la taxe totale, sauf pour les reçus provenant d’Espagne, où soit la somme, soit la différence des deux peut être égale à la taxe totale :
Comparer la somme d’une colonne à un champ externe
Les scripts peuvent faire référence à des valeurs de tableau et pas seulement à des champs. Pour accélérer les vérifications de règles, enregistrez les tableaux dans des variables, puis référencez ces variables au lieu de récupérer à nouveau le tableau. Si une variable contient un tableau entier, utilisez la propriété Instances pour accéder aux lignes, puis utilisez GetChild pour obtenir une cellule donnée dans une ligne.L’exemple ci-dessous additionne toutes les valeurs de la colonne Total Price et compare le résultat au champ Total :
var totalField = Context.GetField("Total");var tableField = Context.GetField("MyTable");if (!totalField) { Context.CheckSucceeded = false; Context.ErrorMessage = "Le champ Total est introuvable"; return;}if (!tableField) { Context.CheckSucceeded = false; Context.ErrorMessage = "Le champ MyTable est introuvable"; return;}var sum = 0;for (var i = 0; i < tableField.Instances.length; i++) { var tableTotalField = tableField.Instances[i].GetChild("MyTable/Total Price"); sum += tableTotalField.Value.Amount;}if (Math.abs(sum - totalField.Value.Amount) > 0.02) { Context.CheckSucceeded = false; Context.ErrorMessage = "La somme des Prix Totaux du tableau ne correspond pas au Total";}
Comparer les cellules d’une colonne à un champ externe et lister les lignes en erreur
Utilisez Context.GetFields pour référencer les colonnes d’un tableau et obtenir chaque cellule de la colonne, ce qui est utile pour effectuer des boucles.L’exemple ci-dessous compare le taux d’imposition de chaque ligne au taux d’imposition global. Lorsque les valeurs ne correspondent pas, le script continue au lieu d’échouer immédiatement, en collectant les numéros des lignes présentant des écarts et en les indiquant dans le message d’erreur :
Comparer le produit de valeurs d’une ligne à une autre valeur de la même ligne
Vous pouvez effectuer des opérations sur différentes colonnes d’un tableau, ligne par ligne, sans utiliser de boucles explicites — référencez chaque colonne à l’aide de Context.GetField. Cela crée une règle répétée qui s’exécute automatiquement pour chaque ligne. Toutes les colonnes référencées de cette manière doivent appartenir au même tableau.L’exemple ci-dessous multiplie la quantité unitaire par le prix unitaire pour chaque ligne et compare le résultat au prix total de la ligne d’article :
var quantityField = Context.GetField("MyTable/Quantity");var unitPriceField = Context.GetField("MyTable/Unit Price");var totalField = Context.GetField("MyTable/Total Price");if (!quantityField || !unitPriceField || !totalField) return;var quantity = quantityField.Value ? quantityField.Value : 0;var unitPrice = unitPriceField.Value?.Amount ? unitPriceField.Value.Amount : 0;var total = totalField.Value?.Amount ? totalField.Value.Amount : 0;var result = quantity * unitPrice;if (Math.abs(result - total) > 0.01) { Context.CheckSucceeded = false; Context.ErrorMessage = "Quantité × Prix unitaire n'est pas égal au Total";}
Ajoutez des règles scriptées à une Compétence de document, configurez des champs accessibles en lecture et en écriture, et faites référence aux colonnes de tableau.
Modèle objet
Référence complète des objets JavaScript à utiliser dans Advanced Script Rules.
Context
L’objet global Context — accédez au document, aux champs et aux paramètres de compétence dans une règle.
Field
L’objet Field — inspectez et modifiez un champ du document pendant l’exécution de la règle.