Lucrul cu obiecte fără tip și dinamice
Când aveți de-a face cu acțiuni în Power Apps, este posibil să întâlniți valori de returnare netipizate sau valori de intrare pentru unele acțiuni. Înainte, Power Apps ignora câmpurile de intrare netipizate sau dinamice, iar acestea nu erau vizibile în expresiile PowerFX, dar acum puteți lucra direct cu aceste câmpuri. Înainte, când un tip de returnare era netipizat, Power Apps ar returna o valoare Boolean. Acum, returnează în schimb un obiect fără tip.
Notă
Să presupunem că Power Fx expresiile dvs. se bazează pe o valoare returnată Boolean din aceste funcții. În acest caz, va trebui să rescrieți formula și să transformați în mod explicit obiect fără tip într-un Boolean. Anumite funcții, cum ar fi „IfError”, nu acceptă încă pe deplin obiectele netipizate. Dacă expresia dvs. conține o astfel de funcție, consultați nota de la sfârșitul acestui articol pentru soluții alternative.
Trecerea obiectelor netipizate ca parametri
Anumite acțiuni necesită un obiect fără tip ca valoare a parametrului. Dacă aveți o Power Fx înregistrare, o puteți converti într-un obiect fără tip, făcându-l potrivit pentru trecerea la acțiune.
În exemplul de mai jos, acțiunea de îmbinare disponibilă într-un tabel Dataverse Cont necesită mai multe argumente netipizate. Pentru a pregăti, vom defini trei variabile care să dețină TargetObject, SubordinateObject și UpdateContextObject. Vom începe prin a atribui șirul de text Microsoft.Dynamics.CRM.account unei variabile, care va fi reutilizată pe tot parcursul exemplului.
Set (OdataType, “Microsoft.Dynamics.CRM.account”);
Apoi TargetObject i se atribuie o Power Fx înregistrare cu proprietățile nume, cont și @odata.type. În mod similar, atribuim Power Fx înregistrări și obiectelor Subordonate și UpdateContext.
Set (TargetObject, {name: "Test 2", accountid: "145dc2ba-85a2-ed11-aado-0022482d76a5", '@odata.type': OdataType});
Set (SubordinateObject, {name: FirstRecord.’Account name’, accountid: FirstRecord.Account, ‘@odata.type’ : OdataType });
Set (UpdateContextObject, {telephone1: FirstRecord.’Main Phone’, address1_city: FirstRecord.’Address 1 : City’, ‘@odata.type’ : OdataType });
În continuare, vom crea încă trei variabile pentru a stoca înregistrările netipizate după conversie: TargetUntypedObject, SubordinateUntypedObject și UpdateContextUntypedObject. Pentru a efectua conversia, vom folosi funcția ParseJSON(JSON()) pe variabilele originale. Această acțiune va transforma Power Fx înregistrările în obiecte netipizate.
Set (TargetUntypedObject, ParseJSON(JSON(TargetObject)));
Set (SubordinateUntypedObject, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextUntypedObject, ParseJSON(JSON(UpdateContextObject)));
În cele din urmă, numim acțiunea de îmbinare prin transmiterea parametrilor necesari, inclusiv pentru netipăriți și pentru tipărite:
Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, PerformParentingChecks: false });
Folosind obiect fără tip returnat printr-o acțiune
Dacă un conector bazat pe Acțiune returnează un obiect, proprietățile acestuia pot fi accesate direct, indiferent dacă li s-a atribuit un tip. Cu toate acestea, dacă intenționați să utilizați o proprietate într-un anumit scop în Power Apps, cum ar fi pentru etichetare, va trebui să o proiectați mai întâi.
În exemplul următor, funcția httpRequest returnează un obiect fără tip care a fost turnat anterior ca Boolean.
Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));
Una dintre proprietățile din răspuns este displayName. Poate fi accesat și proiectat cu o Power Fx expresie ca următoarea:
Text(response.displayName)
Transmiteți în obiect Text pentru a-l utiliza într-un control Power Apps etichetă.
Lucrul cu câmpuri dinamice
Răspunsurile la acțiune captează acum rezultatul dinamic și puteți utiliza metoda descrisă mai sus pentru a accesa aceste proprietăți. În plus, este posibilă și lucrul cu câmpuri de intrare dinamice.
Luați în considerare acțiunea „GetMessageDetails” din Microsoft Teams care are un parametru de corp de intrare dinamic. Anterior, acest parametru nu putea fi vizualizat sau specificat. Cu actualizarea recentă, puteți seta o variabilă numită „corp” cu structura de înregistrare Power Fx corespunzătoare.
Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}}));
Apoi, putem apela acțiunea GetMessageDetails și atribuim răspuns variabilei teamsResponse.
Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));
Conversia formulelor care returnează obiecte netipizate care au returnat anterior Boolean.
Power Fx ia un număr limitat de obiecte netipizate, așa că poate fi necesară o conversie explicită pentru formula dvs. În special, dacă formula ta depinde de un Boolean răspuns, atunci va trebui să faci conversie. Dacă pur și simplu trebuie să știți dacă există o eroare, puteți utiliza funcția IsError:
If(
IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
Notify("An Outlook appointment could not be found or could not be deleted")
)
Pentru a accesa informații de eroare care sunt disponibile exclusiv prin IfError, trebuie să transformați obiect fără tip într-un tip valid folosind o funcție de conversie, cum ar fi Boolean, Text sau Value. Aceste funcții vor produce o eroare dacă li se oferă una. Următorul exemplu ilustrează acest lucru:
With({result: Office365Outlook.CalendarDeleteItemV2("Calendar", 1)},
If( IsError(result),
IfError(
Boolean(result), // any conversion function would do, such as Text, Value, …
Notify("An Outlook appointment could not be found or could not be deleted: " & FirstError.Message)
) ) )