Arbejde med ikke-indtastede og dynamiske objekter

Når handlinger håndteres i Power Apps, kan der opstå ikke-indtastede returværdier eller inputværdier for visse handlinger. Før kunne Power Apps ignorere ikke-indtastede eller dynamiske inputfelter, og de ville ikke være synlige i PowerFX-udtryk, men nu kan du arbejde direkte med disse felter. Før når en returtype var ikke-skrevet, ville Power Apps returnerer en boolesk værdi. Nu returneres der i stedet et ikke-indtastet objekt.

Bemærk

Antag, at Power Fx-udtrykkene er afhængige af en boolesk returværdi ud fra disse funktioner. I det tilfælde skal du skrive formlen igen og eksplicit angive det ikke-indtastede objekt som boolesk objekt. Visse funktioner, f.eks. 'IfError', understøtter ikke fuldt ud ikke-indtastede objekter endnu. Hvis dit udtryk indeholder en sådan funktion, kan du finde en løsning i noten i slutningen af denne artikel.

Sende ikke-indtastede objekter som parametre

I visse handlinger aktiveres et ikke-indtastet objekt som en parameterværdi. Hvis du har en Power Fx-post, kan du konvertere den til et ikke-skrevet objekt, hvilket gør det velegnet til at overføre den til handlingen.

I eksemplet nedenfor kræver den flettehandling, der er tilgængelig i en Dataverse Firma-tabel flere ikke-indtastede argumenter. Som forberedelse skal du definere tre variabler, som skal indeholde TargetObject-, SubordinateObject- og UpdateContextObject-værdier. Vi begynder med at tildele tekststrengen Microsoft.Dynamics.CRM.account til en variabel, som skal genbruges i hele eksemplet.

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

Derefter tildeles TargetObject en Power Fx-post med egenskaberne navn, accountid og @odata.type. På samme måde tildeles Power Fx poster til objekterne Underordnet og UpdateContext også.

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

Derefter skal du oprette tre variabler mere for at gemme de ikke-indtastede poster efter konverteringen: TargetUntypedObject, SubordinateUntypedObject og UpdateContextUntypedObject. Hvis du vil udføre konverteringen, skal du bruge funktionen ParseJSON(JSON()) på de oprindelige variabler. Du kan bruge denne handling til at transformere Power Fx-posterne til ikke-indtastede objekter.

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

Til sidst kalder vi fletningshandlingen ved at sende de nødvendige parametre videre, herunder for både ikke-indtastede og indtastede:

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

Brug af ikke-indtastede objekter, der returneres via en handling

Hvis en handlingsbaseret conncector returnerer et objekt, kan der opnås direkte adgang til egenskaberne, uanset om de er tildelt en type. Men hvis du vil bruge en egenskab til et bestemt formål i Power Apps, f.eks. til etikettering, skal du først angive den.

I følgende eksempel returnerer funktionen httpRequest et ikke-skrevet objekt, der tidligere er angivet som boolesk.

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

En af egenskaberne i svaret er displayName. Du kan få adgang til den med et Power Fx-udtryk som følgende:

Text(response.displayName)

Tekst for objektet Tekst for at bruge det i et etiketkontrolelement Power Apps.

Arbejde med Dynamics-felter

Handlingssvar registrerer nu dynamisk output, og du kan bruge den metode, der er beskrevet ovenfor, til at få adgang til disse egenskaber. Derudover er det også muligt at arbejde med dynamiske inputfelter.

Overvej handlingen 'GetMessageDetails' i Microsoft Teams, der har en dynamisk inputtekstparameter. Tidligere kunne denne parameter ikke vises eller angives. Med den seneste opdatering kan du angive en variabel, der kaldes "brødtekst" med den rette Power Fx-poststruktur.

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

Derefter kan vi kalde handlingen GetMessageDetails og tildele responset til variablen teamsResponse.

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

Konvertere formler, der returnerer ikke-indtastede objekter, som tidligere har returneret booleske.

Power Fx kræver et begrænset antal ikke-indtastede objekter, så eksplicit konvertering kan være nødvendig for formlen. Hvis formlen især afhænger af et boolesk svar, skal du konvertere. Hvis du har brug for at vide, om der findes en fejl, kan du bruge funktionen IsError:

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

Hvis du vil have adgang til fejloplysninger, der kun er tilgængelige via IfError, skal du transformere det ikke-indtastede objekt til en gyldig type ved hjælp af en konverteringsfunktion, f.eks. boolesk, tekst eller værdi. Disse funktioner vil medføre en fejl, hvis de får en. Følgende eksempel 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)
) ) )