Scrittura di una funzione di Azure per l'elaborazione di eventi Microsoft Dataverse
L'esercizio precedente era incentrato sulla registrazione dei webhook per la pubblicazione dei dati di Microsoft Dataverse a un'API Web esterna. Questo esercizio illustra come creare un'API Web di esempio usando il servizio Funzioni di Azure per illustrare come usare un evento webhook pubblicato.
Funzioni di Azure e plug-in
Il servizio Funzioni di Microsoft Azure è un ottimo strumento per eseguire piccole unità di lavoro e può essere paragonato ai plug-in usati in Dataverse per lo stesso scopo. In molti scenari potrebbe essere preferibile eseguire l'offload di questa logica in un componente distinto, ad esempio una funzione di Azure, per ridurre il carico sull'host dell'applicazione Dataverse. È possibile eseguire le funzioni in modo sincrono perché i webhook di Dataverse forniscono il contesto di esecuzione remota delle singole richieste.
Tuttavia, Funzioni di Azure non viene eseguito in modo esplicito nella pipeline di eventi di Dataverse. Pertanto, se è necessario aggiornare dati nel modo più efficiente, ad esempio con la formattazione automatica di un valore di stringa prima che venga pubblicato in Dataverse, è consigliabile usare un plug-in per eseguire questo tipo di operazione. Inoltre, qualsiasi operazione sui dati eseguita dalla funzione di Azure non verrà sottoposta a rollback se, una volta completata, il plug-in presenta un'eccezione ed esegue il rollback.
Scrittura di una funzione di Azure per l'elaborazione di eventi Dataverse
Per scrivere una funzione di Azure per l'elaborazione di eventi Dataverse, usare il modello di sviluppo di Azure di Visual Studio 2022 per creare e pubblicare la funzione. Visual Studio fornisce diversi strumenti per semplificare lo sviluppo di Azure. Sarà pertanto necessario installare Azure Development Tools nell'istanza di Visual Studio 2022 in uso. Se la funzionalità non è installata, aggiungerla mediante il programma di installazione di Visual Studio.
Creazione del progetto Funzione di Azure
Per creare un nuovo progetto di funzione di Azure, usare il modello Funzioni di Azure. Il modello è disponibile quando si crea un nuovo progetto e quindi si digita "funzione" nella barra di ricerca.
Assegnare un nome descrittivo al progetto di funzione e quindi selezionare Crea.
Selezionare .NET Core LTS più recente, selezionare Trigger HTTP, deselezionare la casella di controllo Usa Azurite, selezionare Funzione per Livello di autorizzazione e selezionare Crea.
Il progetto di esempio verrà creato con il seguente codice modello nel file .cs della Funzione:
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);
}
}
Si sostituirà questo codice in un secondo momento, ma sarà prima necessario pubblicare la funzione per verificarne il corretto funzionamento.
Pubblicazione di una funzione di Azure in Azure
Fare clic con il pulsante destro del mouse sul progetto e selezionare Pubblica nel menu di scelta rapida per testare la pubblicazione della funzione nel Servizio app di Azure.
Selezionare Azure e quindi Avanti.
Selezionare App per le funzioni di Azure (Windows) e selezionare Avanti.
Selezionare la sottoscrizione, quindi selezionare Crea nuovo.
Assegnare un nome al nuovo servizio app, selezionare il gruppo di risorse oppure crearne uno nuovo, fornire il resto delle informazioni richieste e selezionare Crea.
Dopo aver creato il profilo di pubblicazione, selezionare Fine.
Selezionare Pubblica per distribuire la Funzione in Azure. La funzione viene pubblicata per impostazione predefinita in modalità di rilascio. Per eseguire il debug di questa funzione (questo argomento verrà approfondito di seguito), è consigliabile pubblicare la Funzione in modalità di debug.
Metodo alternativo di creazione di funzioni di Azure
Per creare manualmente Funzioni di Azure senza ricorrere a Visual Studio 2019, usare il portale di Azure:
Accedere all'ambiente Azure e selezionare + Crea una nuova risorsa
Cercare l'app per la funzione e selezionare App per le funzioni.
Selezionare Crea.
Scegliere il piano di hosting con cui dovrà essere eseguita l'app. Quindi, scegliere Seleziona.
Per creare un'app per Funzioni di Azure, specificarne il nome e lo stack di runtime, quindi verificare che i campi Sottoscrizione, Gruppo di risorse e Area siano corretti, quindi selezionare Rivedi e crea.
Selezionare Crea.
Nota
Questa lezione non tratta i dettagli relativi alla creazione di un nuovo assembly di Funzioni di Azure.
Aggiornamento della logica della funzione per l'interazione con i dati di Dataverse
Se necessario, modificare la voce FunctionName della funzione e il corrispondente nome di classe usando valori più significativi, ad esempio MSLearnFunction.
Alla funzione aggiungere le seguenti istruzioni using:
using Newtonsoft.Json.Linq;Sostituire il codice all'interno della funzione Run con questo codice:
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);Creare la funzione e pubblicarla in Azure facendo clic con il pulsante destro del mouse sul progetto e selezionando Pubblica.
Per verificare che la funzione sia stata pubblicata, accedere al portale di Azure. È possibile selezionarlo manualmente dal gruppo di risorse specificato al momento della creazione della funzione. In alternativa, è possibile cercarlo per nome nel portale di Azure, come mostrato nell'immagine seguente.
Registrazione di un webhook di Dataverse che chiama Funzioni di Azure
Questo esercizio userà Plug-in Registration Tool per registrare un webhook che chiama la nuova Funzione di Azure.
Aprire Plug-in Registration Tool e accedere all'ambiente Dataverse.
Per registrare un nuovo webhook, selezionare Registra un nuovo webhook nell'opzione di menu Registra.
Per recuperare l'URL della Funzione dal portale di Azure, selezionare Recupera URL della funzione.
Copiare l'URL.
Incollare il valore copiato in un editor di testo (il valore dovrebbe essere simile alla stringa seguente).
https://[AppServiceUrl].azurewebsites.net/api/MsLearnFunction?code=[WebhookKey]Tagliare e incollare il valore della stringa di query del codice dall'URL copiato e inserirlo nella sezione Valore della stringa di registrazione del webhook (assicurarsi di rimuovere code=). Selezionare Salva.
Registrare un nuovo passaggio che pubblica un messaggio alla creazione di un nuovo account. Registrare un nuovo passaggio facendo clic con il pulsante destro del mouse sul nuovo assembly di webhook e selezionando Registra nuovo passaggio.
Selezionare Crea per Messaggio, selezionare account per Entità primaria, selezionare Sincrona per Modalità di esecuzione, quindi selezionare il pulsante Registra nuovo passaggio. Poiché si crea questo webhook per l'esecuzione sincrona, durante la registrazione del nuovo passaggio assicurarsi che il flag sia impostato.
Test dell'integrazione del webhook
Per testare l'integrazione del webhook, andare all'ambiente Dataverse e creare un account.
Andare alla funzione nel portale di Azure e visualizzare i log.