Rad sa netipiziranim i dinamičkim objektima

Kada se radi o radnjama Power Apps, moguće je naići na netipisane vrednosti povraćaja ili ulazne vrednosti za neke radnje. Ranije bi Power Apps zanemarili netipisana ili dinamička ulazna polja i ona ne bi bila vidljiva u PowerFX izrazima, ali sada možete direktno da radite sa ovim poljima. Ranije, kada tip povraćaja nije otkucan, Power Apps to bi vratilo logičku vrednost. Sada umesto toga vraća netipiran objekat.

Napomena

Pretpostavimo Power Fx da se izrazi oslanjaju na logička povratna vrednost iz ovih funkcija. U tom slučaju, moraćete ponovo da napišu formulu i izričito bacite netipisani objekat na Bulov. Određene funkcije, kao što je "IfError", još uvek ne podržavaju otkucane objekte. Ako vaš izraz sadrži takvu funkciju, pogledajte na napomeni na kraju ovog članka za zaobilazna rešenja.

Prolazak u neustipiranim objektima kao parametri

Određene radnje zahtevaju netipiran objekat kao vrednost parametra. Ako imate zapis Power Fx , možete da ga konvertujete u netipiran objekat, što ga čini pogodnim za prosleđivanje radnji.

U dolenavedenom primeru radnja objedinjavanja dostupna u Dataverse tabeli Nalog zahteva nekoliko netipiranih argumenata. Da bismo se pripremili, definisaćemo tri promenljive koje će držati CiljNiObject, SubordinateObject i UpdateContextObject. Počećemo dodeljivanjem tekstualne niske Microsoft.Dynamics.CRM.nalog promenljivoj koja će biti ponovo koristi u celom primeru.

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

Zatim se TargetObject-u Power Fx dodeljuje zapis sa svojstvima imena, naloga i @odata.type. Slično tome dodeljujemo Power Fx zapise objektima podređenih i UpdateContext objekata.

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 promenljive za skladištenje netipiranih zapisa nakon konverzije: TargetUntypedObject, SubordinateUntypedObject i UpdateContextUntypedObject. Da bismo izvršili konverziju, koristićemo funkciju ParseJSON(JSON()) na originalnim promenljivim. Ova radnja će pretvoriti Power Fx zapise u netipirane objekte.

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

Na kraju, radnju objedinjavanja nazivamo prosleđivanje u neophodnim parametrima, uključujući i netipirano i otkucano:

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

Korišćenje netipiranog objekta vraćenog putem radnje

Ako linija spajanja zasnovana na radnji vrati objekat, njegovim svojstvima se može pristupiti direktno, bez obzira na to da li im je dodeljen tip. Međutim, ako nameravate da koristite svojstvo u određene svrhe Power Apps, kao što je označavanje, moraćete prvo da ga bacite.

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

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

Jedno od svojstava u odgovoru je displayName. Može mu se pristupiti i baciti, sa izrazom Power Fx kao što je sledeći:

Text(response.displayName)

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

Rad sa dinamičkim poljima

Odgovori na radnje sada hvataju dinamički izlaz i možete da koristite gore opisani metod za pristup ovim svojstvima. Pored toga, moguć je i rad sa dinamičkim ulaznim poljima.

Uzmite u obzir radnju "GetMessageDetails" koja Microsoft Teams ima dinamičan parametar tela unosa. Prethodno, ovaj parametar nije mogao biti pregledan ili naveden. Pomoću nedavne ispravke možete da postavite promenljivu koja se zove "telo" sa odgovarajućom strukturom Power Fx zapisa.

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

Zatim možemo pozvati getMessageDetails akciju i dodeliti odgovor promenljivoj TeamsResponse.

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

Konvertovanje formula koje vraćaju netipirane objekte koji su prethodno vratili Logičku.

Power Fx uzima ograničen broj netipiranih objekata tako da je eksplicitna konverzija možda neophodna za vašu formulu. Posebno, ako formula zavisi od bulskog odgovora, moraćete da konvertujete. Ako jednostavno morate da znate da li greška postoji, možete da koristite 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 putem ifError-a, morate da transformišete netipirani objekat u važeći tip koristeći funkciju konverzije kao što je Bulo, Tekst ili Vrednost. Ove funkcije će napraviti grešku ako im je data. Sledeći primer ilustruje sledeće:

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