Rad sa netipiziranim i dinamičkim objektima

Kada se radi o akcijama u Power Apps, moguće je naići na netipisane povratne vrednosti ili ulazne vrednosti za neke akcije. Ranije bi ignorisao Power Apps neotkucana ili dinamička polja za unos i ne bi bila vidljiva u PoverFKS izrazima, ali sada možete direktno raditi sa ovim poljima. Pre, kada je tip povratka bio neotkucan Power Apps , vratio bi Booleovu vrednost. Sada umesto toga vraća netipizirani objekat.

Napomena

Pretpostavimo da se vaši Power Fx izrazi oslanjaju na Booleovu povratnu vrednost iz ovih funkcija. U tom slučaju, moraćete da prepišete formulu i eksplicitno bacite netipizirani objekat na Boolean. Određene funkcije, kao što je 'IfError', još uvek ne podržavaju u potpunosti neotkucane objekte. Ako vaš izraz sadrži takvu funkciju, pogledajte napomenu na kraju ovog članka za zaobilazna rešenja.

Donošenje u neotkucanim objektima kao parametrima

Određene radnje zahtevaju netipizirani objekat kao vrednost parametra. Ako imate zapis, Power Fx možete ga pretvoriti u netipizirani objekat, što ga čini pogodnim za prelazak na akciju.

U sledećem primeru, akcija spajanja dostupna na tabeli Dataverse računa zahteva nekoliko neotkucanih argumenata. Da bismo se pripremili, definisaćemo tri varijable koje drže TargetObject, SubordinateObject i UpdateContextObject. Počećemo dodeljivanjem tekstualnog niza Microsoft.Dinamics.CRM.account promenljivoj, koja će se ponovo koristiti u primeru.

Set (OdataType, “Microsoft.Dynamics.CRM.account”);

Zatim TargetObject se dodeljuje Power Fx zapis sa svojstvima name, accountid i @odata.type. Slično dodeljujemo Power Fx zapise objektima Subordinate 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 }); 

Zatim ćemo kreirati još tri varijable za čuvanje netipiziranih zapisa nakon konverzije: TargetUntypedObject, SubordinateUntypedObject i UpdateContextUntypedObject. Da biste izvršili konverziju, koristićemo ParseJSON(JSON()) funkciju na originalnim promenljivim. Ova akcija će transformisati zapise Power Fx u neotkucane objekte.

Set (TargetUntypedObject, ParseJSON(JSON(TargetObject)));
Set (SubordinateUntypedObject, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextUntypedObject, ParseJSON(JSON(UpdateContextObject)));

Na kraju, mi pozivamo akciju spajanja tako što ćemo ubaciti neophodne parametre, uključujući i za neotkucane i otkucane:

Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, PerformParentingChecks: false  });

Korišćenje netipizirani objekat vraćen preko akcije

Ako konektor zasnovan na akciji vrati objekat, njegovim svojstvima se može pristupiti direktno, bez obzira da li im je dodeljen tip. Međutim, ako nameravate da koristite imovinu za određenu svrhu Power Apps, kao što je označavanje, prvo ćete morati da je bacite.

U sledećem primeru, funkcija httpRequest vraća netipizirani objekat koji je prethodno bačen kao Boolean.

Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));

Jedna od osobina u odgovor je displayName. Može se pristupiti, i baciti, sa izrazom Power Fx kao što je sledeći:

Text(response.displayName)

Baci na objekat Tekst da biste ga koristili u kontroli oznake Power Apps .

Rad sa dinamičkim poljima

Akcioni odgovori sada snimaju dinamički izlaz, a vi možete koristiti metod opisan gore da biste pristupili ovim svojstvima. Pored toga, moguć je i rad sa dinamičkim poljima za unos.

Razmotrite akciju "GetMessageDetails" koja Microsoft Teams ima parametar dinamičkog ulaznog tela. Ranije se ovaj parametar nije mogao pregledati ili specificirati. Sa nedavnim ažuriranjem, možete podesiti promenljivu pod nazivom 'telo' sa odgovarajućom Power Fx strukturom zapisa.

Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}}));

Zatim možemo pozvati akciju GetMessageDetails i dodeliti odgovor varijabli teamsResponse.

Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));

Pretvaranje formula koje vraćaju neotkucane objekte koji su prethodno vratili Boolean.

Power Fx uzima ograničen broj neotkucanih objekata, tako da eksplicitna konverzija može biti neophodna za vašu formulu. Konkretno, ako vaša formula zavisi od Booleovog odgovor onda ćete morati da konvertujete. Ako vam je potrebno da jednostavno znate da li postoji greška, možete koristiti funkciju IsError:

If(
  IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
  Notify("An Outlook appointment could not be found or could not be deleted")
)

Da biste pristupili informacijama o grešci koje su isključivo dostupne preko IfError, morate transformisati netipizirani objekat u važeći tip koristeći funkciju konverzije kao što su Boolean, Tekst ili Vrednost. Ove funkcije će proizvesti grešku ako im se da. Sledeći primer, ilustruje ovo:

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)
) ) )