Práca s netypovými a dynamickými objektmi
Pri práci s akciami v Power Apps je možné stretnúť sa s netypovanými návratovými hodnotami alebo vstupnými hodnotami pre niektoré akcie. Predtým by Power Apps ignorovalo netypizované alebo dynamické vstupné polia a neboli by viditeľné vo výrazoch PowerFX, ale teraz môžete pracovať priamo s týmito poľami. Predtým, keď návratový typ nebol zadaný, Power Apps vracal boolovskú hodnotu. Teraz namiesto toho vráti netypový objekt.
Poznámka
Predpokladajme, že vaše Power Fx výrazy sa spoliehajú na boolovskú návratovú hodnotu z týchto funkcií. V takom prípade budete musieť prepísať vzorec a explicitne preniesť netypový objekt na booleovskú hodnotu. Niektoré funkcie, ako napríklad 'IfError', zatiaľ plne nepodporujú objekty bez typu. Ak váš výraz obsahuje takúto funkciu, pozrite si poznámku na konci tohto článku, kde nájdete riešenia.
Zadávanie netypovaných objektov ako parametrov
Niektoré akcie vyžadujú netypový objekt ako hodnotu parametra. Ak máte záznam Power Fx , môžete ho previesť na netypový objekt, vďaka čomu je vhodný na prechod do akcie.
V nižšie uvedenom príklade vyžaduje akcia zlúčenia dostupná v tabuľke Dataverse Účet niekoľko nezadaných argumentov. Aby sme sa pripravili, zadefinujeme tri premenné, ktoré budú obsahovať TargetObject, SubordinateObject a UpdateContextObject. Začneme priradením textového reťazca Microsoft.Dynamics.CRM.account k premennej, ktorá sa bude opakovane používať v celom príklade.
Set (OdataType, “Microsoft.Dynamics.CRM.account”);
Potom je objektu TargetObject priradený záznam Power Fx s vlastnosťami name, accountid a @odata.type. Podobne priraďujeme záznamy Power Fx aj objektom 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 });
Ďalej vytvoríme tri ďalšie premenné na ukladanie záznamov bez typu po konverzii: TargetUntypedObject, SubordinateUntypedObject a UpdateContextUntypedObject. Na vykonanie konverzie použijeme funkciu ParseJSON(JSON()) na pôvodných premenných. Táto akcia zmení Power Fx záznamy na nezadané objekty.
Set (TargetUntypedObject, ParseJSON(JSON(TargetObject)));
Set (SubordinateUntypedObject, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextUntypedObject, ParseJSON(JSON(UpdateContextObject)));
Nakoniec voláme akciu zlúčenia odovzdaním potrebných parametrov, a to aj pre netypizované aj napísané:
Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, PerformParentingChecks: false });
Použitie netypový objekt vrátené prostredníctvom akcie
Ak konektor Akcia vráti objekt, jeho vlastnosti sú prístupné priamo bez ohľadu na to, či im bol priradený typ. Ak však zamýšľate použiť vlastnosť na konkrétny účel v Power Apps, napríklad na označovanie, budete ju musieť najskôr odovzdať.
V nasledujúcom príklade funkcia httpRequest vracia netypový objekt, ktorý bol predtým pretypovaný ako booleovský.
Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));
Jednou z vlastností v odpoveď je displayName. Dá sa k nemu pristupovať a prenášať pomocou výrazu Power Fx , ako je tento:
Text(response.displayName)
Preneste do objektu Text, aby ste ho mohli použiť v Power Apps ovládacom prvku menovky.
Práca s dynamickými poľami
Akčné odpovede teraz zachytávajú dynamický výstup a na prístup k týmto vlastnostiam môžete použiť metódu opísanú vyššie. Okrem toho je možná aj práca s dynamickými vstupnými poľami.
Zvážte akciu „GetMessageDetails“ v Microsoft Teams , ktorá má dynamický vstupný parameter tela. Predtým sa tento parameter nedal zobraziť ani zadať. Vďaka nedávnej aktualizácii môžete nastaviť premennú s názvom 'body' s príslušnou štruktúrou záznamu Power Fx .
Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}}));
Potom môžeme zavolať akciu GetMessageDetails a priradiť odpoveď premennej teamResponse.
Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));
Konverzia vzorcov, ktoré vracajú objekty bez typu, ktoré predtým vracali boolovské hodnoty.
Power Fx berie obmedzený počet netypovaných objektov, takže pre váš vzorec môže byť potrebná explicitná konverzia. Najmä, ak váš vzorec závisí od booleovskej odpoveď, budete musieť previesť. Ak potrebujete jednoducho zistiť, či existuje chyba, môžete použiť funkciu IsError:
If(
IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
Notify("An Outlook appointment could not be found or could not be deleted")
)
Ak chcete získať prístup k informáciám o chybách, ktoré sú dostupné výlučne cez IfError, musíte transformovať netypový objekt na platný typ pomocou konverznej funkcie, ako je Boolean, Text alebo Hodnota. Tieto funkcie vyvolajú chybu, ak sú zadané. Ilustruje to nasledujúci prí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)
) ) )