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


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

При использовании действий в Power Apps вы можете столкнуться с динамическими возвращаемыми значениями или входными значениями для некоторых действий. Ранее в Power Apps игнорировались динамические поля ввода, и они не были видны в выражениях Power Fx. Теперь вы работаете непосредственно с этими полями. Ранее, когда тип возвращаемого значения был динамическим, в Power Apps возвращалось логическое значение. Теперь вместо этого он возвращает динамическое значение.

Примечание.

Если выражения Power Fx полагаются на логическое значение, возвращаемое этими функциями, перепишите формулу и явно приведите динамическое значение к логическому значению. Некоторые функции, такие как IfError, пока не полностью поддерживают динамические значения. Если выражение использует одну из этих функций, обратитесь к примечанию в конце этой статьи.

Передача динамических значений в качестве параметров

Некоторые действия требуют использования динамического значения в качестве параметра. Если у вас есть запись Power Fx, преобразуйте ее в динамическое значение, чтобы передать в действие.

В следующем примере для действия слияния таблицы Учетные записи Dataverse требуется несколько динамических аргументов. Чтобы подготовиться, определите три переменные для хранения TargetObject, SubordinateObject и UpdateContextObject. Начните с присвоения текстовой строки Microsoft.Dynamics.CRM.account переменной, которую вы будете повторно использовать в этом примере.

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

Затем присвойте TargetObject записи Power Fx со свойствами имя, идентификатор аккаунта и @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 }); 

Затем создайте еще три переменные для хранения динамических записей после преобразования: TargetDynamicValue, SubordinateDynamicValue и UpdateContextDynamicValue. Для преобразования используйте функцию ParseJSON(JSON()) на исходных переменных. Это действие преобразует записи Power Fx в динамические значения.

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

Наконец, вызовите действие слияния и передайте необходимые параметры как для динамических, так и для конкретных типов:

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

Использование динамических значений, возвращаемых действием

Если соединитель на основе Действие возвращает объект, вы можете получить доступ к его свойствам напрямую, даже если у них нет типа. Но если вы хотите использовать свойство для чего-то конкретного в Power Apps, например, для подписей, сначала выполните приведение его типа.

В этом примере функция httpRequest возвращает динамическое значение, которое уже приведено к логическому значению.

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

Одним из свойств в ответе является displayName. К нему можно получить доступ и выполнить его приведение с помощью выражения Power Fx следующим образом:

Text(response.displayName)

Выполните приведение к объекту Текст , чтобы использовать его в элементе управления "Подпись Power Apps".

Работа с полями Dynamics

Ответы на действия теперь захватывают динамические выходные данные, и для доступа к этим свойствам можно использовать метод, описанный выше. Также можно работать с динамическими полями ввода.

Рассмотрим действие GetMessageDetails в Microsoft Teams, которое имеет динамический входной параметр body. Ранее этот параметр нельзя было просмотреть или указать. В последнем обновлении задайте переменную с названием body с соответствующей структурой записи Power Fx.

Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: [email protected]”}})));

Затем мы можем вызвать действие GetMessageDetails и назначить ответ переменной teamResponse.

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