A continuación recopilamos algunos ejemplos de Scripts en INTEGRADOC que te pueden resultar útiles en el formulario de tu proceso.

Scripts de visibilidad y obligatoriedad de campos: Si quieres saber más acerca del manejo por script de visibilidad y obligatoriedad de campos, consulta este post. Allí podrás entender como se configuran los scripts que permiten alterar la visibilidad de un campo, así como ver distintos ejemplos.

TIP: Si una operación aritmética no está funcionando de manera deseable, es conveniente "parsear" los valores involucrados usando las funciones parseInt y parseFloat de JavaScript para asegurarse que el cálculo se realizará sobre números bien definidos. Además es deseable limitar la cantidad de decimales con la función toFixed (ver ejemplo más abajo).

Agregar el correo del iniciador en un campo

Una explicación más detallada sobre este caso la puedes encontrar en este post

El siguiente script te permitirá obtener el correo electrónico del usuario logueado y guardarlo en un campo. Esto resulta particularmente útil cuando quieres utilizar este correo para otros fines.
function initScript(){
// Ocultar el campo usuario logueado
Integradoc.setHidden([[Usuario logueado]]);
// Obtener el usuario logueado
var userLogin = Integradoc.currentUser();
// Fijar el valor del campo Usuario logueado
Integradoc.setFieldValue([[Usuario logueado]],userLogin);
}
Integradoc.onInit(initScript);


Ejecutar lógica "onAction"
Usando onAction se puede definir lógica que va a ser ejecutada cuando se presione alguno de los botones para completar tarea. Como mencionamos anteriormente, es posible además determinar qué botón fue presionado para realizar distintas operaciones dependiendo de esto.

Para poder evaluar el botón presionado, la función debe recibir dos parámetros. El primero no es de importancia para este ejemplo, mientras que el segundo si, pues es el nombre del botón presionado. En el siguiente ejemplo, si el botón es "Rechazar" haremos requerido el campo "Motivo de Rechazo" y de lo contrario lo ocultaremos.

function validarAcciones(msg,button){
if(button== "Rechazar"){
Integradoc.setRequired( [[Motivo de Rechazo]] );
}
else{
Integradoc.setHidden( [[Motivo de Rechazo]] );
}
}

Integradoc.onAction(validarAcciones);


Iterar los valores de una columna de campo tabla
En algunos casos es necesario iterar sobre los valores de una columna de un campo tabla para averiguar si determinado valor ha sido ingresado y definir lógica a partir de ello.

La función Integradoc.getAllColumnValues(); retorna un identificador que luego debe ser utilizado con la función "each" de jQuery para iterar los elementos. Dentro de la función "each" se utiliza $(this).attr('value') para obtener el valor de la celda iterada.

function iterarTabla(msg, data){
$( Integradoc.getAllColumnValues([[campo::columna]])).each(
function(){
//Lanza un alert con el valor.
alert($(this).attr('value'));
}
);
}

Integradoc.onTableChange([[campo::columna]], iterarTabla);


Validar una dirección Ethereum y lanzar un SweetAlert
En este ejemplo validaremos la dirección ethereum ingresada en un campo en el momento que el usuario la ingrese, y en caso de error mostraremos un popup SweetAlert. Para ello utilizaremos la validación de un patrón con regex JavaScript para validar la dirección ethereum, luego un SweetAlert en caso de error y en caso de que además la función se ejecute al intentar completar una tarea (sender == evt_ruteo) entonces utilizaremos Integradoc.error para evitar que la misma se complete.

Notar que en este ejemplo usamos una sola funcion tanto para onChange como onAction, e intermanente distinguimos si se trata de un action (sender == evt_ruteo) o un onChange simplemente.

function ethValidator(sender , button){
if( ! (/^0x[a-fA-F0-9]{40}$/.test( Integradoc.getFieldValue([[Campo dirección eth]])) )){
swal({type : 'error' , title : 'Error!' , text: 'invalid address'});
if(sender == 'evt_ruteo'){
Integradoc.error( [[Campo dirección eth]] , "Dirección ETH inválida" );
}
}
}

Integradoc.onChange( [[Campo dirección eth]], ethValidator);
Integradoc.onAction(ethValidator);


Restar dos campos de tipo "Fecha" con un campo Autocalculado

Con INTEGRADOC crear un campo autocalculado que en todo momento muestre la diferencia (en días) entre 2 campos tipo "Fecha" es muy simple. Para ello utilizaremos la librería Moment.js que INTEGRADOC ya tiene incorporada.

Paso 1
Agregar 2 campos de tipo Hora (Ejemplo: "Fecha 1" y "Fecha 2").

Paso 2
Agregar un campo autocalculado (Ejemplo: "Resta")

Paso 3
Agregar el script al autocalculado

