Clonación y Edición de Forms con Power Automate
1 0
Read Time:6 Minute, 6 Second

Automatiza la Recopilación de Datos con Microsoft Forms y Power Automate

Cuando necesitas recopilar información de un grupo amplio de personas, una de las mejores opciones es utilizar Microsoft Forms. En esta serie de artículos, te mostraremos cómo integrar Microsoft Forms con Power Apps utilizando Dataverse como base de datos, todo ello mediante Power Automate y la API de Microsoft Forms, que cuenta con muy poca documentación disponible.

Aunque actualmente existe un conector en Power Automate para Microsoft Forms, no lo utilizaremos, ya que nos limita al uso de formularios estáticos. En nuestro caso, asumiremos el rol de un gestor de eventos. Por cada evento, el sistema creará automáticamente un formulario de confirmación de asistencia a partir de una plantilla. Esto nos permitirá asociar formularios específicos para cada evento que tengamos, ofreciendo una mayor flexibilidad y personalización.

Quiero expresar mi agradecimiento especial a Enea Licaj. Su contenido fue una fuente de inspiración para este artículo. Puedes encontrar su canal de youtube aquí.

Creación de Formularios de Confirmación de Asistencia con Microsoft Forms

El primer paso es crear un formulario para la confirmación de asistencia al evento. Microsoft ofrece una variedad de plantillas predefinidas que podemos utilizar para facilitar este proceso. Es crucial crear el formulario dentro de un grupo. Esto simplifica la gestión de los permisos de edición y administración, asegurando que el formulario sea accesible y manejable por todos los miembros del equipo.

Guardado de la URL de Edición del Formulario

Además, es fundamental guardar la URL de edición del formulario. A partir de esta URL, obtendremos el ID del formulario, que necesitaremos más adelante en el proceso de clonación.

Ejemplo de la URL a guardar (el ID del formulario está resaltado en negrita):

https://forms.office.com/Pages/DesignPageV2.aspx?prevorigin=shell&origin=NeoPortalPage&subpage=design&id=6WAFfStFI0m-mkKWMj06tQNJlLhlbfJBhUd7NqUSdzxUREgxVkk1OTZBM04zWDIzWTNTUksxSVJJQSQlQCN0PWcu

Creación de Formularios de Microsoft Forms con Power Automate

Para crear el formulario de Microsoft Forms, utilizaremos Power Automate. Dentro de nuestra aplicación, tenemos una tabla para registrar los eventos y otra para guardar información sobre los formularios utilizados como plantillas. La relación entre ambas tablas se realiza a través del campo <<Attendee Confirmation Template>>.

En la siguiente imagen, se muestra la tabla Survey Templates, donde guardamos la información del formulario plantilla.

Flujo de Power Automate

El flujo de Power Automate se activa cuando se crea un registro en la tabla de Eventos. Para interactuar con la API de Microsoft Forms, utilizaremos la acción de SharePoint para enviar una llamada HTTP Request. Esta acción nos permite usar el sistema de autenticación integrado, facilitando la interacción con otros servicios de Microsoft que admiten solicitudes HTTP.

Una vez creado el formulario, añadiremos la fecha y localización del evento en el encabezado del formulario. Finalmente, generaremos el informe de respuestas que ofrece Microsoft Forms por defecto.

Paso a paso

#1: Trigger

El trigger de este flujo de Power Automate se activa cuando se crea un registro en la tabla de Eventos.

#2: Inicializar variable

Inicializamos la variable <<varPermissionToken>>, que utilizaremos para crear el informe de respuestas del formulario

#3: Clonar formulario plantilla

Realizamos una llamada HTTP Request de tipo POST con la siguiente sintaxis:

https://forms.office.com
/formapi/api/[TENANT ID]/groups/[GROUP ID]/light/forms('[FORM ID TEMPLATE]')/CopyToUser
{
  "newOwnerId": "[GROUP ID]",
  "newTenantId": "[TENANT ID]",
  "isNewOwnerGroup": true,
  "patchProperties": {
    "title": "[NEW SURVEY NAME]",
    "formsProRTTitle": "[NEW SURVEY NAME]"
  }
}

En mi caso, estos valores los he guardado en variables de entorno.

  • TENANT ID: Es el ID de nuestro tenant.
  • GROUP ID: Es el ID del grupo donde hemos creado nuestro formulario plantilla.

#4: Añadir descripción al formulario creado

Para personalizar el formulario recién creado, añadiremos en el encabezado la fecha y localización del evento. Para ello, añadiremos una pregunta de tipo “Sección” y editaremos el título de la pregunta.

Analizamos el JSON obtenido en el paso #3 y buscamos el atributo “id”.

{
  "createdBy": "info@alexcangas.onmicrosoft.com",
  "responses": [],
  "permissionTokens": [],
  "xlFileUnSynced": false,
  "description": "",
  "onlineSafetyLevel": 0,
  "reputationTier": 0,
  "id": "6WAFfStFI0m- mkKWMj06tQNJlLhlbfJBhUd7NqUSdzxUQk0zRTlEUkJZUE1JOFVSQzVXUzc1Rkk4ViQlQCN0PWcu"
}

