Dela via


Arbeta med typlösa och dynamiska objekt

När du hanterar åtgärder i Power Apps kan du stöta på typlösa returvärden eller indatavärden för vissa åtgärder. Tidigare ignorerade Power Apps typlösa eller dynamiska indatafält och de var inte synliga i PowerFX, men nu kan du arbeta direkt med dessa fält. Innan, när en returtyp var typlös returnerat Power Apps ett booleskt värde. Nu returneras ett typlöst objekt i stället.

Anteckning

Anta att dina Power Fx uttryck bygger på ett booleskt returvärde från dessa funktioner. I så fall måste du skriva om formeln och uttryckligen skapa det typlösa objektet till en boolesk. Vissa funktioner, till exempel IfError, har ännu inte stöd för typlösa objekt. Om ditt uttryck innehåller en sådan funktion läser du artikeln i slutet av artikeln.

Skicka in typlösa objekt som parametrar

Vissa åtgärder förser ett typlöst objekt med parametervärde. Om du har en Power Fx post kan du konvertera den till ett typlöst objekt så att den passar för vidarebefordran till åtgärden.

I exemplet nedan krävs flera typlösa argument för den kopplade åtgärden i tabellen Dataverse Konto . För att förbereda ska vi definiera tre variabler som ska innehålla TargetObject, SubordinateObject, och UpdateContextObject. Vi börjar med att tilldela textsträngen Microsoft.Dynamics.CRM.account till en variabel som ska återanvändas i exemplet.

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

TargetObject tilldelas sedan en Power Fx-post med egenskaperna för namn, accountid och @odata.type. Vi tilldelar samtidigt Power Fx-poster till objekten Subordinate och 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 }); 

Sedan skapa vi ytterligare tre variabler för att lagra de typlösa posterna efter konverteringen: TargetUntypedObject, SubordinateUntypedObject och UpdateContextUntypedObject. För att utföra konverteringen använder vi funktionen ParseJSON(JSON()) på de ursprungliga variablerna. Den här åtgärden omvandlar Power Fx posterna till typlösa objekt.

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

En typisk åtgärd kallas för sammanslå genom att skicka in de nödvändiga parametrarna, både för typlösa och med typ:

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

Använda typlösa objekt som returneras via en åtgärd

Om en Åtgärd-baserad koppling returnerar ett objekt kan objektets egenskaper nås direkt, oavsett om de har tilldelats en typ eller inte. Men om du tänker använda en egenskap för ett specifikt syfte i Power Apps, till exempel för etikettering, måste du först typkonvertera den.

I följande exempel returnerar funktionen httpRequest ett objekt som inte har angetts som booleskt tidigare.

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

En av egenskaperna i svaret är displayName. Du kommer åt det och typkonverterar det med ett Power Fx uttryck som följande:

Text(response.displayName)

Typkonvertera till objekt Text för att använda det i en Power Apps label-kontroll.

Arbeta med Dynamiska fält

Åtgärdssvar samlar nu in dynamiska utdata och du kan använda metoden som beskrivs ovan för att få åtkomst till dessa egenskaper. Det går också att arbeta med dynamiska indatafält.

Överväg åtgärden GetMessageDetails i Microsoft Teams som har en dynamisk indataparameter. Tidigare gick det inte att visa eller ange den här parametern. Med den senaste uppdateringen kan du ange en variabel med namnet Brödtext med rätt Power Fx poststruktur.

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

Sedan kan vi anropa åtgärden GetMessageDetails och tilldela svaret till variabeln teamsResponse.

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

Konvertera formeln som returnerar typlösa objekt som tidigare returnerats booleska.

Power Fx tar ett begränsat antal typlösa objekt så explicit konvertering kan vara nödvändig för din formel. Om formeln är beroende av ett booleskt svar måste du konvertera den. Om du bara behöver veta om det finns ett fel kan du använda IsError-funktionen:

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

För att få åtkomst till felinformation som endast är tillgänglig via IfError måste du omvandla det typlösa objektet till en giltig typ med hjälp av en konverteringsfunktion som boolesk, text eller värde. De här funktionerna ger ett felmeddelande om de får en. Följande exempel visar detta:

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