En el artículo anterior, vimos cómo recopilar preguntas y respuestas con Power Query. En este artículo, aprenderemos a configurar una pregunta específica con información de nuestra aplicación.
Contexto
Imaginemos que queremos enviar una encuesta de satisfacción con Microsoft Forms, donde los asistentes valoren a los speakers. Manualmente, podríamos crear una encuesta y añadir los speakers de cada evento. Sin embargo, queremos automatizar este proceso para que el sistema personalice la encuesta de cada evento con los speakers correspondientes.
Utilizando la API de Microsoft Forms y Power Automate, podemos lograrlo. ¡Vamos a por ello!
Flujo de Power Automate
El flujo de Power Automate actuará sobre la encuesta asociada a nuestro evento. Aplicaremos los filtros necesarios para modificar solo la encuesta de Forms que necesitamos. En nuestro caso, solo tenemos una encuesta asociada.
Una vez obtenemos la encuesta que queremos modificar, utilizaremos una pregunta de tipo Likert para dar feedback de cada speaker. Esta pregunta se añadirá a nuestra encuesta plantilla.
Para facilitar la adición de los speakers, hemos añadido una pregunta dummy (Speaker Name) que nos ayudará a saber el orden de las preguntas. Con la API de Microsoft Forms, buscaremos esta pregunta.
Posteriormente, obtendremos los speakers asociados a nuestro evento desde otra tabla. Por cada speaker, realizaremos una llamada a la API de Microsoft Forms para crear la pregunta con su nombre.
Finalmente, borraremos nuestra pregunta dummy, dejando solo las preguntas de los speakers asociados al evento.
De lo que empezamos:
A lo que logramos:
Paso a paso
#1: Trigger
El flujo se activa cuando el campo Status Reason se modifica a “On going” en la tabla de Eventos.
#2: Inicializar variable
Inicializamos una variable para calcular el orden de las nuevas preguntas que vamos a crear por cada speaker. Es importante que el valor inicial sea mayor que 0.
#3: Obtener las encuestas asociadas
Obtenemos las encuestas asociadas a nuestro evento, aplicando los filtros necesarios para seleccionar solo las encuestas que queremos modificar.
#4: Obtener la preguntas del formulario
Inicializamos un <<Apply to each>> sobre cada elemento obtenido en el paso #3. Realizamos una llamada para obtener las preguntas del formulario usando >»><<Invoke an HTTP Request>> de Entra ID.
Method: Get
Url of the request: /formapi/api/[Tenant ID]/groups/[Group ID]/forms('[Form ID]')/questions
- TenantId: Almacena el ID de nuestro tenant.
- GroupId: Almacena el ID del grupo donde se están creando los formularios de Microsoft Forms.
- FormId: ID del formulario de Microsoft Forms que queremos recolectar preguntas
Para crear una nueva conexión este tipo de acción para trabajar con la API de Microsoft Forms, debemos de porner los siguientes parámetros:
Base Resource URL: https://forms.office.com
Microsoft Entra ID Resource URI (Application ID URI): https://forms.office.com
#5: Obtenemos los speakers
Dentro del <<Apply to each>>, obtenemos los speakers asociados al evento.
#6: Obtener la pregunta dummy
Utilizamos <<Filter array>> para obtener la pregunta dummy que usaremos como referencia para las nuevas preguntas.
From: @body('Invoke_an_HTTP_request_-_Get_Speaker_Question')['value']
Condition: @equals(item()['title'], 'Speaker Name')
- Condition: El JSON que obtenemos en el paso #4 al recuperar las preguntas contiene un atributo llamado
<<title>>
, que almacena el título de cada pregunta. En nuestro caso, el título de la pregunta dummy es “Speaker Name”. Con este paso, filtramos todas las preguntas del formulario para quedarnos solo con la que necesitamos.
#7: Creación de las nuevas preguntas
Aplicamos un nuevo <<Apply to each>> con el listado de speakers. Incrementamos el orden de cada nueva pregunta y realizamos la llamada para crearla.
Method: POST
Uri: /formapi/api/[Tenant ID]/groups/[Group ID]/forms('[Form ID]')/questions
Body: {
"type": "Question.MatrixChoice",
"title": "[Speaker Name]",
"id": "[New Question Id]",
"order": [New Question Order],
"groupId": "[Group Id of Question Dummy]"
}
- Type: Elegimos este tipo de pregunta porque es de tipo Likert, y las opciones de respuesta se configuran como Matrix Choice.
- Title: Indicamos el nombre de cada speaker. Aquí podemos hacer referencia directamente a un campo de nuestra tabla de speakers.
- Id: El ID que generamos para la nueva pregunta debe empezar por “r” y tener 33 caracteres. Utilizo una combinación de campos que me facilita generar siempre IDs únicos.
- Order: El orden de la nueva pregunta se basa en el orden de la pregunta dummy, al que le sumamos la variable <<
varQuestionOrder
>>. De esta forma, la nueva pregunta se coloca inmediatamente después de la pregunta dummy. - GroupId: Este valor lo obtenemos del paso #6. Las preguntas de tipo Likert tienen una relación jerárquica, por lo que este atributo es necesario. Para otros tipos de preguntas, este atributo no sería necesario.
- TenantId: Almacena el ID de nuestro tenant.
- GroupId: Almacena el ID del grupo donde se están creando los formularios de Microsoft Forms.
- FormId: ID del formulario de Microsoft Forms del que queremos recolectar preguntas.
#8: Borrar pregunta dummy
Una vez creadas las preguntas por cada speaker, borramos la pregunta dummy.
Method: DELETE
Uri: /formapi/api/[Tenant ID]/groups/[Group ID]/forms('[Form ID]')/questions('[Dummy Question Id]'
Conclusión
De esta forma, hemos logrado personalizar una pregunta de nuestro formulario y adaptarla dinámicamente al contenido del evento. Utilizando el conector de Microsoft Entra ID para realizar la llamada HTTP Request, facilitamos la autenticación y la conexión a diferentes servicios de Microsoft.
¡Hasta la próxima!