Esercizio - Uso di codice personalizzato
In questo esercizio si aggiungerà una nuova operazione a un connettore personalizzato esistente. Si userà quindi il codice personalizzato per implementare l'operazione e trasformare la risposta.
Si modificherà il connettore personalizzato Contoso Invoicing che include un'operazione ListInvoice ma non un'operazione LastInvoice. Di conseguenza, si aggiungerà l'operazione LastInvoice per recuperare la fattura creata più di recente. L'API di rete per Contoso Invoicing non supporta questa operazione, quindi si usa il codice personalizzato in esecuzione nell'operazione LastInvoice per reindirizzare la richiesta a ListInvoice nell'API e trasformare la risposta in modo che restituisca solo l'ultima fattura creata.
Importante
Usare un ambiente di test in cui sia stato effettuato il provisioning di Microsoft Dataverse. Se non se ne ha già uno, passare al Piano per sviluppatori Microsoft Power Apps per iscriversi al piano per sviluppatori.
Attività - Preparazione dell'ambiente
In questa attività si importerà una soluzione nell'ambiente in uso.
Passare a Microsoft Power Automate e assicurarsi di trovarsi nell'ambiente corretto.
Selezionare Dati > Connettori personalizzati nel riquadro di spostamento a sinistra.
Verificare di disporre già del connettore personalizzato Contoso Invoicing nell'ambiente.
Se il connettore personalizzato Contoso Invoicing è già presente nell'ambiente, passare direttamente all'attività successiva di questo esercizio. Se il connettore personalizzato non è presente, continuare con il passaggio 5.
Selezionare Soluzioni > Importa.
Selezionare Sfoglia.
Selezionare la soluzione ContosoInvoicingExtensions_1_0_0_0.zip che si trova nella cartella delle risorse, quindi selezionare Apri.
Selezionare Avanti.
Selezionare Importa e attendere il completamento dell'importazione. Al termine dell'importazione, dovrebbe apparire un messaggio di operazione riuscita.
Selezionare Pubblica tutte le personalizzazioni e attendere il completamento della pubblicazione. Non uscire da questa pagina.
Attività - Creazione dell'operazione LastInvoice
In questa attività si creerà una nuova operazione nel connettore personalizzato Contoso Invoicing.
Selezionare la soluzione Contoso Invoicing - Extensions importata. Il componente connettore personalizzato Contoso Invoicing - Extensions dovrebbe apparire.
Selezionare il connettore Contoso Invoicing - Extensions, quindi selezionare Modifica. È possibile che il connettore non includa Extensions nel nome se lo si è creato da un altro esercizio, ma questo non è un problema.
Selezionare la scheda Definizione, quindi + Nuova azione.
Passare alla sezione Richiesta e selezionare + Importa da esempio.
Nella sezione Verbo selezionare Get, incollare
https://contosoinvoicingtest.azurewebsites.net/GetLastInvoice
nella casella URL, quindi selezionare Importa.Scorrere verso il basso fino alla sezione Risposta e selezionare + Aggiungi risposta predefinita.
Incollare il seguente codice JSON nel campo Corpo, quindi selezionare Importa.
{ "invoiceId": "1934", "date": "2023-03-19T06:55:45.9039452+00:00", "createDate": "2023-03-14T06:55:45.9039456Z", "amount": 8000, "accountId": "1001", "accountName": "Wing Tips", "status": "Invoiced", "typeId": 1, "purchaseOrderId": "3004", "tags": "New Account;Special Pricing;Non-returnable" }
Selezionare la scheda Test, scegliere Aggiorna connettore e attendere il completamento dell'aggiornamento.
Aprire una nuova finestra o scheda del browser, quindi passare a Contoso Invoicing.
Selezionare il collegamento Chiave API.
Copiare la chiave API.
Salvare la chiave in un blocco note.
Tornare al connettore, selezionare la scheda Test, quindi selezionare + Nuova connessione.
Incollare la chiave copiata nel campo Chiave API, quindi selezionare Crea connessione.
Selezionare Aggiornaconnessioni.
Scorrere verso il basso fino alla sezione Operazioni, selezionare GetLastInvoice, quindi Verifica operazione.
Si dovrebbe ricevere un errore 404 perché l'API non dispone di un'operazione GetLastInvoice.
Non uscire da questa pagina.
Attività - Aggiunta di codice al connettore
In questa attività si aggiungerà il codice che esegue l'operazione GetLastInvoice.
Selezionare la scheda Codice, quindi attivare l'interruttore Codice abilitato.
Selezionare il menu a discesa Operazioni, quindi selezionare l'operazione GetLastInvoice.
Incollare il seguente codice nel campo Codice, quindi selezionare la scheda Test.
public class Script : ScriptBase { public override async Task<HttpResponseMessage> ExecuteAsync() { // Check if the operation ID matches what is specified in the OpenAPI definition of the connector if (String.Equals(this.Context.OperationId, "GetLastInvoice", StringComparison.OrdinalIgnoreCase)) { this.Context.Request.RequestUri = ReplaceUri(this.Context.Request.RequestUri, "GetLastInvoice", "ListInvoices"); return await this.HandleGetLastInvoiceOperation().ConfigureAwait(false); } else { //pass-thru any other operation to the API directly return await this.HandleForwardOperation().ConfigureAwait(false); } } private Uri ReplaceUri(Uri original, string fromValue, string toValue) { try { var builder = new UriBuilder(original.ToString().Replace(fromValue, toValue)); return builder.Uri; } catch (Exception ex) { throw new Exception(original.ToString().Replace(fromValue, toValue)); } } private async Task<HttpResponseMessage> HandleGetLastInvoiceOperation() { JObject newResult = null; // Use the context to send an HTTP request HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken).ConfigureAwait(continueOnCapturedContext: false); // Do the transformation if the response was successful, otherwise return error responses as-is if (response.IsSuccessStatusCode) { if (response.StatusCode == HttpStatusCode.OK) { var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(continueOnCapturedContext: false); var result = JObject.Parse(responseString); // Wrap the original JSON object into a new JSON object with just two properties if (result != null && result.ContainsKey("invoices") && result["invoices"].HasValues) { var sortedArray = result["invoices"].OrderBy(jo => (DateTime)jo["date"]).ToArray(); var lastInvoice = sortedArray[0]; newResult = new JObject { ["invoiceid"] = lastInvoice["invoiceid"], ["date"] = lastInvoice["date"], ["createDate"] = lastInvoice["createDate"], ["amount"] = lastInvoice["amount"], ["accountId"] = lastInvoice["accountId"], ["accountName"] = lastInvoice["accountName"], ["status"] = lastInvoice["status"], ["typeId"] = lastInvoice["typeId"], ["purchaseOrderId"] = lastInvoice["purchaseOrderId"], ["tags"] = lastInvoice["tags"] }; } else { newResult = new JObject { ["invoiceid"] = "-9999", ["status"] = "No Invoices", }; } } else { newResult = new JObject { ["invoiceid"] = "-9999", ["status"] = "Error retrieving invoices", }; } response.Content = CreateJsonContent(newResult.ToString()); response.StatusCode = HttpStatusCode.OK; } return response; } private async Task<HttpResponseMessage> HandleForwardOperation() { // Use the context to forward/send an HTTP request HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken).ConfigureAwait(continueOnCapturedContext: false); return response; } }
Esaminare il codice. Il codice dovrebbe contenere la seguente logica:
Controlla se si tratta dell'operazione GetLastInvoice e, in caso contrario, inoltra la richiesta non modificata all'API di rete
Modifica la richiesta in modo da usare l'operazione ListInvoice nell'API di rete
Richiama l'API di rete usando SendAsync
Trasforma la risposta per includere solo un singolo oggetto Invoice che è la fattura creata più di recente
Selezionare la scheda Test, scegliere Aggiorna connettore e attendere il completamento dell'aggiornamento.
Scorrere verso il basso fino alla sezione Operazioni, selezionare GetLastInvoice, quindi Verifica operazione.
Si riceverà una risposta che mostra l'ultima fattura.