Share via


Arbeid med typeløse og dynamiske objekter

Når du håndterer handlinger i Power Apps, er det mulig å støte på typeløse returverdier eller inndataverdier for enkelte handlinger. Tidligere ignorerte Power Apps typeløse eller dynamiske inndatafelter, og de ville ikke ha vært synlige i PowerFX-uttrykk, men nå kan du arbeide direkte med disse feltene. Tidligere, hvis en returtype var typeløs, ville Power Apps returnere en boolsk verdi. Nå returnerer det i stedet et typeløst objekt.

Obs!

Anta at Power Fx-uttrykkene er avhengige av en boolsk returverdi fra disse funksjonene. I så fall må du skrive formelen på nytt og eksplisitt endre det typeløse objektet til en boolsk verdi. Enkelte funksjoner, for eksempel IfError, støtter ikke typeløse objekter ennå. Hvis uttrykket inneholder en slik funksjon, kan du finne løsninger i notatet på slutten av denne artikkelen.

Overføring av typeløse objekter som parametere

Enkelte handlinger nødvendiggjør et typeløst objekt som en parameterverdi. Hvis du har en Power Fx-oppføring, kan du konvertere den til et typeløst objekt, noe som gjør det egnet for overføring til handlingen.

I eksemplet nedenfor krever flettehandlingen som er tilgjengelig i en Forretningsforbindelse-tabell i Dataverse, flere typeløse argumenter. For å klargjøre definerer vi tre variabler som skal inneholde TargetObject, SubordinateObject og UpdateContextObject. Vi begynner med å tilordne tekststrengen Microsoft.Dynamics.CRM.account til en variabel, som skal brukes på nytt i hele eksemplet.

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

Deretter tilordnes TargetObject en Power Fx-oppføring med egenskapene for navn, accountid og @odata.type. På samme måte tilordner vi også Power Fx-oppføringer til objektene Subordinate og 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 }); 

Deretter skal vi opprette ytterligere tre variabler for å lagre de typeløse oppføringene etter konverteringen: TargetUntypedObject, SubordinateUntypedObject og UpdateContextUntypedObject. For å utføre konverteringen bruker vi funksjonen ParseJSON(JSON()) på de opprinnelige variablene. Denne handlingen transformerer Power Fx-oppføringene til typeløse objekter.

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

Til slutt kaller vi flettehandlingen ved å sende inn de nødvendige parameterne, inkludert for både typeløst og med type:

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

Bruk av typeløst objekt returnert via en handling

Hvis en Handling-basert kobling returnerer et objekt, er det direkte tilgang til egenskapene, uavhengig av om de er tilordnet en type. Hvis du skal bruke en egenskap til et bestemt formål i Power Apps, for eksempel merking, må du imidlertid konvertere den først.

I følgende eksempel returnerer httpRequest-funksjonen et typeløst objekt som tidligere har blitt konvertert som boolsk.

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

En av egenskapene i svaret er displayName. Du får tilgang til den, og den kan konverteres, med et Power Fx-uttrykk som dette:

Text(response.displayName)

Konverter til objektet Tekst for å bruke det i en Power Apps-etikettkontroll.

Arbeid med dynamiske felter

Handlingssvar registrerer nå dynamiske utdata, og du kan bruke metoden beskrevet ovenfor for å få tilgang til disse egenskapene. I tillegg er det mulig å arbeide med dynamiske inndatafelter.

Vurder GetMessageDetails-handlingen i Microsoft Teams, som har en dynamisk inndatatekstparameter. Tidligere kunne ikke denne parameteren vises eller angis. Med den nylige oppdateringen kan du angi en variabel som kalles body, med riktig Power Fx-oppføringsstruktur.

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

Deretter kan vi kalle GetMessageDetails-handlingen og tilordne svaret til teamsResponse-variabelen.

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

Konvertering av formler som returnerer typeløse objekter som tidligere returnerte boolsk.

Power Fx bruker et begrenset antall typeløse objekter, så eksplisitt konvertering kan være nødvendig for formelen. Spesielt hvis formelen avhenger av et boolsk svar, må du konvertere. Hvis du bare må vite om det finnes en feil, kan du bruke IsError-funksjonen:

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

For tilgang til feilinformasjon som er eksklusivt tilgjengelig via IfError, må du transformere det typeløse objektet til en gyldig type ved hjelp av en konverteringsfunksjon, for eksempel boolsk, tekst eller verdi. Disse funksjonene vil føre til en feil hvis de gis en. Eksemplet nedenfor illustrerer dette:

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