Поділитися через


Робота з нетипізованими та динамічними об’єктами

Під час роботи з діями можна 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 запис з властивостями name, 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)));

Нарешті, ми викликаємо дію merge, передавши необхідні параметри, включаючи як для untyped, так і для typed:

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)

Приведення до об’єкта Текст, щоб використати його в елементі Power Apps керування міткою.

Робота з динамічними полями

Відповіді на дії тепер захоплюють динамічне виведення, і ви можете скористатися методом, описаним вище, для доступу до цих властивостей. Додатково можлива робота з динамічними полями введення.

Розглянемо дію Microsoft Teams «GetMessageDetails», яка має динамічний параметр тіла введення. Раніше цей параметр не можна було переглянути або вказати. З останнім оновленням ви можете встановити змінну під назвою ’body’ з відповідною 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, необхідно перетворити нетипізований об’єкт на дійсний тип за допомогою функції перетворення, наприклад Boolean, Text або Value. Ці функції видадуть помилку, якщо їм її задати. Наступний приклад ілюструє це:

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