El atributo <<id>> es el ID del formulario [FORM ID].

Realizamos una llamada HTTP Request de tipo POST con la siguiente sintaxis:

https://forms.office.com
/formapi/api/[TENANT ID]/groups/[GROUP ID]/forms('[FORM ID]')/descriptiveQuestions
{
    "type": "Question.ColumnGroup",
    "title": "Date: [EVENT DATE] Location: [EVENT LOCATION]",
    "id": "r3b61a070648a4642aed8647aaf0af7ef",
    "order": 2,
    "isQuiz": false
}
  • Id: El ID de la nueva pregunta. Debe empezar por “r” y tener 33 caracteres.
  • Order: La posición en la que queremos que aparezca la pregunta, en este caso, después del título.

Expresión de parseo de la fecha para formato: DD-MM-YYYY HH:MM | 09-09-2024 10:30

@{formatDateTime(parseDateTime(split(triggerOutputs()?['body/acr_startdateandtime'], '.')[0]), 'dd-MM-yyyy HH:mm', 'en-GB')}

Nuestro formulario debería de verse así:

#5: Creación del informe de respuestas integrado

Para obtener la URL del informe de respuestas, analizamos el JSON obtenido en el paso #3 y buscamos el atributo <<permissionTokens>>.

{
  "createdBy": "info@alexcangas.onmicrosoft.com",
  "responses": [],
  "permissionTokens": [],
  "xlFileUnSynced": false,
  "description": "",
  "onlineSafetyLevel": 0,
  "reputationTier": 0,
  "id": "6WAFfStFI0m- mkKWMj06tQNJlLhlbfJBhUd7NqUSdzxUQk0zRTlEUkJZUE1JOFVSQzVXUzc1Rkk4ViQlQCN0PWcu"
}

El atributo <<permissionTokens>> es un array. Si este array contiene al menos un elemento, significa que nuestro formulario ya tiene creada la URL del informe de respuestas.

Añadimos una acción de condición para comprobar si el número de elementos del array es mayor que 0.

Si es verdadero

  • Obtenemos dentro del array, el atributo <<Id>> y lo guardamos en la variable <<varPermissionTokens>> creada en el paso #2.
body('Send_an_HTTP_request_to_Sharepoint_-_Clone_Survey_Template')['permissionTokens'][0]['principalId']

Si es falso

  • Realizamos una llamada HTTP Request de tipo POST para crear la URL de informe de respuestas.
https://forms.office.com
/formapi/api/[TENANT ID]/groups/[GROUP ID]/forms('[FORM ID]')/permissionTokens
{"name":"AnalyzerToken","type":"AnalyzerToken"}

Obtendremos como respuesta el siguiente JSON.

{
  "@odata.context": "https://forms.office.com/formapi/api/7d0560e9-452b-4923-be9a-4296323d3ab5/groups/b8944903-6d65-41f2-8547-7b36a512773c/$metadata#forms('6WAFfStFI0m-mkKWMj06tQNJlLhlbfJBhUd7NqUSdzxUQk0zRTlEUkJZUE1JOFVSQzVXUzc1Rkk4ViQlQCN0PWcu')/permissionTokens/$entity",
  "name": "AnalyzerToken",
  "principalId": "8kuUFWcJWzf8oxNfOXSf0pwdsthKeIDq",
  "type": "AnalyzerToken",
  "createDateTime": "2024-09-05T23:19:12.6978342Z",
  "createBy": "687a38cf-df6b-4c1c-ae18-7a3806fe365d",
  "lastModifiedDateTime": "2024-09-05T23:19:12.6978344Z",
  "modifiedBy": "687a38cf-df6b-4c1c-ae18-7a3806fe365d"
}

Guardamos el valor del atributo <<principalId>> en la variable <<varPermissionTokens>>.

Este sería el informe de respuestas que estabamos buscando.

#6: Añadir información a la aplicación

Utilizamos otra tabla (Survey) asociado al evento para almacenar toda la información referente al formulario de Microsoft Forms.

Para añadir esta información, utilizamos la acción de añadir un registro a una tabla del dataverse.

"Form Id": [FORM ID]
"Summary Response Link": https://forms.office.com/Pages/AnalysisPage.aspx?AnalyzerToken=[varPermissionTokens]&id=[FORM ID]
"Survey Response Link": https://forms.office.com/Pages/ResponsePage.aspx?id=[FORM ID]

De esta forma, ya tenemos integrado Microsoft Forms con nuestra aplicación. En un próximo artículo, explicaré cómo, a partir de esta información, podremos obtener las preguntas y respuestas de cada uno de los formularios asociados a nuestros eventos, pero directamente desde Power Query.

¡Hasta la próxima!

Happy
Happy
50 %
Sad
Sad
0 %
Excited
Excited
50 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %
Recopilación de Respuestas de Forms con Power Query Entrada siguiente Recolección de Respuestas de Forms con Power Query

Average Rating

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

One thought on “Clonación y Edición de Forms con Power Automate

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *