diciembre 12, 2021

Ensayo: Integración entre DocuSign y Sharepoint (II)

En esta segunda parte del ensayo nos centraremos en la generación de un sistema de preavisos para documentos firmados desde DocuSign y archivados en SharePoint.

Ensayo: Integración entre DocuSign y Sharepoint (II)

En este punto, ya tenemos archivados nuestros documentos firmados desde DocuSign en SharePoint siguiendo una  jerarquía de carpetas. Estos documentos contienen metadatos como la fecha de caducidad del documento.

Para el envío de alertas de caducidad de documentos, se utilizará también un Power Automate. El Flow se programará para ejecutarse una vez al día (configurable) y realizará el siguiente proceso:

a. Recuperar todos los documentos de una biblioteca de documentos de SharePoint a partir del tipo de documento y de la fecha de caducidad (metadatos obligatorios en los documentos) teniendo en cuenta la antelación definida para cada tipo de documento en una lista de SharePoint:

b. Para cada destinatario indicado en el tipo de documento correspondiente se enviará un correo electrónico con una alerta indicando la inminencia de la caducidad del documento.

Como trigger lo configuraremos para que se ejecute cada día a las 7 de la mañana. Lo primero que realiza el flujo es la descarga de la lista de caducidades. Esta lista es dinámica y por lo tanto siempre debe ser consultada para saber si debemos avisar a la persona responsable de este contrato.

A continuación inicializamos 2 variables. Una para guardar la diferencia de días entre la fecha de caducidad y la fecha actual y otra para guardar la fecha actual en formato UTC. La fórmula sería la siguiente:

formatDateTime(utcNow(),'yyyy-MM-dd')

Después inicializaremos dos variables. Una para guardar la fecha de caducidad de los diferentes documentos y otra para los días de aviso. Mas adelante explicaré por que utilizo el valor -1.

Una vez hemos preparado todas las variables que vamos a utilizar y tenemos todos los elementos de la lista de SharePoint de caducidades, vamos a recorrer cada elemento y vamos a extraer los días de preaviso configurados por cada uno. Para hacerlo lo extraemos con la siguiente fórmula:

int(mul(variables('DiasDeAviso'),body('Item_Caducidad')?['field_Number']))

Como se puede ver en la fórmula, no solo cojo los días de aviso, que eso se podría hacer únicamente con la expresión , body('Item_Caducidad')?['field_Number']) sino que también lo multiplicamos por la variable días de aviso, cuyo valor es -1. Esto se entiende mejor en la fórmula que viene mas adelante.

En este paso, vamos a descargar todos los documentos filtrados por el metadato, tipo de contrato. En cada vuelta del bucle anterior extraemos en un array las tipologías de contrato con sus respectivas caducidades. Ahora haciendo una consulta filtrada nos traeremos en un segundo bucle anidado los N documentos que cumplan con la expresión:

trim(body('Item_Caducidad')?['Title'])

Entramos dentro del segundo bucle, analizamos la respuesta recibida de SharePoint (este paso se puede obviar, pero en mi caso me gusta manejarme con datos previamente analizados con el componente de datos para JSON) y formateamos la variable ExpirationDateDocument con esta fórmula:

formatDateTime(concat(split(body('Item_Document')?['Fechadecaducidad'],'-')[0],'/',split(body('Item_Document')?['Fechadecaducidad'],'-')[1],'/',split(body('Item_Document')?['Fechadecaducidad'],'-')[2]),'yyyy-MM-dd')

En el último paso, calcularemos con una expresión un poco complicada, la diferencia de días entre el día actual y los días de preaviso marcados por tipo de documento, es decir, sabremos si el documento que estamos analizando esta dentro de la franja marcada en la tabla de caducidades. La expresión es la siguiente:

div(sub(ticks(variables('ExpirationDateDocument')),ticks(variables('CurrentDate'))),864000000000)

Una vez tenemos el número, sabremos si para ese documento en cuestión tenemos que avisar al destinatario marcado en la tabla documentos. Las dos condiciones a cumplir son:

int(variables('daysSinceChange')) <= int(body('Item_Caducidad')?['field_Number'])

int(variables('daysSinceChange')) >= 0

Por último, hacemos un split de los destinatarios (para quitar posibles espacios que se hayan podido generar) y sobre los N destinatarios que se reflejen en la tabla de caducidades, se enviará un correo, en caso de que la fecha de caducidad del documento este dentro del plazo de pre aviso marcado en Sharepoint.