jueves, 7 de marzo de 2019

Nintex workflow: Cómo redondear un número / how to round a number

Desde hace un tiempo estoy trabajando con Nintex workflow para automatizar tareas en Sharepoint.
Hoy me topé con una tarea que inicialmente parecía fácil: calcular un valor y redondear el resultado. Contrario a lo que pensé, no había una opción directa para redondear :O
En varias partes leí algunas formas de hacerlo, sin embargo, mencionaban que se hacía de una forma para valores menores a 1000 y otra para mayores a 1000, por qué? Porque el número quedaba formateado como "1,000" lo que da error en uno de los pasos. Eso es válido hasta cierto punto, en realidad el error depende del idioma en el que esté el sitio donde esté alojado el worfklow. En este caso, el subsitio del Sharepoint en el que estaba trabajando está en español (es-CL) lo que da que el separador de miles es "." (punto) y para los decimales es "," (coma). Bajo ese formato, el problema de la conversión aplica para valores con decimales, peeero en realidad es fácil de resolver y no es necesario utilizar la opción de expresión regular que vi por ahí. Ahora voy a ello :)
Como mencioné antes, no existe una acción del tipo "redondear" para configurar en el nintex workflow, así que se debe usar una de las funciones inline, que en este caso es fn-Round(numero).
Al usar la función es donde se debe tener cuidado, para evitar error de conversión se debe agregar un tag de inicio y fin para indicar dónde está nuestra variable númerica: {TextStart}variable{TextEnd}

Los pasos:
- Supongamos que tenemos las variables: numeroDecimal (tipo número) y resultadoTxt (tipo texto).
- Crear una cadena de texto con la fórmula y el número a redondear, almacenar en la variable de tipo texto.
fn-Round({TextStart}{Workflow variable:numeroDecimal}{TextEnd})
- Convertir el string a número.

Y listo, con eso se tiene el valor redondeado.
En el caso de omitir los tag de inicio y fin en la fórmula, el workflow dará un error como éste:

Error parsing value. Value 'fn-Round(95,24)' is not compatible with the selected output variable type Number (double).

Esto sucede porque el procesador de la fórmula asume que la coma corresponde al paso de una segunda variable, es decir, en vez de tomar "95,24" como un único número, asume que son dos: "95" y "24", lo que excede la cantidad de parámetros de la fórmula en sí.

Creo que no es necesario realmente crear la variable de texto y almacenar la fórmula ahí, quizás es posible poner la fórmula directo en la opción de convertir valor, pero no alcancé a probar eso. De ser posible podría quedar todo en una única acción... ideal o no?


NOTA:
La función fn-Round como función inline a diferencia de su uso en los formularios (nintex form), no  permite indicar la cantidad de decimales, sino que simplemente aproxima al entero que corresponda.

Referencia:
Funciones inline: https://help.nintex.com/en-US/nintex2016/current/sp2016/Workflow/Reference/WFInlineFunctions.htm
Redondear número: https://www.codesigned.com/blog/round-a-number-with-nintex-workflow

No hay comentarios:

-