Споделяне чрез


Работа с нетипизирани и динамични обекти

Когато се занимавате с действия в Power Apps, е възможно да срещнете невъведени върнати стойности или входни стойности за някои действия. Преди, Power Apps ще игнорира невъведени или динамични полета за въвеждане, и те няма да бъдат видими в PowerFX изрази, но сега, можете да работите директно с тези полета. Преди, когато даден тип на връщане не е бил въведен,би Power Apps върнал булева стойност. Сега вместо това връща невъведен обект.

Бележка

Да предположим, че вашите Power Fx изрази разчитат на булева върната стойност от тези функции. В този случай ще трябва да пренапишете формулата и изрично да хвърлите невъведения обект на булев. Някои функции, като например "IfError", все още не поддържат напълно невъведени обекти. Ако вашият израз съдържа такава функция, вижте бележката в края на тази статия за заобиколни решения.

Преминаване в нетипизирани обекти като параметри

Някои действия изискват невъведен обект като стойност на параметър. Ако имате Power Fx запис, можете да го конвертирате в невъведен обект, което го прави подходящ за подаване към действието.

В примера по-долу действието за обединяване, налично в таблица "Партньор Dataverse ", изисква няколко невъведени аргумента. За да се подготвим, ще дефинираме три променливи, които да държат TargetObject, SubordinateObject и UpdateContextObject. Ще започнем с присвояване на текстовия низ Microsoft.Dynamics.CRM.account на променлива, която ще се използва повторно в целия пример.

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

След това на TargetObject се присвоява Power Fx запис със свойствата име, accountid и @odata.type. По подобен начин присвояваме Power Fx записи и на обектите Subordinate и 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 }); 

След това ще създадем още три променливи за съхраняване на невъведените записи след преобразуването: TargetUntypedObject, SubordinateUntypedObject и UpdateContextUntypedObject. За да извършим преобразуването, ще използваме функцията ParseJSON(JSON()) върху оригиналните променливи. Това действие ще трансформира Power Fx записите в невъведени обекти.

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

И накрая, ние наричаме действието на сливане чрез преминаване в необходимите параметри, включително както за нетипизирани, така и за въведени:

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

Използване на невъведен обект, върнат чрез действие

Ако конектор, базиран на действие, върне обект, неговите свойства могат да бъдат достъпни директно, независимо дали им е присвоен тип. Въпреки това, ако възнамерявате да използвате имот за конкретна цел Power Apps, като например за етикетиране, ще трябва първо да го хвърлите.

В следващия пример функцията httpRequest връща невъведен обект, който преди това е бил хвърлен като булев.

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

Едно от свойствата в отговора е displayName. Тя може да бъде достъпна и отлята с Power Fx израз като следния:

Text(response.displayName)

Прехвърлете в обекта Text, за да го използвате в контрола за Power Apps етикет.

Работа с динамични полета

Отговорите на действията сега улавят динамичния изход и можете да използвате описания по-горе метод за достъп до тези свойства. Освен това е възможна и работа с динамични полета за въвеждане.

Помислете за действието "GetMessageDetails", което Microsoft Teams има параметър за динамично входно тяло. Преди това този параметър не можеше да бъде прегледан или зададен. С последната актуализация можете да зададете променлива, наречена "тяло", с подходящата Power Fx структура на записа.

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

След това можем да извикаме действието GetMessageDetails и да присвоим отговора на променливата teamsResponse.

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

Конвертиране на формули, които връщат невъведени обекти, които преди това са връщали булеви.

Power Fx отнема ограничен брой нетипизирани обекти, така че може да е необходимо изрично преобразуване за вашата формула. По-специално, ако вашата формула зависи от булев отговор, тогава ще трябва да конвертирате. Ако трябва просто да знаете дали съществува грешка, можете да използвате функцията IsError:

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

За да получите достъп до информация за грешки, която е достъпна изключително чрез IfError, трябва да трансформирате невъведения обект във валиден тип, като използвате функция за конвертиране, като например булев, текст или стойност. Тези функции ще доведат до грешка, ако им бъде дадена такава. Следващият пример илюстрира това:

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