Share via


Treballar amb objectes sense tipus i dinàmics

Quan es tracta d'accions, és possible trobar valors de retorn no escrits o valors d'entrada per a algunes accions Power Apps. Abans,ignorava els camps d'entrada no tipificats o dinàmics, i no serien visibles en expressions de PowerFX però ara, Power Apps podeu treballar directament amb aquests camps. Abans, quan un tipus de retorn no estava tipificat, Power Apps retornava un valor booleà. Ara, retorna un objecte sense escriure.

Nota

Suposem que les vostres Power Fx expressions es basen en un valor de retorn booleà d'aquestes funcions. En aquest cas, haureu de reescriure la fórmula i llançar explícitament l'objecte sense escriure a un booleà. Algunes funcions, com ara "IfError", encara no admeten completament els objectes sense escriure. Si la vostra expressió conté aquesta funció, consulteu la nota al final d'aquest article per obtenir solucions.

Passar en objectes no tipificats com a paràmetres

Algunes accions requereixen un objecte no tipificat com a valor de paràmetre. Si teniu un registre, podeu convertir-lo en un Power Fx objecte sense escriure, cosa que el fa adequat per passar a l'acció.

En l'exemple següent, l'acció de combinació disponible en una Dataverse taula de comptes requereix diversos arguments sense escriure. Per preparar-nos, definirem tres variables per contenir TargetObject, SubordinateObject i UpdateContextObject. Començarem assignant la cadena de text Microsoft.Dynamics.CRM.account a una variable, que es reutilitzarà al llarg de l'exemple.

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

A continuació, a TargetObject se li assigna un Power Fx registre amb les propietats de nom, accountid i @odata.type. De la mateixa manera, també assignem Power Fx registres als objectes 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 }); 

A continuació, crearem tres variables més per emmagatzemar els registres sense escriure després de la conversió: TargetUntypedObject, SubordinateUntypedObject i UpdateContextUntypedObject. Per realitzar la conversió, utilitzarem la funció ParseJSON(JSON()) sobre les variables originals. Aquesta acció transformarà els Power Fx registres en objectes sense tipificar.

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

Finalment, cridem a l'acció de combinació passant els paràmetres necessaris, inclosos tant per a no tipificats com per a escrits:

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

Ús d'un objecte sense escriure retornat mitjançant una acció

Si un connector basat en accions retorna un objecte, es pot accedir directament a les seves propietats, independentment de si se li ha assignat un tipus. Tanmateix, si voleu utilitzar una propietat per a una finalitat Power Apps específica, com ara per etiquetar, primer l'haureu d'emetre.

En l'exemple següent, la funció httpRequest retorna un objecte sense escriure que s'ha emès prèviament com a booleà.

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

Una de les propietats de la resposta és displayName. S'hi pot accedir, i emetre, amb una Power Fx expressió com la següent:

Text(response.displayName)

Emet a l'objecte Text per utilitzar-lo en un Power Apps control d'etiqueta.

Com treballar amb camps dinàmics

Les respostes d'acció ara capturen la sortida dinàmica i podeu utilitzar el mètode descrit anteriorment per accedir a aquestes propietats. A més, també és possible treballar amb camps d'entrada dinàmics.

Penseu en l'acció "GetMessageDetails" en Microsoft Teams què té un paràmetre del cos d'entrada dinàmic. Anteriorment, aquest paràmetre no es podia veure ni especificar. Amb l'actualització recent, podeu definir una variable anomenada "cos" amb l'estructura de registres adequada Power Fx .

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

A continuació, podem cridar a l'acció GetMessageDetails i assignar la resposta a la variable teamsResponse.

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

Conversió de fórmules que retornen objectes sense escriure que prèviament retornaven booleà.

Power Fx Pren un nombre limitat d'objectes sense escriure, de manera que pot ser necessària una conversió explícita per a la fórmula. En particular, si la vostra fórmula depèn d'una resposta booleana, haureu de convertir. Si simplement necessiteu saber si existeix un error, podeu utilitzar la funció IsError:

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

Per accedir a la informació d'error disponible exclusivament a través d'IfError, heu de transformar l'objecte no escrit en un tipus vàlid mitjançant una funció de conversió com ara Boolean, Text o Value. Aquestes funcions produiran un error si se'ls dóna una. El següent exemple, ho il·lustra:

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