Práce s netypovanými a dynamickými objekty

Při řešení akcí v Power Apps je možné se setkat s netypovanými návratovými hodnotami nebo vstupními hodnotami pro některé akce. Dříve Power Apps ignoroval netypovaná nebo dynamická vstupní pole a ta nebyla viditelná ve výrazech PowerFX, ale nyní můžete pracovat přímo s těmito poli. Dříve, když návratový typ nebyl zadán, Power Apps vrátil logickou hodnotu. Nyní místo toho vrací netypovaný objekt.

Poznámka

Předpokládejme, že vaše výrazy Power Fx spoléhají na logickou návratovou hodnotu z těchto funkcí. V takovém případě budete muset vzorec přepsat a explicitně přetypovat netypovaný objekt na logickou hodnotu. Některé funkce, jako například „IfError“, zatím plně nepodporují netypované objekty. Pokud váš výraz takovou funkci obsahuje, vyhledejte náhradní řešení v poznámce na konci tohoto článku.

Předávání netypovaných objektů jako parametrů

Některé akce vyžadují jako hodnotu parametru netypovaný objekt. Pokud máte záznam Power Fx, můžete ho převést na netypovaný objekt, aby byl vhodný pro předání do akce.

V níže uvedeném příkladu akce sloučení dostupná v tabulce Účet Dataverse vyžaduje několik netypovaných argumentů. Pro přípravu definujeme tři proměnné pro TargetObject, SubordinateObject a UpdateContextObject. Začneme přiřazením textového řetězce Microsoft.Dynamics.CRM.account do proměnné, která bude znovu použita v celém příkladu.

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

Poté je objektu TargetObject přiřazen záznam Power Fx s vlastnostmi name, accountid a @odata.type. Podobně přiřadíme záznamy Power Fx také do objektů Subordinate a 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 }); 

Dále vytvoříme tři další proměnné pro uložení netypovaných záznamů po převodu: TargetUntypedObject, SubordinateUntypedObject a UpdateContextUntypedObject. K provedení převodu použijeme funkci ParseJSON(JSON()) na původní proměnné. Tato akce změní záznamy Power Fx na netypované objekty.

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

Nakonec zavoláme akci sloučení předáním nezbytných parametrů, pro netypované i typované:

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

Použití netypovaného objektu vráceného prostřednictvím akce

Pokud konektor na bázi Akce vrátí objekt, lze k jeho vlastnostem přistupovat přímo, bez ohledu na to, zda jim byl přiřazen typ. Pokud však máte v úmyslu použít vlastnost pro konkrétní účel v Power Apps, například pro štítkování, budete ji muset nejprve přetypovat.

V následujícím příkladu funkce httpRequest vrací netypovaný objekt, který byl dříve přetypován jako logický.

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

Jednou z vlastností v odpovědi je displayName. Lze k němu přistupovat a přenášet jej pomocí výrazu Power Fx, jako je tento:

Text(response.displayName)

Přetypujte na objekt Text pro použití v ovládacím prvku popisku Power Apps.

Práce s dynamickými poli

Odpovědi na akce nyní zachycují dynamický výstup a pro přístup k těmto vlastnostem můžete použít metodu popsanou výše. Navíc je možná i práce s dynamickými vstupními poli.

Zvažte akci „GetMessageDetails“ v Microsoft Teams, která má dynamický vstupní parametr těla. Dříve tento parametr nebylo možné zobrazit ani zadat. Díky nedávné aktualizaci můžete nastavit proměnnou nazvanou „body“ s příslušnou strukturou záznamu Power Fx.

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

Poté můžeme zavolat akci GetMessageDetails a přiřadit odpověď do proměnné teamsResponse.

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

Převod vzorců, které vracejí netypované objekty, které dříve vracely logické hodnoty.

Power Fx bere omezený počet netypovaných objektů, takže pro váš vzorec může být nutná explicitní konverze. Zejména pokud váš vzorec závisí na logické odpovědi, budete muset provést převedení. Pokud potřebujete jednoduše zjistit, zda došlo k chybě, můžete použít funkci IsError:

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

Chcete-li získat přístup k informacím o chybách, které jsou k dispozici výhradně prostřednictvím IfError, musíte převést netypovaný objekt na platný typ pomocí převodní funkce, jako je logická hodnota, text nebo hodnota. Tyto funkce způsobí chybu, pokud je jim zadána. Tuto situaci ukazuje následující příklad:

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