Trabalhando com objetos sem tipo e dinâmicos
Ao lidar com ações no Power Apps, é possível encontrar valores de retorno sem tipo ou valores de entrada para algumas ações. Antes, o Power Apps ignoraria campos de entrada sem tipo ou dinâmicos e eles não estariam visíveis em expressões do PowerFX, mas agora é possível trabalhar diretamente com esses campos. Antes, quando um tipo de retorno era sem tipo, o Power Apps retornaria um valor booliano. Agora, ele retorna um objeto sem tipo.
Observação
Suponhamos que as expressões do Power Fx dependam de um valor de retorno booliano dessas funções. Nesse caso, você precisará reescrever a fórmula e converter explicitamente o objeto sem tipo em um booliano. Determinadas funções, como "IfError", ainda não dão suporte total a objetos sem tipo. Se a expressão contiver essa função, consulte a observação ao final deste artigo para soluções alternativas.
Passando objetos sem tipo como parâmetros
Determinadas ações precisam de um objeto sem tipo como um valor de parâmetro. Se tiver um registro do Power Fx, você poderá convertê-lo em um objeto sem tipo, tornando-o indicado a ser passado para a ação.
No exemplo abaixo, a ação de mesclagem disponível em uma tabela Conta do Dataverse exige diversos argumentos sem tipo. Para se preparar, definiremos três variáveis para manter TargetObject, SubordinateObject e UpdateContextObject. Começaremos atribuindo a cadeia de texto Microsoft.Dynamics.CRM.account a uma variável, que será reutilizada ao longo de todo o exemplo.
Set (OdataType, “Microsoft.Dynamics.CRM.account”);
Em seguida, TargetObject recebe um registro Power Fx com as propriedades de nome, accountid e @odata.type. Da mesma maneira, também atribuímos registros Power Fx aos objetos Subordinate e 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 });
A seguir, criaremos mais três variáveis para armazenar os registros sem tipo depois da conversão: TargetUntypedObject, SubordinateUntypedObject e UpdateContextUntypedObject. Para realizar a conversão, usaremos a função ParseJSON(JSON()) nas variáveis originais. Essa ação transformará os registros Power Fx em objetos sem tipo.
Set (TargetUntypedObject, ParseJSON(JSON(TargetObject)));
Set (SubordinateUntypedObject, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextUntypedObject, ParseJSON(JSON(UpdateContextObject)));
Por fim, chamamos a ação de mesclagem passando os parâmetros necessários, inclusive sem tipo e com tipo:
Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, PerformParentingChecks: false });
Usando objeto sem tipo retornado por meio de uma ação
Se um conector com base na Ação retornar um objeto, as propriedades poderão ser acessadas diretamente, independentemente de terem sido atribuídos a um tipo. No entanto, se quiser usar uma propriedade para uma finalidade específica no Power Apps, como rotulagem, você precisará convertê-la primeiro.
No exemplo a seguir, a função httpRequest retorna um objeto sem tipo convertido anteriormente como um booliano.
Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));
Uma das propriedades na resposta é displayName. Ela pode ser acessada e convertida com uma expressão Power Fx como a seguinte:
Text(response.displayName)
Converta no objeto Texto para usá-lo em um controle de rótulo do Power Apps.
Trabalhando com campos do Dynamics
As respostas de ação agora registrem a saída dinâmica e você pode utilizar o método descrito acima para ter acesso a essas propriedades. Além disso, também é possível trabalhar com campos de entrada dinâmicos.
Leve em consideração a ação "GetMessageDetails" no Microsoft Teams que tem um parâmetro do corpo de entrada dinâmico. Anteriormente, não era possível exibir nem especificar o parâmetro. Com a atualização recente, é possível definir uma variável chamada "body" com a estrutura de registro Power Fx indicada.
Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}}));
Em seguida, podemos chamar a ação GetMessageDetails e atribuir a resposta à variável teamsResponse.
Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));
Conversão de fórmulas que retornam objetos sem tipo que retornaram boolianos antes.
O Power Fx utiliza um número limitado de objetos sem tipo, logo, a conversão explícita pode ser necessária para a fórmula. Em especial, se a fórmula depender de uma resposta booliana, você precisará converter. Se precisar simplesmente saber se existe um erro, você poderá usar a função IsError:
If(
IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
Notify("An Outlook appointment could not be found or could not be deleted")
)
Para ter acesso a informações de erro disponíveis exclusivamente por meio de IfError, você deve transformar o objeto sem tipo em um tipo válido usando uma função de conversão, como Booliano, Texto ou Valor. Essas funções produzirão um erro se receberem um. O exemplo a seguir ilustra isso:
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)
) ) )