Share via


Trabajar con objetos sin tipo y dinámicos

Cuando se trata de acciones en Power Apps, es posible encontrarse con valores de retorno o valores de entrada sin tipo para algunas acciones. Antes, Power Apps hubiera ignorado los campos de entrada sin tipo o dinámicos, y no serían visibles en las expresiones de PowerFX, pero ahora puede trabajar directamente con estos campos. Antes, cuando un tipo de devolución no tenía tipo, Power Apps hubiera devuelto un valor booleano. Ahora, devuelve un objeto sin tipo en su lugar.

Nota

Supongamos que sus expresiones Power Fx se basan en un valor de retorno booleano de estas funciones. En ese caso, tendrá que volver a escribir la fórmula y convertir explícitamente el objeto sin tipo en un valor booleano. Ciertas funciones, como "IfError", aún no admiten completamente objetos sin tipo. Si su expresión contiene una función de este tipo, consulte la nota al final de este artículo para obtener soluciones alternativas.

Pasar objetos sin tipo como parámetros

Ciertas acciones requieren un objeto sin tipo como valor de parámetro. Si tiene un registro Power Fx, puede convertirlo en un objeto sin tipo, haciéndolo adecuado para pasarlo a la acción.

En el ejemplo siguiente, la acción de fusión disponible en una tabla Account de Dataverse requiere varios argumentos sin tipo. Para prepararnos, definiremos tres variables para contener TargetObject, SubordinateObject y UpdateContextObject. Comenzaremos asignando la cadena de texto Microsoft.Dynamics.CRM.account a una variable, que será reutilizada a lo largo del ejemplo.

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

A continuación, se asigna a TargetObject un registro Power Fx con las propiedades name, accounttid y @odata.type. De forma similar, también asignamos registros Power Fx a los objetos Subordinate y 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 continuación, crearemos tres variables más para almacenar los registros sin tipo después de la conversión: TargetUntypedObject, SubordinateUntypedObject y UpdateContextUntypedObject. Para realizar la conversión, usaremos la función ParseJSON(JSON()) en las variables originales. Esta acción transformará los registros Power Fx en objetos sin tipo.

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

Por último, llamamos a la acción de combinación pasando los parámetros necesarios, tanto para sin tipo como para con tipo:

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

Con un objeto sin tipo devuelto mediante una acción

Si un conector basado en Acción devuelve un objeto, se puede acceder directamente a sus propiedades, independientemente de si se les ha asignado un tipo. Sin embargo, si tiene la intención de utilizar una propiedad para un propósito específico en Power Apps, como para el etiquetado, primero deberá convertirla.

En el siguiente ejemplo, la función httpRequest devuelve un objeto sin tipo que se ha convertido previamente como un valor booleano.

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

Una de las propiedades en la respuesta es displayName. Se puede acceder a ella, y convertirla, con una expresión Power Fx como la siguiente:

Text(response.displayName)

Convierta el objeto Texto para usarlo en un control de etiquetas de Power Apps.

Trabajar con campos dinámicos

Las respuestas de acción ahora capturan resultados dinámicos y puede utilizar el método descrito anteriormente para acceder a estas propiedades. Además, también es posible trabajar con campos de entrada dinámicos.

Considere la acción "GetMessageDetails" en Microsoft Teams que tiene un parámetro de cuerpo de entrada dinámico. Anteriormente, este parámetro no se hubiera podido ver ni especificar. Con la actualización reciente, puede establecer una variable llamada "body" con la estructura de registro Power Fx adecuada.

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

Luego, podemos llamar a la acción GetMessageDetails y asignar la respuesta a la variable teamsResponse.

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

Conversión de fórmulas que devuelven objetos sin tipo que antes devolvían valores booleanos.

Power Fx acepta un número limitado de objetos sin tipo, por lo que puede ser necesaria una conversión explícita para su fórmula. En particular, si su fórmula depende de una respuesta booleana, tendrá que convertirla. Si simplemente necesita saber si existe un error, puede usar la función IsError:

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

Para acceder a la información de error que está disponible exclusivamente a través de IfError, debe transformar el objeto sin tipo en un tipo válido con una función de conversión como Boolean, Text o Value. Estas funciones producirán un error si se les da uno. El siguiente ejemplo lo muestra:

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