Escribir una Azure Function que procese eventos de Microsoft Dataverse

Completado

En el ejercicio anterior revisó cómo registrar webhooks que publican datos de Microsoft Dataverse a una API web externa. En este ejercicio creará una API web de ejemplo mediante Azure Functions para ilustrar cómo consumir un evento webhook publicado.

Azure Functions frente a complementos

Microsoft Azure Functions proporciona un gran mecanismo para realizar pequeñas unidades de trabajo, similar a lo que usaría para los complementos en Dataverse. En muchos escenarios, podría tener sentido descargar esta lógica en un componente separado, como en una instancia de Azure Function, para reducir la carga en el host de aplicación de Dataverse. Tiene la disponibilidad de ejecutar funciones de forma sincrónica porque los webhooks de Dataverse proporcionan el contexto de ejecución remota de la solicitud dada.

Sin embargo, Azure Functions no se ejecuta explícitamente dentro de la canalización de eventos de Dataverse. Por tanto, si necesita actualizar los datos de la manera más eficiente, como el autoformato de un valor de cadena antes de su registro en Dataverse, le recomendamos que utilice un complemento para este tipo de operación. Cualquier operación de datos que realice desde la Azure Function tampoco se revertirá si, una vez completada, el complemento tiene una excepción y se revierte.

Escribir una Azure Function que procese eventos de Dataverse

Para comenzar a escribir una Azure Function que procese eventos de Dataverse, debe usar la plantilla de desarrollo de Azure de Visual Studio 2022 para crear y publicar la función. Visual Studio proporciona varias herramientas para ayudar a simplificar el desarrollo de Azure. Por lo tanto, debe tener instaladas las Azure Development Tools en su instancia de Visual Studio 2022. Si no tiene la característica instalada, puede agregarla a través del instalador de Visual Studio.

