JavaScript-Beispiele für häufige Szenarien mit erweiterten Skriptregeln — Feldvorhandensein, numerische Vergleiche, bedingte Anforderungen und Tabellenvalidierung.
Use this file to discover all available pages before exploring further.
Die folgenden JavaScript-Beispiele veranschaulichen gängige Muster für erweiterte Skriptregeln — das Prüfen, ob ein Feld vorhanden ist, das Vergleichen numerischer Werte, das Anwenden bedingter Validierungen und das Validieren von Tabellendaten. Kopieren Sie sie und passen Sie sie an Ihre eigenen Feldnamen und Geschäftsregeln an.
Der direkte Vergleich von Gleitkommazahlen kann zu unvorhersehbaren Ergebnissen führen. Verwenden Sie Methoden des integrierten Math-Objekts, um Zahlen – insbesondere Geldbeträge – zuverlässig zu vergleichen.
// zwei Gleitkommazahlen vergleichenvar 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';}// zwei Geldwerte vergleichenvar 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';}
Je nach anderem Feld einen nicht leeren Wert verlangen
Ein optionales Feld kann erforderlich werden, wenn der Wert eines anderen Felds dies nötig macht. Wenn MaritalStatus den Wert Married hat, sollten die Felder für den Vor- und Nachnamen des Ehepartners ausgefüllt sein.Diese Skriptregel stellt sicher, dass sowohl SpouseFirstName als auch SpouseLastName ausgefüllt sind, wenn MaritalStatus den Wert Married hat:
function checkFieldValuePresence(field) { if (!field.Value) { Context.ErrorMessage = 'Wert des Felds ' + field.Name + ' darf nicht leer sein'; return false; } return true;}var conditionField = Context.GetField("MaritalStatus");if (conditionField === null) { Context.CheckSucceeded = false; Context.ErrorMessage = 'Feld MaritalStatus nicht gefunden';} 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 = 'Feld für Ehepartnername nicht gefunden'; } else if (!checkFieldValuePresence(lastName) || !checkFieldValuePresence(firstName)) { Context.CheckSucceeded = false; } }} else { // Familienstand nicht ausgefüllt, Prüfung fehlgeschlagen Context.CheckSucceeded = false;}
Prüfen, ob ein Feld auf dem Dokument vorhanden ist
Regeln können auch Feldwerte befüllen, auch wenn der Wert nicht auf dem Dokument aufgedruckt ist. Wenn beispielsweise mehrere Steuern anfallen, kann die Gesamtsteuer automatisch berechnet werden. In einigen Ländern ist jedoch vorgeschrieben, dass der Gesamtsteuerbetrag auf dem Dokument ausgewiesen ist.Diese Skriptregel prüft, dass bei Belegen aus Deutschland die Gesamtsteuer im Bild vorhanden ist. Für andere Länder ist keine zusätzliche Prüfung erforderlich, da das Flag Erforderliches Feld für das Feld „Gesamtsteuer“ aktiviert ist:
function checkFieldRegion(field) { if (!field || !field.HasRegion) { Context.ErrorMessage = 'Das Feld (' + field.Name + ') ist nicht im Dokumentbild vorhanden'; return false; } return true;}var conditionField = Context.GetField("CountryOfOrigin");if (!conditionField.Value) { Context.ErrorMessage = 'Herkunftsland unbekannt, Steuern können nicht geprüft werden'; Context.CheckSucceeded = false;} else { var totalTaxField = Context.GetField("TotalTax"); if (conditionField.Text === "DE" && !checkFieldRegion(totalTaxField)) { Context.CheckSucceeded = false; }}
Die Überprüfung, dass die Gesamtsteuer der Summe aller Steuern entspricht, kann mit einer vordefinierten Regel (Check Sum) erfolgen. Wenn jedoch in bestimmten Ländern eine der Steuern einen negativen Wert haben kann, lässt sich nur mit einer Skriptregel beiden Fällen gerecht werden — je nach Herkunftsland werden entweder alle Steuern addiert oder eine Rückerstattungssteuer addiert und subtrahiert.Dieses Skript prüft, dass die Summe zweier Steuern der Gesamtsteuer entspricht, außer wenn der Beleg aus Spanien stammt. In diesem Fall kann entweder die Summe oder die Differenz der beiden der Gesamtsteuer entsprechen:
Eine Spaltensumme mit einem externen Feld vergleichen
Skripte können nicht nur auf reguläre Felder zugreifen, sondern auch auf Tabellenwerte. Um Regelprüfungen zu beschleunigen, empfehlen wir, Tabellen als Variablen zu speichern und anschließend diese Variablen statt der ursprünglichen Tabellen zu verwenden. Wenn eine Variable eine gesamte Tabelle enthält, können Sie die Eigenschaft Instances nutzen, um auf die Zeilen der Tabelle zuzugreifen, und anschließend GetChild verwenden, um eine bestimmte Zelle in einer Zeile zu ermitteln.Das folgende Beispiel summiert alle Werte in der Spalte Total Price und vergleicht das Ergebnis mit dem Feld Total:
var totalField = Context.GetField("Total");var tableField = Context.GetField("MyTable");if (!totalField) { Context.CheckSucceeded = false; Context.ErrorMessage = "Feld Total wurde nicht gefunden"; return;}if (!tableField) { Context.CheckSucceeded = false; Context.ErrorMessage = "Feld MyTable wurde nicht gefunden"; 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 = "Die Summe von Total Price in der Tabelle stimmt nicht mit dem Gesamtbetrag überein";}
Vergleichen Sie Spaltenzellen mit einem externen Feld und listen Sie fehlerhafte Zeilen auf
Mit Context.GetFields können Sie auf Tabellenspalten verweisen, um jede Zelle in der Spalte abzurufen, was für Schleifen nützlich ist.Das folgende Beispiel vergleicht den Steuersatz jeder Zeile mit dem Gesamtsteuersatz. Stimmen die Werte nicht überein, wird das Skript nicht sofort abgebrochen, sondern sammelt die Zeilennummern mit Abweichungen und meldet sie in der Fehlermeldung:
Vergleichen Sie das Produkt von Werten in einer Zeile mit einem anderen Zeilenwert
Sie können Operationen für verschiedene Spalten in einer Tabelle zeilenweise ausführen, ohne explizite Schleifen zu verwenden — referenzieren Sie jede Spalte dazu mit Context.GetField. Dadurch wird eine wiederkehrende Regel erstellt, die automatisch für jede Zeile ausgeführt wird. Alle so referenzierten Spalten müssen zu derselben Tabelle gehören.Das folgende Beispiel multipliziert für jede Zeile die Stückzahl mit dem Stückpreis und vergleicht das Ergebnis mit dem Gesamtpreis der Position: