CÓMO AVANZAR TUS BUSINESS PROCESS FLOWS DE FORMA AUTOMATIZADA (PARTE I).

Para poder avanzar tus Business Process Flows de forma automatizada, tenemos dos formas de hacerlo en del lado del servidor o del lado del cliente. En este blog veréis mediante dos ejemplos como poder realizarlo.



Antes de entrar en como poder realizarlo, vamos a explicar que es un Business Process Flow (BPF).

Los BPFs son componentes que tenemos disponibles en las Power Apps basadas en modelos para guiar a los usuarios en una serie de pasos y etapas dentro del formulario de una tabla.



Al crear este tipo de procesos, se genera en nuestro Dataverse una tabla adicional que deberemos utilizar para avanzar nuestros BPF del lado del servidor.


Para avanzar estos procesos lo primero que deberemos saber es el GUID de los stages de nuestros procesos. Para ello deberemos ejecutar en una ventana del navegador lo siguiente:



https://org.crm4.dynamics.com/api/data/v9.0/processstages?$select=stagename&$filter=processid/workflowid eq <processID>

Sustituyendo los campos resaltados por los nuestros.


Esto nos mostrará lo siguiente:


{
"@odata.context":"https://org.crm4.dynamics.com/api/data/v9.0/$metadata#processstages(stagename)",
   "value":[
       {
           "@odata.etag":"W/\"761116\"",
           "stagename":"Stage 4",
           "processstageid":"73df2774-b083-4325-9804-845186962671"
       },
       {
           "@odata.etag":"W/\"761118\"",
           "stagename":"Stage 1",
           "processstageid":"7da32b9a-6994-ff0b-0cdc-b9c0c3bde713"
       },
       {
           "@odata.etag":"W/\"761112\"",
           "stagename":"Stage 2",
           "processstageid":"5148b38e-5fcd-4459-98e2-c778710192dd"
       },
       {
           "@odata.etag":"W/\"761114\"",
           "stagename":"Stage 3",
           "processstageid":"97b24b6c-0ac6-4d7d-8388-f47fec8af6fc"
       }
    ]
}

En este código encontraremos los GUID de los stages que tendremos en el BPF para poder preparar nuestros automatismos y hacer que el proceso avance.


Avanzar el BPF del lado del cliente.


Para avanzar nuestros procesos del lado del cliente deberemos utilizar JavaScript. Para ello deberemos programar el evento dentro del formulario de nuestra tabla utilizando eventos. En el ejemplo vamos a ejecutar nuestro código JS al cambiar un campo de tipo opción llamado mar_stage.


Primero deberemos crear un recurso web dentro de nuestra solución de tipo script con el siguiente código:

function AdvanceBPF(executionContext) {
     var formContext = executionContext.getFormContext();
 //Obtener el valor del campo de tipo opción
     var StageValue = formContext.getAttribute("mar_stage").getValue();
 //Obtenermos el ID de la instancia del proceso
     var BPFInstanceId = formContext.data.process.getInstanceId();    
 //Declaramos variables del incio y fin   
     var StageInicio = "7da32b9a-6994-ff0b-0cdc-b9c0c3bde713";
     var StageFin = "73df2774-b083-4325-9804-845186962671";
 //Establecemos los valores del stage de incio y fin en función del valor del stage
    switch(StageValue){
        //Stage 1
        case 809620000:
            StageInicio = "7da32b9a-6994-ff0b-0cdc-b9c0c3bde713";
            StageFin = "7da32b9a-6994-ff0b-0cdc-b9c0c3bde713";
        break;
        //stage 2
        case 809620001:
            StageInicio = "7da32b9a-6994-ff0b-0cdc-b9c0c3bde713";
            StageFin = "5148b38e-5fcd-4459-98e2-c778710192dd";
        break;
        //stage 3
        case 809620002:
            StageInicio = "7da32b9a-6994-ff0b-0cdc-b9c0c3bde713";
            StageFin = "97b24b6c-0ac6-4d7d-8388-f47fec8af6fc";
        break;
        //stage 4
        case 809620003:
            StageInicio = "7da32b9a-6994-ff0b-0cdc-b9c0c3bde713";
            StageFin = "73df2774-b083-4325-9804-845186962671";   
        break;
        default:
        break;
    }
     var entity = {};
     entity["activestageid@odata.bind"] = "/processstages(" + StageFin + ")"; 
     entity["traversedpath"] = StageInicio + "," + StageFin;

//Hacemos la llamada patch para actualizar el traversedpath y el active stage
   var req = new XMLHttpRequest();
   req.open("PATCH", "https://org.crm4.dynamics.com/api/data/v9.1/new_fasesdem
")", true);
   req.setRequestHeader("OData-MaxVersion", "4.0");
   req.setRequestHeader("OData-Version", "4.0");
   req.setRequestHeader("Accept", "application/json");
   req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
   req.onreadystatechange = function() {
       debugger;
       if (this.readyState === 4) {
           req.onreadystatechange = null;
  
           if (this.status === 204) {
               alert("Guarda para ver los cambios en el BPF");
           } else {
               alert("Ooohh hay un error");
           }
       }
   };
   req.send(JSON.stringify(entity));
}

Después agregaremos la nueva librería al formulario de la tabla y configuraremos el evento cuando se cambie el campo mar_stage. Es importante que en esta configuración no nos olvidemos de pasar el contexto de ejecución.

Para finalizar deberemos probar que nuestro desarrollo funciona correctamente 😊

En el siguiente blog veremos como avanzarlo del lado del servidor utilizando Power Automate.