Scripts utilizados en la creación de flujos
A continuación, ofrecemos una recopilación de los scripts que se están usando actualmente en proyectos de Waidok:
- Reemplazar caracteres de una variable. En el ejemplo, reemplaza todas las apariciones de "gato" por "perro" usando una expresión regular con la bandera g (global). Se puede ver una explicación y ejemplos de expresiones regulares aquí: https://4geeks.com/es/lesson/regex-tutorial-regular-expression-ejemplo.
let nuevoTexto = texto.replace(/gato/g, "perro");
var cadena = getVariable('strNumeroCertificadoOCR')
cadena.replace(/[./\\s]/g, "");
- Asignar valores de una propiedad (tipo lista) a una variable. En el ejemplo, se asigna el valor de la propiedad "nombrePropiedad" a la variable en curso. El valor de la propiedad se extrae de los metadatos del documento que previamente se han guardado en la variable de tipo objeto "objMetadatosColección".
var msg = getVariable('objMetadatosColección')
var metadata = msg['Metadata']
metadata['nombrePropiedad'].slice(2, -2);
- Asignar valores de una propiedad (no tipo lista) a una variable. En el ejemplo, se asigna el valor de la propiedad "nombrePropiedad" a la variable en curso. El valor de la propiedad se extrae de los metadatos del documento que previamente se han guardado en la variable de tipo objeto "objMetadatosColección". Al final, se eliminan los dos primeros caracteres y los dos últimos del valor de la lista, ya que los valores de tipo lista se guardan como un array que inserta corchetes y comillas en cada valor y hay que eliminarlos para insertarlos en la variable.
var msg = getVariable('objMetadatosColección')
var metadata = msg['Metadata']
metadata['nombrePropiedad']
- Recuperar el valor de una variable en una actividad.
getVariable('nombreVariable')
- Recuperar un elemento de una columna de tabla maestra. Previamente, debemos asignar el valor de una fila de la tabla maestra a una variable de tipo Objeto con una actividad de workflow de tipo Search master table. En el ejemplo, se asigna el valor de la propiedad "nombrePropiedad" a la variable en curso. El valor de la propiedad se extrae de los metadatos del documento que previamente se han guardado en la variable "variableMetadatosColección". En la segunda línea del código, se pone entre corchetes el número de la columna de la que se ha de extraer el dato. La primera columna es 0, la segunda es 1, la tercera es 2, etc.
var msg = getVariable('objFilaTablaMaestra')
msg[0]
- Asignar un valor de NIF que viene de Invofox a una variable. Los números de NIF procesados por Invofox tienen formato con codificación internacional, es decir, insertan el código del país al comienzo del número en dos caracteres. De forma que si queremos poder cotejarlos con una tabla maestra y permitir su inserción manual tenemos que insertar en la variable siempre el valor sin el código del país. Previamente, debemos asignar los metadatos del documento en el Output de una actividad a una variable de tipo objeto. En el ejemplo, objMetadata
var msg = getVariable('objMetadata')
var metadata = msg['Metadata']
if (metadata['NombrePropiedadNIF'].toString().length > 9)
metadata['NombrePropiedadNIF'].toString().substring(2)
else
metadata['NombrePropiedadNIF'].toString();
- Ejemplos de condiciones para actividad de Decisión.
- Valor de una variable distinta de 0.
getVariable('nombreVariable') != 0
-
- Valor de una variable igual a un valor.
getVariable('nombreVariable') == "valor a comparar"
-
- Valor de una variable mayor o igual a un número. En el ejemplo, mayor o igual a 2000.
getVariable('nombreVariable') >= 2000
- Recuperar valores de metadatos internos de Waidok. Previamente, debemos asignar los metadatos del documento en el Output de una actividad a una variable de tipo objeto. En el ejemplo, objMetadata.
- Recuperar el nombre del fichero.
var msg = getVariable('objMetadata')
msg['fileName']
-
- Recuperar el usuario que ha dado de alta el fichero en Waidok (owner).
var msg = getVariable('objMetadata')
msg['Owner']
- Recuperar un usuario dado de alta en Waidok desde una propiedad con su nombre. Téngase en cuenta que la propiedad de la que se recupera el dato es una propiedad de tipo Lista con los mismos nombres de los usuarios dados de alta en la herramienta. Previamente, debemos asignar los metadatos del documento en el Output de una actividad a una variable de tipo objeto. En el ejemplo, objMetadata.
var msg = getVariable('objMetadata')
var metadata = msg['Metadata']
var revisor = metadata['NombreInternoPropiedad'].toString().substring(2)
revisor.substring(0, revisor.length - 2)
- Asignar a una tabla la información de vuelta de la IA en una etiqueta.
const ai = JSON.parse(getVariable("AiResponse"))[0];
const transformed = ai.items.map(it => ({
1: it.description,
2: it.heat_number
}));
return transformed;
- Asignar el primer valor ordenado de un resultado de varias filas de una tabla maestra a una variable. En el ejemplo, se han recuperado previamente varias filas de una tabla maestra en una variable de tipo objeto llamada objMetadataTablaMaestra.
const data = getVariable('objMetadataTablaMaestra')
// Ordenar por el primer elemento
data.sort((a, b) => Number(a[0]) - Number(b[0]));
return data[0];
- Cuando termina una tarea y queremos poner la fecha en que se realiza. Recogerá, por ejemplo cuándo alguien ha aprobado un documento y dejarlo reflejado en una propiedad.
new Date();
- Personalización del cuerpo de un correo electrónico de notificación. Previamente, deben estar asignados los valores de las propiedades del documento en una variable de tipo objeto. En el ejemplo, objMetadata.
var msg = getVariable('objMetadata')
var metadata = msg['Metadata']
'Esto es un ejemplo de cuerpo de correo electrónico que recoge datos de una factura como su número: ' + metadata['NombrePropiedadNumeroDeFactura'] + ', del proveedor ' + metadata['NombrePropiedadProveedor'] + ', con fecha ' + metadata['NombrePropiedadFecha'] + '.'
- Asociar un documento a n expedientes que estén recogidos en una propiedad con un separador.
- Previamente, debemos haber recogido el dato que nos permite asociar el documento a los expedientes en un campo de texto con un separador y asignar los valores de las propiedades del documento en una variable de tipo objeto. En el ejemplo, la variable de objeto es 'objMetadata' y la propiedad es 'NombreCampoConSeparadores', donde el separador es un ;. Ese dato lo debemos guardar en una variable de tipo objeto con el código que vemos a continuación.
var msg = getVariable('objMetadata')
var metadata = msg['Metadata']
metadata['NombreCampoConSeparadores'].split(';')
-
- Generamos una actividad de tipo Join en modo WaitAny para esperar al array cada vez que se elimine un elemento y hacer las repeticiones del ciclo cuantas veces sea necesario.
- Insertamos una actividad de tipo Decision que nos permita seguir trabajando con el array si todavía tiene valores de expedientes a los que asociar el documento o terminar si ya no quedan expedientes a los que asociarlo. Para ello, debemos leer la variable de tipo objeto generada en el primer punto del ciclo y ver si contiene elementos. En el ejemplo, objArray.
var arr = getVariable('objArray')
arr.length == 0
-
- Asignamos el valor del primer elemento de la variable objeto del primer punto en formato String. En el ejemplo, la variable de tipo objeto es objArray.
var arr = getVariable('objArray')
arr.length == 0
-
- Eliminamos el valor del primer elemento de la variable objeto del primer punto en formato String. En el ejemplo, la variable de tipo objeto es objArray.
getVariable('objArray').slice(1)
-
- Buscamos el expediente cuyo valor de propiedad coincida con el primer elemento del array que hemos separado y lo guardamos en una variable de tipo Guid que debemos tener creada previamente. En el ejemplo, buscamos el expediente cuyo valor de la propiedad n del expediente coincida con el valor de la variable strPrimerElemento. El código a continuación hay que insertarlo en el valor de la propiedad n que queramos hacer coincidir. Hay que recordar marcar el check de Asignar documentos a expedientes para que el documento se asocie al expediente encontrado.
getVariable('strPrimerElemento')
-
- El resultado final del conjunto en flujo, sería algo similar a esto:
