Ejemplos de JavaScript para escenarios comunes de las reglas avanzadas de script: presencia de campos, comparaciones numéricas, requisitos condicionales y validación de tablas.
Use this file to discover all available pages before exploring further.
Los siguientes ejemplos de JavaScript ilustran patrones habituales de las reglas avanzadas de script: comprobar la presencia de campos, comparar valores numéricos, aplicar validaciones condicionales y validar datos de tablas. Cópielos y adáptelos a sus propios nombres de campo y reglas de negocio.
Comparar directamente números de punto flotante puede producir resultados impredecibles. Use métodos del objeto integrado Math para comparar números —especialmente valores monetarios— de forma fiable.
// comparar dos números de punto flotantevar 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';}// comparar dos valores monetariosvar 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';}
Un campo opcional puede volverse obligatorio en función del valor de otro campo. Por ejemplo, si MaritalStatus es Married, se deben completar los campos de nombre del cónyuge.Esta regla de script verifica que, cuando MaritalStatus es Married, tanto SpouseFirstName como SpouseLastName estén completos:
function checkFieldValuePresence(field) { if (!field.Value) { Context.ErrorMessage = 'Value of ' + field.Name + ' field should not be empty'; return false; } return true;}var conditionField = Context.GetField("MaritalStatus");if (conditionField === null) { Context.CheckSucceeded = false; Context.ErrorMessage = 'MaritalStatus field not found';} 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 = 'Spouse name field not found'; } else if (!checkFieldValuePresence(lastName) || !checkFieldValuePresence(firstName)) { Context.CheckSucceeded = false; } }} else { // estado civil no completado, la verificación falló Context.CheckSucceeded = false;}
Compruebe que un campo esté localizado en el documento
Las reglas también pueden completar los valores de los campos, incluso si el valor no está realmente impreso en el documento. Por ejemplo, si se aplican varios impuestos, el impuesto total puede calcularse automáticamente. Sin embargo, algunos países exigen que el impuesto total aparezca impreso en el documento.Esta regla de script comprueba que, para los recibos de Alemania, el impuesto total esté presente en la imagen. Para otros países, no se requiere ninguna comprobación adicional porque la opción Required field está activada para el campo de impuesto total:
function checkFieldRegion(field) { if (!field || !field.HasRegion) { Context.ErrorMessage = 'El campo (' + field.Name + ') no está presente en la imagen del documento'; return false; } return true;}var conditionField = Context.GetField("CountryOfOrigin");if (!conditionField.Value) { Context.ErrorMessage = 'País de origen desconocido, no se pueden verificar los impuestos'; Context.CheckSucceeded = false;} else { var totalTaxField = Context.GetField("TotalTax"); if (conditionField.Text === "DE" && !checkFieldRegion(totalTaxField)) { Context.CheckSucceeded = false; }}
Comprobar que el impuesto Total sea igual a la suma de todos los impuestos puede hacerse con una regla predefinida (Check Sum). Pero si uno de los impuestos puede tener un valor negativo en ciertos países, solo una regla de script puede contemplar ambos casos: sumar todos los impuestos o sumar y restar un impuesto de devolución, según el país de origen.Este script comprueba que la suma de dos impuestos sea igual al impuesto Total, excepto en los recibos de España, donde la suma o la diferencia de ambos puede ser igual al impuesto Total:
Comparar la suma de una columna con un campo externo
Los scripts pueden hacer referencia a valores de tablas, no solo a campos normales. Para acelerar la verificación de reglas, guarde las tablas como variables y haga referencia a esas variables en lugar de volver a recuperar la tabla. Si una variable contiene una tabla completa, use la propiedad Instances para acceder a las filas y luego use GetChild para obtener una celda específica de una fila.El ejemplo a continuación suma todos los valores de la columna Total Price y compara el resultado con el campo Total:
var totalField = Context.GetField("Total");var tableField = Context.GetField("MyTable");if (!totalField) { Context.CheckSucceeded = false; Context.ErrorMessage = "No se encontró el campo Total"; return;}if (!tableField) { Context.CheckSucceeded = false; Context.ErrorMessage = "No se encontró el campo MyTable"; 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 suma de Precio Total en la tabla no coincide con el Total";}
Comparar las celdas de una columna con un campo externo y enumerar las filas con errores
También se puede hacer referencia a las columnas de una tabla con Context.GetFields para obtener cada celda de la columna, lo cual resulta útil para configurar bucles.El siguiente ejemplo compara la tasa impositiva de cada fila con la tasa impositiva general. Cuando los valores no coinciden, el script continúa en lugar de fallar de inmediato, recopila los números de fila con discrepancias y los muestra en el mensaje de error:
var taxRateFields = Context.GetFields("MyTable/TaxRate");var taxRateField = Context.GetField("TaxRate");if (!taxRateFields || !taxRateField) return;var taxRate = taxRateField.Value ? taxRateField.Value : 0;var wrongLines = [];for (var i = 0; i < taxRateFields.length; i++) { if (taxRateFields[i].Value != taxRate) wrongLines.push(i + 1);}if (wrongLines.length > 0) { Context.CheckSucceeded = false; Context.ErrorMessage = "Tasa impositiva incorrecta en las líneas: " + wrongLines.join(", ");}
Comparar el producto de los valores de una fila con otro valor de la misma fila
Puede realizar operaciones en diferentes columnas de una tabla fila por fila sin usar bucles explícitos: haga referencia a cada columna mediante Context.GetField. Esto crea una regla repetitiva que se ejecuta automáticamente para cada fila. Todas las columnas referenciadas de este modo deben pertenecer a la misma tabla.El siguiente ejemplo multiplica la cantidad de unidades por el precio unitario en cada fila y compara el resultado con el precio total de la línea:
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 = "Cantidad * Precio unitario no es igual al Total";}