Esempi JavaScript per scenari comuni delle Advanced Script Rules: presenza di field, confronti numerici, requisiti condizionali e convalida delle tabelle.
Use this file to discover all available pages before exploring further.
I seguenti esempi JavaScript illustrano modelli comuni per le Advanced Script Rules: verifica della presenza di field, confronto di valori numerici, applicazione della convalida condizionale e convalida dei dati nelle tabelle. Copiali e adattali ai nomi dei tuoi field e alle tue regole aziendali.
Il confronto diretto di numeri in virgola mobile può produrre risultati imprevedibili. Usa i metodi dell’oggetto integrato Math per confrontare i numeri — in particolare gli importi monetari — in modo affidabile.
// confronta due numeri in virgola mobilevar 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';}// confronta due valori monetarivar 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';}
Richiedere un valore non vuoto in base a un altro field
Un field opzionale può diventare obbligatorio in base al valore di un altro field. Ad esempio, se MaritalStatus è Married, i field del nome del coniuge devono essere compilati.Questa regola di script verifica che, quando MaritalStatus è Married, siano compilati sia SpouseFirstName sia SpouseLastName:
function checkFieldValuePresence(field) { if (!field.Value) { Context.ErrorMessage = 'Il valore del field ' + field.Name + ' non deve essere vuoto'; return false; } return true;}var conditionField = Context.GetField("MaritalStatus");if (conditionField === null) { Context.CheckSucceeded = false; Context.ErrorMessage = 'Field MaritalStatus non trovato';} 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 = 'Field del nome del coniuge non trovato'; } else if (!checkFieldValuePresence(lastName) || !checkFieldValuePresence(firstName)) { Context.CheckSucceeded = false; } }} else { // stato civile non compilato, controllo non riuscito Context.CheckSucceeded = false;}
Verificare che un field sia individuato sul document
Le regole possono anche compilare i valori del field, anche se il valore non è stampato sul document. Ad esempio, se si applicano diverse imposte, l’importo totale delle imposte può essere calcolato automaticamente. Tuttavia, alcuni Paesi richiedono che l’importo totale delle imposte sia stampato sul document.Questa regola di script verifica che, per le ricevute provenienti dalla Germania, l’imposta totale sia presente nell’immagine. Per gli altri Paesi non è necessario alcun controllo aggiuntivo, perché il flag Required field è attivato per il field dell’imposta totale:
function checkFieldRegion(field) { if (!field || !field.HasRegion) { Context.ErrorMessage = 'Il field (' + field.Name + ') non è presente nell\'immagine del documento'; return false; } return true;}var conditionField = Context.GetField("CountryOfOrigin");if (!conditionField.Value) { Context.ErrorMessage = 'Paese di origine sconosciuto, impossibile verificare le imposte'; Context.CheckSucceeded = false;} else { var totalTaxField = Context.GetField("TotalTax"); if (conditionField.Text === "DE" && !checkFieldRegion(totalTaxField)) { Context.CheckSucceeded = false; }}
Verificare che l’imposta totale sia uguale alla somma di tutte le imposte si può fare con una regola predefinita (Check Sum). Tuttavia, se in alcuni paesi una delle imposte può avere un valore negativo, solo una regola di script può gestire entrambi i casi — sommando tutte le imposte oppure sommando e sottraendo un’imposta di reso, a seconda del paese di origine.Questo script verifica che la somma di due imposte sia uguale all’imposta totale, tranne per le ricevute provenienti dalla Spagna, per le quali sia la somma sia la differenza delle due può essere uguale all’imposta totale:
Confrontare la somma di una colonna con un field esterno
Gli script possono fare riferimento ai valori presenti nelle tabelle, non solo ai field normali. Per velocizzare i controlli delle regole, salvare le tabelle come variabili e fare riferimento alle variabili invece di recuperare nuovamente la tabella. Se una variabile contiene un’intera tabella, usare la proprietà Instances per accedere alle righe, quindi usare GetChild per ottenere una specifica cella in una riga.L’esempio seguente somma tutti i valori nella colonna Total Price e confronta il risultato con il field Total:
var totalField = Context.GetField("Total");var tableField = Context.GetField("MyTable");if (!totalField) { Context.CheckSucceeded = false; Context.ErrorMessage = "Total field is not found"; return;}if (!tableField) { Context.CheckSucceeded = false; Context.ErrorMessage = "MyTable field is not found"; 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 = "The sum of Total Price in the table doesn't match Total";}
Confrontare le celle di una colonna con un field esterno ed elencare le righe che non superano il controllo
Fare riferimento alle colonne di una tabella con Context.GetFields per ottenere ogni cella della colonna, utile per eseguire cicli.Lo script di esempio seguente confronta l’aliquota d’imposta di ogni riga con l’aliquota complessiva. Quando i valori non corrispondono, lo script continua invece di terminare immediatamente, raccogliendo i numeri delle righe con difformità e riportandoli nel messaggio di errore:
Confrontare il prodotto dei valori di una riga con un altro valore della stessa riga
È possibile eseguire operazioni su colonne diverse di una tabella riga per riga senza utilizzare cicli espliciti: fare riferimento a ciascuna colonna utilizzando Context.GetField. Questo crea una regola ripetuta che viene eseguita automaticamente per ogni riga. Tutte le colonne richiamate in questo modo devono appartenere alla stessa tabella.L’esempio seguente moltiplica la quantità per il prezzo unitario per ogni riga e confronta il risultato con il prezzo totale della voce di riga: