Udostępnij za pośrednictwem


Praca z dynamicznymi wartościami

Podczas korzystania z akcji w aplikacji Power Apps mogą pojawić się dynamiczne wartości zwracane lub wartości wejściowe dla niektórych akcji. Wcześniej aplikacja Power Apps ignorowała dynamiczne pola wprowadzania danych i nie były one widoczne w wyrażeniach Power Fx. Teraz pracujesz bezpośrednio z tymi polami. Wcześniej, gdy typ zwracanej wartości był dynamiczny, Power Apps zwracał wartość logiczną. Teraz zamiast tego zwraca wartość dynamiczną.

Notatka

Jeśli wyrażenia Power Fx opierają się na wartości logicznej zwracanej przez te funkcje, należy ponownie napisać formułę i jawnie rzutować wartość dynamiczną na wartość logiczną. Niektóre funkcje, takie jak "IfError", nie obsługują jeszcze w pełni wartości dynamicznych. Jeśli w wyrażeniu jest używana jedna z tych funkcji, zobacz uwagę na końcu tego artykułu, aby zapoznać się z obejściami.

Przekazywanie wartości dynamicznych jako parametrów

Niektóre akcje wymagają użycia wartości dynamicznej jako parametru. Jeśli masz rekord Power Fx, przekonwertuj go na wartość dynamiczną, aby przekazać go do akcji.

W poniższym przykładzie operacja scalania w tabeli Dataverse Account wymaga kilku argumentów dynamicznych. Aby się przygotować, zdefiniuj trzy zmienne do przechowywania TargetObject, SubordinateObject i UpdateContextObject. Zacznij od przypisania ciągu tekstowego Microsoft.Dynamics.CRM.account do zmiennej, która będzie ponownie używana w całym przykładzie.

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

Następnie przypisz TargetObject rekord Power Fx z właściwościami name, accountid i @odata.type. Podobnie przypisz rekordy Power Fx do obiektów 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 }); 

Następnie utwórz trzy kolejne zmienne do przechowywania rekordów dynamicznych po konwersji: TargetDynamicValue, SubordinateDynamicValue i UpdateContextDynamicValue. Aby przekonwertować, użyj funkcji ParseJSON(JSON()) na oryginalnych zmiennych. Ta akcja przekształca rekordy Power Fx w wartości dynamiczne.

Set (TargetDynamicValue, ParseJSON(JSON(TargetObject)));
Set (SubordinateDynamicValue, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextDynamicValue, ParseJSON(JSON(UpdateContextObject)));

Na koniec wywołaj akcję scalania i przekaż niezbędne parametry zarówno dla typów dynamicznych, jak i określonych:

Environment.Merge({Target: TargetDynamicValue, Subordinate: SubordinateDynamicValue, UpdateContent: UpdateContextDynamicValue, PerformParentingChecks: false  });

Używanie wartości dynamicznych zwracanych za pośrednictwem akcji

Jeśli łącznik oparty na akcji zwraca obiekt, można uzyskać bezpośredni dostęp do jego właściwości, nawet jeśli nie mają one typu. Jeśli jednak chcesz użyć właściwości do czegoś konkretnego w Power Apps, na przykład etykietowania, najpierw rzutuj.

W tym przykładzie funkcja httpRequest zwraca wartość dynamiczną, która jest już rzutowana jako wartość logiczna.

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

Jedną z właściwości w odpowiedzi jest displayName. Można do niego uzyskać dostęp i użyć następującego wyrażenia Power Fx:

Text(response.displayName)

Rzutuj na obiekt Tekst, aby użyć go w kontrolce etykiety usługi Power Apps.

Praca z polami dynamicznymi

Odpowiedzi na akcje przechwytują teraz dynamiczne dane wyjściowe i możesz użyć metody opisanej powyżej, aby uzyskać dostęp do tych właściwości. Można również pracować z dynamicznymi polami wprowadzania.

Rozważmy GetMessageDetails akcję w Microsoft Teams, która ma dynamiczny parametr wejściowy body . Wcześniej nie można było wyświetlić ani określić tego parametru. Wraz z ostatnią aktualizacją ustaw zmienną o nazwie body z odpowiednią strukturą rekordu Power Fx.

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

Następnie możemy wywołać akcję GetMessageDetails i przypisać odpowiedź do zmiennej TeamsResponse.

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

Konwertowanie formuł zwracających wartości dynamiczne, które wcześniej zwracały wartość logiczną

Power Fx przyjmuje ograniczoną liczbę wartości dynamicznych, więc w przypadku formuły może być konieczna wyraźna konwersja. W szczególności, jeśli formuła zależy od odpowiedzi logicznej, należy dokonać konwersji. Aby po prostu sprawdzić, czy istnieje błąd, można użyć funkcji IsError:

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

Aby uzyskać dostęp do informacji o błędzie, które są dostępne wyłącznie za pośrednictwem elementu IfError, należy przekształcić wartość dynamiczną na określony typ przy użyciu funkcji konwersji, takiej jak Boolean, Text lub Value. Funkcje te będą powodować błąd, jeśli zostanie on podany. Ilustruje to poniższy przykład:

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