Crear el proyecto de Azure Function

  1. Cree un nuevo proyecto de Azure Function utilizando la plantilla de Azure Functions. Puede encontrar esta plantilla creando un nuevo proyecto y luego buscando "función" en la barra de búsqueda.

    Captura de pantalla del nuevo proyecto y la búsqueda de funciones.

  2. Asigne a su proyecto de función un nombre descriptivo y luego seleccione Crear.

    Captura de pantalla del nombre del proyecto en la configuración de su nuevo proyecto

  3. Seleccione el último .NET Core LTS, seleccione Desencadenador Http, anule la selección de la casilla Usar Azurita, seleccione Función para Nivel de autorización y seleccione Crear.

    Captura de pantalla de los pasos para crear una nueva aplicación Azure Function

    Su proyecto de ejemplo debe crearse ahora, con el siguiente código de plantilla en el archivo.cs de la función:

 public static class Function1
 {
     [FunctionName("Function1")]
     public static async Task<IActionResult> Run(
         [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
         ILogger log)
     {
         log.LogInformation("C# HTTP trigger function processed a request.");

         string name = req.Query["name"];

         string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
         dynamic data = JsonConvert.DeserializeObject(requestBody);
         name = name ?? data?.name;

         string responseMessage = string.IsNullOrEmpty(name)
             ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
             : $"Hello, {name}. This HTTP triggered function executed successfully.";

         return new OkObjectResult(responseMessage);
     }
 }

Reemplazará este código más tarde, pero primero publicará su función para asegurarse de que todo es correcto.

Publicar la Azure Function en Azure

  1. Haga clic con el botón derecho en el proyecto y seleccione Publicar... en el menú contextual para probar la publicación de la función en Azure App Service.

    Captura de pantalla del botón derecho pulsado en el proyecto y la opción de publicar

  2. Seleccione Azure y luego Siguiente.

  3. Seleccione Aplicación de Azure Function (Windows) y luego Siguiente.

  4. Seleccione la suscripción y, a continuación, Crear nuevo.

    Captura de pantalla del plan de consumo de Azure Functions, Crear nuevo

  5. Asigne un nombre a la nueva instancia de App Service, seleccione su grupo de recursos o cree uno nuevo, proporcione el resto de la información necesaria y luego seleccione Crear.

    Captura de pantalla del nombre de App Service y botón Crear

  6. Después de crear su perfil de publicación, seleccione Finalizar.

  7. Seleccione Publicar para implementar la función en Azure. La función se publica en modo de lanzamiento de manera predeterminada. Si desea depurar esta función (se ampliará la información más adelante), querrá publicar la función en modo de depuración.

    Captura de pantalla del botón Publicar dentro del perfil de publicación

Otro método para crear Azure Functions

Si desea crear manualmente su Azure Function sin la ayuda de Visual Studio 2019, puede hacerlo desde el Azure Portal:

  1. Inicie sesión en su entorno de Azure y seleccione + Crear un nuevo recurso.

  2. Busque la aplicación de funciones y seleccione Aplicación de funciones.

    Captura de pantalla de la búsqueda de la aplicación de funciones en Marketplace

  3. Seleccione Crear.

  4. Para crear una aplicación de Azure Function, especifique el nombre y la pila en tiempo de ejecución, y luego compruebe que los campos Suscripción, Grupo de recursos y Región son correctos y luego seleccione Siguiente.

    Captura de pantalla del nombre de la aplicación de funciones, pila en tiempo de ejecución, revisión + creación

  5. Seleccione Revisar + crear.

  6. Seleccione Crear.

Nota

En esta lección no se tratan los detalles de la creación de un nuevo ensamblado de Azure Function.

Actualizar la lógica de función para interactuar con datos de Dataverse

  1. Si es necesario, cambie FunctionName para la función y el nombre de clase correspondiente por algo más significativo (es decir, MSLearnFunction).

  2. Agregue las siguientes instrucciones using a la función:

    using Newtonsoft.Json.Linq;
    
  3. Reemplace el código del interior de la función Run por este código:

    log.LogInformation("C# HTTP trigger function processed a request.");
    
     string queryParams = "";
     foreach (var q in req.Query)
     {
         queryParams += $"Key: {q.Key} Value: {q.Value}\n";
     }
    
     string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
     dynamic data = JsonConvert.DeserializeObject(requestBody);
     string requestHeader = "";
     foreach (var h in req.Headers)
     {
       requestHeader += $"Key: {h.Key} Value: {h.Value}\n";
     }
     log.LogInformation("Query Parameters:\n" + queryParams);
     log.LogInformation("Request Header: \n" + requestHeader);
     log.LogInformation("Request Body:\n" + requestBody);
     string requestBodyFormatted = JValue.Parse(requestBody).ToString(Formatting.Indented);
     log.LogInformation("Request Body Formatted:\n" + requestBodyFormatted);
    
     try
     {
       dynamic target = data.InputParameters["Target"];
    
       foreach (dynamic field in target.Attributes)
       {
         log.LogInformation($"Name: {field.Key} Value: { field.Value}");
       }
     }
     catch (Exception ex)
     {
       log.LogInformation(ex.ToString());
     }
    
     return (ActionResult)new OkObjectResult(data.InitiatingUserId);
    
  4. Compile la función y publíquela en Azure haciendo clic con el botón derecho en el proyecto y luego seleccionando Publicar...

  5. Compruebe que la función se haya publicado en el Azure Portal. Puede seleccionarla manualmente dentro del grupo de recursos que especificó cuando creó la función. También puede buscarla por nombre en Azure Portal, tal y como se muestra en la siguiente imagen.

    Captura de pantalla de verificación de la publicación de la función.

Registrar un webhook de Dataverse que llame a la Azure Function

En este ejercicio usará Plug-in Registration Tool para registrar un webhook que llame a la nueva Azure Function.

  1. Abra Plug-in Registration Tool e inicie sesión en el entorno de Dataverse.

  2. Registre un nuevo webhook seleccionando Registrar nuevo webhook bajo la opción de menú Registrar.

    Captura de pantalla de Registrar nuevo webhook en el menú Registrar.

  3. Obtenga la URL de la Azure Portal seleccionando Obtener la dirección URL de la función.

    Captura de pantalla de MsLearnFunction > Obtener la dirección URL de la función

  4. Copie la dirección URL.

  5. Pegue el valor copiado en un editor de texto, que debería ser similar a la siguiente cadena.

    https://[AppServiceUrl].azurewebsites.net/api/MsLearnFunction?code=[WebhookKey]
    
  6. Corte y pegue el valor de la cadena de consulta de código de la URL copiada y colóquelo en la sección Valor de la cadena de registro de WebHook (asegúrese de eliminar la parte code=). Seleccione Guardar.

    Captura de pantalla del registro de webhook con los valores introducidos

  7. Registre un nuevo paso que publique un mensaje sobre la creación de una nueva cuenta. Para registrar un nuevo paso, haga clic con el botón derecho en el nuevo ensamblado de webhook y seleccione Registrar nuevo paso.

    Captura de pantalla del valor Registrar nuevo paso en el menú Registrar

  8. Seleccione Crear para Mensaje, seleccione cuenta para Entidad principal, seleccione Sincrónico para Modo de ejecución, y luego seleccione el botón Registrar nuevo paso. Dado que está creando este webhook para que se ejecute sincrónicamente, asegúrese de que el indicador esté configurado cuando registre el nuevo paso.

    Captura de pantalla de Configuración de los valores del nuevo paso

Probar la integración del webhook

  1. Para probar la integración del webhook, vaya a su entorno de Dataverse y cree una fila de cuenta.

  2. Vaya a su función en Azure Portal y vea los registros.

    Captura de pantalla de los detalles de registro de la invocación de la función