Script considerando solo lunes a viernes

calcDiff();
function calcDiff(){
var start = moment( Integradoc.getFieldValue([[Fecha 1]]) , "YYYY/MM/DD");
var end = moment( Integradoc.getFieldValue([[Fecha 2]]) , "YYYY/MM/DD");

var weekdayCounter = 0;

while (start <= end) {
if (start.format('ddd') !== 'Sat' && start.format('ddd') !== 'Sun'){
weekdayCounter++; //add 1 to your counter if its not a weekend day
}
start = moment(start, 'YYYY-MM-DD').add(1, 'days'); //increment by one day
}

return weekdayCounter;

}


Script considerando días de corrido

calcDiff();
function calcDiff(){
var m1 = moment( Integradoc.getFieldValue([[Fecha 1]]) , "YYYY/MM/DD");
var m2 = moment( Integradoc.getFieldValue([[Fecha 2]]) , "YYYY/MM/DD");
return Math.abs(m1.diff(m2, 'days')) + 1;
}


Restar dos campos de tipo "Hora" con un campo Autocalculado

Con INTEGRADOC crear un campo autocalculado que en todo momento muestre la diferencia (en horas) entre 2 campos tipo "Hora" es muy simple. Para ello utilizaremos la librería Moment.js que INTEGRADOC ya tiene incorporada.

Paso 1
Agregar 2 campos de tipo Hora (Ejemplo: "Campo 1" y "Campo 2").

Paso 2
Agregar un campo autocalculado (Ejemplo: "Resta")

Paso 3
Agregar el script al autocalculado

calcDiff();

function calcDiff(){
var m1 = moment( Integradoc.getFieldValue([[Campo 1]]) , "HH:mm:ss");
var m2 = moment( Integradoc.getFieldValue([[Campo 2]]), "HH:mm:ss");

if(m1.isBefore(m2)){
return (moment.utc(m2.diff(m1)).format("HH:mm:ss"));
}else{
return (moment.utc(m1.diff(m2)).format("HH:mm:ss"));
}
}


La salida de este script tiene formato "HH:mm:ss" pero es totalmente configurable (Ejemplo: "HH:mm" para no mostrar los segundos transcurridos). Para más información acudir a la documentación de la librería Moment.js

Notar que no se definió ningún "listener" ya que al ser un autocalculado los listeners son inferidos por el motor de scripts de INTEGRADOC automáticamente.

Resultado

Autocalculado que resta horas

Validar si el valor de un campo "Fecha" es menor a la fecha actual

En ocasiones queremos realizar algún tipo de comprobación con las fechas ingresadas en los campos de tipo Fecha de Integradoc. En este caso, si queremos que al presionar un botón se compruebe si la fecha ingresada es menor a la fecha actual y en caso contrario lanzar un error y no permitir avanzar, los pasos a seguir son los siguientes:

Paso 1
Agregar un campo de tipo Fecha (Ejemplo: "Fecha 1").

Paso 2
Vamos a la sección de configuración de visibilidad y scripts y allí dentro a "Scripts"

Paso 3
Definimos el siguiente script en la tarea que nos interese.

function verificarFecha(msg, button){

if(button == "Nombre del boton que nos interesa"){

// Obtenemos la fecha ingresada
var fechaIngresada = moment(Integradoc.getFieldValue( [[Fecha 1]] ) , "YYYY/MM/DD" );

// Obtenemos la fecha actual
var fechaActual = moment();

// Si la fecha ingresada es mayor a la actual lanzamos error
if(fechaIngresada.isAfter(fechaActual)){
Integradoc.error([[Fecha 1]], "Aqui el mensaje de error personalizado");
}
}
}

//linkeamos la funcion verificarFecha a el clickeo de un botón
Integradoc.onAction(verificarFecha);


Hecho esto, cuando el usuario presione el botón deseado, se ejecutará el script y si la fecha seleccionada es mayor a la actual, se lanzará un error y no permitirá continuar.

Acotar la cantidad de decimales de un número en un script

Usando un Autocalculado de tipo Script, es posible realizar operaciones aritméticas que involucren varios campos de Integradoc.

Por ejemplo si quisiéramos multiplicar 2 campos "A" y "B", el script sería algo como:

Integradoc.getFieldValue([[A]]) * Integradoc.getFieldValue([[B]])
Si bien este script funciona y es válido, es posible que al multiplicar números con decimales el resultado contenga una cantidad infinita de decimales. Para evitarlo, podemos modificar la función de la siguiente manera y acotar los decimales a 3.

( Integradoc.getFieldValue([[A]]) * Integradoc.getFieldValue([[B]]) ).toFixed(3)
Cambiá "3" por el número de decimales que quieras.
¿Este artículo te resultó útil?
Cancelar
¡Gracias!