Gonzalo Rementeria

15 – Enviar y recibir archivos JSON entre Canvas App y Power Automate

Buenas a todos. En este post os voy a mostrar como enviar y recibir información en formato JSON desde un Automate a una CanvasApp y viceversa.

Seguramente si estás leyendo esto sabes perfectamente que es el formato JSON, pero por si acaso no es así, aquí te adjunto un ejemplo de json.

				
					{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

				
			

Qué cómo puedes ver no es más que una forma de organizar información, en muchas ocasiones para mandarla de un sitio a otro. Por ejemplo, en este caso tenemos un objeto menú, que tiene como propiedades ID, Value y popup, que a su vez contiene el array de objetos menuitem que contiene 3 objetos con 2 propiedades cada uno (value y onclick). Esta información puede ser procesada desde múltiples sitios (un flujo, una canvas app, un script, una function, etc.).

Teniendo claro que es un fichero json vamos con la parte fácil. Como enviarlo desde una canvas app a un flujo de Power Automate

Lo primero será configurar el Automate para permitir que reciba un parámetro de tipo texto, luego desde la canvas app le pasamos en ese parámetro la tabla o colección que queramos, pero convertida en json. Además el siguiente paso del flujo debería ser el conector “Parse JSON” en cuanto a su esquema pulsaremos en crear en base a un ejemplo, y le pasaremos el parámetro que haya recibido el flujo en una de sus ejecuciones, Tal y como vemos en este ejemplo:

				
					ClearCollect(
    colTest;
    {nombre:"pepe"; edad:23};
    {nombre:"Lucía"; edad:27};
    {nombre:"Juan"; edad:42}
);;

'PowerAppV2->Inicializarvariable'.Run(JSON(colTest))

				
			

Y ahora con la parte algo más complicada, aunque ya verás que tampoco es muy complejo.

Desde el Automate no podemos enviar objetos a una canvas, pero si podemos enviar texto, y por tanto información organizada en este formato. Por ejemplo veamos este ejemplo donde un Automate obtiene información vía api y se la entrega a la canvasAppIMPORTANTE. Para aseguraros de que funciona, podéis convertir
la respuesta que le enviamos al flujo con string(colocando aquí la respuesta)

Y  En la canvas app lo que tendremos que poner es esto.

 

				
					//ejecuto el flujo para traer registros
Set(
    RespuestaFlujo;
    FlujoEjemplo.Run(
       Parámetro1;
        Parámetro2 )
);;
//formateo el json
Set(
    jsonFormateado;
    Table(ParseJSON(RespuestaFlujo.listado_de_ejecuciones))
);;
//vacio colDatosRespuesta
Clear(colDatosRespuesta);;

//lleno colDatosRespuesta
ForAll(
    jsonFormateado;
    Collect(
        colDatosRespuesta;
        {
            StartedOn: Text(ThisRecord.Value.StartedOn);
            Duration: Text(ThisRecord.Value.Duration);
            Result: Text(ThisRecord.Value.Result);
            Link: Text(ThisRecord.Value.Link)
        }
    )
);;

				
			

De tal manera que en la Canvas app tendremos algo como esto, es decir, una tabla en lugar de un texto.

Aquí un par de videos de como hacerlo por si os quedaba alguna duda

Enviar un JSON

Recibir un JSON