Töötamine liigitamata ja dünaamiliste objektidega

Toimingute Power Apps tegemisel on võimalik mõne toimingu puhul kohata tippimata tagastusväärtusi või sisendväärtusi. Varem Power Apps ignoreeris tippimata või dünaamilisi sisestusvälju ja need ei olnud PowerFX-i avaldistes nähtavad, kuid nüüd saate nende väljadega otse töötada. Varem, kui tagastuse tüüp oli tippimata, Power Apps tagastab see loogiline väärtuse. Nüüd tagastab see selle asemel tüübita objekt.

Märkus

Oletame, et teie Power Fx avaldised tuginevad nende funktsioonide loogiline tagastusväärtusele. Sellisel juhul peate valemi ümber kirjutama ja tüübita objekt selgesõnaliselt loogiline esitama. Teatud funktsioonid, näiteks "IfError", ei toeta veel täielikult tippimata objekte. Kui teie avaldis sisaldab sellist funktsiooni, vaadake lahendusi selle artikli lõpus olevast märkusest.

Kirjutamata objektide edastamine parameetritena

Teatud toimingute puhul on vaja parameetri väärtuseks tüübita objekt. Kui teil on Power Fx kirje, saate selle teisendada tüübita objekt-ks, muutes selle sobivaks toimingule edastamiseks.

Allolevas näites nõuab kontotabelis saadaolev Dataverse koostetoiming mitut tipimata argumenti. Ettevalmistamiseks määratleme kolm muutujat, mida hoida TargetObject, SubordinateObject ja UpdateContextObject. Alustuseks määrame muutujale tekstistringi Microsoft.Dynamics.CRM.account, mida kasutatakse kogu näites uuesti.

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

Seejärel määratakse TargetObjectile Power Fx kirje, mille atribuudid on nimi, accountid ja @odata.type. Samamoodi määrame Power Fx kirjed ka objektidele Subordinate ja 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 }); 

Järgmisena loome veel kolm muutujat tippimata kirjete salvestamiseks pärast teisendamist: TargetUntypedObject, SubordinateUntypedObject ja UpdateContextUntypedObject. Teisendamiseks kasutame algsete muutujate funktsiooni ParseJSON(JSON()). See toiming muudab kirjed Power Fx kirjutamata objektideks.

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

Lõpuks nimetame ühendamistoimingut, sisestades vajalikud parameetrid, sealhulgas nii kirjutamata kui ka trükitud kujul:

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

Toiminguga tagastatud tüübita objekt kasutamine

Kui toimingupõhine konnektor tagastab objekti, pääseb selle atribuutidele otse juurde, olenemata sellest, kas neile on tüüp määratud või mitte. Kui aga kavatsete atribuuti kasutada kindlal eesmärgil Power Apps (nt märgistamiseks), peate selle kõigepealt üle valama.

Järgmises näites tagastab funktsioon httpRequest tüübita objekt, mis on eelnevalt loogiline valatud.

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

Üks vastus atribuutidest on displayName. Sellele pääseb juurde ja seda saab üle kanda järgmise väljendiga Power Fx :

Text(response.displayName)

Objektile ülekandmine – tekst – selle kasutamiseks sildi juhtelemendis Power Apps .

Dünaamiliste väljadega töötamine

Toiminguvastused jäädvustavad nüüd dünaamilise väljundi ja nendele atribuutidele juurdepääsemiseks saate kasutada ülalkirjeldatud meetodit. Lisaks on võimalik töötada ka dünaamiliste sisendväljadega.

Mõelge toimingule "GetMessageDetails", Microsoft Teams millel on dünaamiline sisendkeha parameeter. Varem ei saanud seda parameetrit vaadata ega täpsustada. Hiljutise värskendusega saate määrata muutuja nimega "keha", millel on sobiv Power Fx kirjestruktuur.

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

Seejärel saame helistada toimingule GetMessageDetails ja määrata vastus muutujale teamsResponse.

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

Valemite teisendamine, mis tagastavad varem loogiline tagastanud tipimata objektid.

Power Fx võtab piiratud arvu tipimata objekte, nii et teie valemi jaoks võib olla vajalik selgesõnaline teisendamine. Eelkõige, kui teie valem sõltub loogiline vastus peate teisendama. Kui teil on vaja lihtsalt teada, kas viga on olemas, saate kasutada funktsiooni IsError:

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

Ainult IfErrori kaudu saadaolevale tõrketeabele juurdepääsemiseks peate teisendama tüübita objekt kehtivaks tüübiks, kasutades teisendusfunktsioone, nagu loogiline, tekst või väärtus. Need funktsioonid tekitavad vea, kui neile see antakse. Seda illustreerib järgmine näide:

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