Compartir a través de


Power Fx en flujos de escritorio

Power Fx es el lenguaje con poco código para expresar lógica a través de Microsoft Power Platform. Es un lenguaje de programación funcional, declarativo, de tipo fuerte y de uso general.

Power Fx se expresa en texto entendible para las personas. Es un lenguaje con poco código con el que los fabricantes pueden trabajar directamente en una barra de fórmulas similar a Excel o la ventana de texto de Visual Studio Code. El "bajo" en código bajo se debe a la naturaleza concisa y simple del lenguaje, lo que facilita las tareas de programación comunes tanto para los creadores como para los desarrolladores.

Power Fx permite todo el espectro de desarrollo, desde creadores sin código ni ningún conocimiento de programación hasta código profesional para desarrolladores profesionales. Permite que diversos equipos colaboren y ahorren tiempo y esfuerzos.

Usar Power Fx en flujos de escritorio

Para usar Power Fx como lenguaje de expresión en un flujo de escritorio, debe crear un flujo de escritorio y habilitar el botón de alternancia respectivo al crear el flujo a través de Power Automate para la consola del escritorio.

Captura de pantalla del botón Habilitar Power Fx

Diferencias en los flujos habilitados de Power Fx

Nota

Cada expresión de Power Fx debe comenzar con "=" (signo igual).

Si está realizando la transición desde flujos donde Power Fx está deshabilitado, es posible que observe algunas diferencias. Para optimizar su experiencia al crear nuevos flujos de escritorio, estos son algunos conceptos clave que debe tener en cuenta:

  • De la misma manera que las fórmulas de Excel, los flujos de escritorio que utilizan Power Fx como lenguaje de expresión utilizan la indización de matrices basada en 1 (uno) en lugar de la indización basada en 0 (cero). Por ejemplo, expression =Index(numbersArray, 1) devuelve el primer elemento de la matriz numbersArray.

  • Los nombres de las variables distinguen entre mayúsculas y minúsculas en los flujos de escritorio con Power Fx. Por ejemplo, NewVar es diferente de NewVar.

  • Cuando Power Fx está habilitado en un flujo de escritorio, se requiere la inicialización de variables antes de su uso. Si se intenta utilizar una variable no inicializada en las expresiones de Power Fx, se produce un error.

  • La acción If acepta una sola expresión condicional. Anteriormente aceptaba múltiples operandos.

  • Mientras que los flujos sin Power Fx habilitado tienen el término "Valor general" para denotar un tipo de objeto desconocido, Power Fx gira en torno a un estricto sistema de tipos. En los flujos habilitados de Power Fx, hay una distinción entre variables dinámicas (variables cuyo tipo o valor se puede cambiar durante el tiempo de ejecución) y valores dinámicos (valores cuyo tipo o esquema se determina en tiempo de ejecución). Para entender mejor esta distinción, piense en el siguiente ejemplo. El tipo de dynamicVariable cambia durante el tiempo de ejecución de Numeric a un valor Boolean, mientras que se determina que dynamicValue es un objeto sin tipo durante el tiempo de ejecución cuyo tipo real es Custom object:

    Captura de pantalla que muestra la configuración de una variable dinámica y un valor dinámico

  • Los valores que se tratan como valores dinámicos son:

    • Tablas de datos
    • Objetos personalizados con esquema desconocido
    • Salidas de acción dinámica (por ejemplo, la acción "Ejecutar script de .NET")
    • Salidas desde la acción "Ejecutar flujo de escritorio"
    • Cualquier salida de acción sin un esquema predefinido (por ejemplo, "Leer en hoja de cálculo de Excel" o "Crear nueva lista")
  • Los valores dinámicos se tratan de manera similar al Objeto sin tipo de Power Fx y normalmente requieren que las funciones explícitas se conviertan en el tipo requerido (por ejemplo, Bool() y Text()). Para optimizar su experiencia, hay una conversión implícita cuando se usa un valor dinámico como entrada de acción o como parte de una expresión Power Fx. No hay validación durante la creación, pero en función del valor real durante el tiempo de ejecución, se produce un error en tiempo de ejecución si la conversión falla.

  • Cada vez que se utiliza una variable dinámica, se muestra un mensaje de advertencia que indica "Tipo diferido proporcionado". Estas advertencias surgen debido al estricto requisito de esquemas de tipo fuerte de Power Fx (tipos definidos estrictamente). Las variables dinámicas no están permitidas en listas, tablas o como una propiedad para valores de registro.

  • Combinando la acción Ejecutar expresión de Power Fx con expresiones usando las funciones Collect, Clear, ClearCollect y Patcch puede emular el comportamiento encontrado en las acciones Agregar elemento a la lista e Insertar fila en la tabla de datos que anteriormente no estaban disponibles para flujos de escritorio de Power Fx habilitados. Aunque ambas acciones siguen estando disponibles, utilice la función Collect cuando trabaje con listas fuertemente tipadas (por ejemplo, una lista de archivos). Esta función garantiza que la lista permanezca tipificada, ya que el uso de la acción Agregar elemento a la lista convierte la lista en un objeto sin tipo.

Ejemplos

  • =1 en un campo de entrada es equivalente al valor numérico 1.
  • = variableName es igual al valor de la variable variableName. 
  • La expresión = {'prop':"value"} devuelve un valor de registro que es equivalente a un objeto personalizado.
  • La expresión = Table({'prop':"value"}) devuelve una tabla Power Fx que equivale a una lista de objetos personalizados. 
  • La expresión - = [1,2,3,4] crea una lista de valores numéricos.
  • Para acceder al valor de una lista, utilice la función Index(var, number), donde var es el nombre de la lista y number es la posición del valor que se va a recuperar.
  • Para acceder a una celda de una tabla de datos mediante un índice de columna, use la función Index(). =Index(Index(DataTableVar, 1), 2) recupera el valor de la celda en la fila 1 dentro de la columna 2. =Index(DataRowVar, 1) recupera el valor de la celda de la fila 1.
  • Para incluir un valor interpolado en una entrada o en un selector de elementos web o de interfaz de usuario, use la siguiente sintaxis: Text before ${variable / expression} text after
    • Ejemplo: The total number is ${Sum(10, 20)}

Nota

Si desea usar el signo de dólar ($) seguido de un signo de llave de apertura ({) dentro de una expresión de Power Fx o en la sintaxis de un selector de elementos web/IU y tiene Power Automate para escritorio no lo trate como la sintaxis de interpolación de cadenas, asegúrese de seguir esta sintaxis: $${ (el primer signo de dólar actuará como carácter de escape)

Funciones Power Fx disponibles

Para obtener la lista completa de todas las funciones disponibles en Power Automate para flujos de escritorio, vaya a Referencia de fórmulas: flujos de escritorio.

Problemas y limitaciones conocidos

  • Actualmente no se admiten las siguientes acciones de la biblioteca estándar de acciones de automatización:
    • Switch
    • Case
    • Caso predeterminado
  • Algunas funciones de Power Fx presentadas a través de IntelliSense no son compatibles actualmente con los flujos de escritorio. Esas funciones muestran el siguiente error en tiempo de diseño cuando se usan: "Parámetro 'Valor': el tipo 'OptionSetValueType' de PowerFx no está soportado".

Novedades

En esta sección se enumera lo que ha cambiado en cada actualización.

2.48

En la versión de setiembre de 2024:

  • Vuelva a habilitar las acciones de manipulación de listas y tablas de datos que no se admitían anteriormente desde la categoría Variables.
  • Compatibilidad nativa con objeto sin tipo para objetos, listas y tablas de datos personalizados. Obtenga más información sobre los objetos sin tipo en Tipo de datos de objeto sin tipo.
    • Este cambio se introdujo para reducir las advertencias en tiempo de diseño y el uso de tipos diferidos. El objeto sin tipo es una manera de controlar tipos con un esquema desconocido en tiempo de diseño.
    • En versiones anteriores, las variables dinámicas (variables cuyo tipo o valor puede cambiarse durante el tiempo de ejecución) y valores dinámicos (valores cuyo tipo o esquema se determina en tiempo de ejecución) se gestionaban del mismo modo. Cuando se usaba un valor dinámico o una variable dinámica en una expresión Power Fx, se desencadenaba una advertencia: "Se ha proporcionado tipo diferido". Estas advertencias se produjeron porque Power Fx aplica esquemas de tipo estrictos (tipos fuertemente definidos). A partir de esta versión, distinguimos entre estos dos casos. Si bien las variables dinámicas continúan generando la advertencia de "tipo diferido", los valores dinámicos ahora se tratan como objetos sin tipo.
    • Todas las variables de la tabla de datos no tienen tipo, mientras que los objetos personalizados resultantes de la acción de Convertir JSON a un objeto personalizado no tienen tipo. Las listas dejarán de tener tipo después de manipularlas con acciones de escritorio de Power Automate de la categoría Variables.
    • Anteriormente, ciertas acciones de automatización de la biblioteca estándar de acciones, como Leer desde Excel, Leer desde CSV, Extraer datos de una web, Extraer datos de la ventana, Ejecutar instrucción SQL y Convertir JSON a un objeto personalizado, producían una variable dinámica, junto con una advertencia de "tipo diferido". Ahora generan una tabla de datos sin tipo o una variable de objeto personalizado sin tipo en su lugar.
  • La función Establecer de Power Fx ahora está habilitada, pero aún no está completamente soportada. Si bien no se puede usar para modificar el valor de una variable directamente, se puede usar con las estructuras anteriores para actualizar también las propiedades de objetos personalizados y los valores de listas en índices específicos (por ejemplo, =Set(Index(Index(DataTable, 1), 1), 42) o =Set(customObject.property, 17)).
  • Se ha corregido un problema con el acceso a las propiedades de lista anidada de un objeto en los flujos habilitados de Power Fx.

Precaución

En la versión 2.48 de Power Automate para escritorio, ha habido actualizaciones para flujos de escritorio de Power Fx habilitados que podrían afectar a la ejecución de flujos de Power Fx habilitados creados con versiones anteriores. Se recomienda probar exhaustivamente esta versión con su flujos existentes de Power Fx .

  • Salidas de flujos secundarios: tenga cuidado al utilizar variables de salida de flujos secundarios en un flujo de escritorio habilitado de Power Fx. Esto implica variables de salida de tipos lista, objeto personalizado y tabla de datos.
  • Matrices de columna de un solo valor : una matriz creada con una expresión como =[1, 2, 3] da como resultado una matriz de columna de un solo valor en flujos habilitados de Power Fx, cuyos elementos son objetos con una sola propiedad: {Value: 1}. Al intentar acceder a la propiedad Value de este elemento, después de modificar la primera matriz con una acción, se produce un error de creación.
  • Uso de función de Power Fx: en ciertas funciones de Power Fx, como IsEmpty(), las versiones anteriores aceptaban una variable dinámica como argumento y no lanzaban un error de validación. Con la versión 2.48, el uso de una variable que se maneja como una variable dinámica da como resultado un error de validación y una falla en la ejecución de los flujos existentes. La solución a esto es aplicar la conversión adecuada al valor dinámico (sin tipo). Obtenga más información sobre las funciones de conversión en Tipo de datos de objeto sin tipo. Es posible que encuentre este problema al editar un flujo y reciba un mensaje de error como "Tipo de argumento no válido (UntypedObject). "Esperando un valor de tabla en su lugar". Para resolver este problema, siga los mensajes de error para convertir la expresión en una válida.
    • Otros ejemplos de funciones que pueden arrojar un error de validación cuando se utiliza una combinación de variables dinámicas y con tipo son Sum(), Filter(), Concatenate() y operadores como in (por ejemplo, "string" in DynamicValueObject).
  • Comparación de variables: de forma similar al problema mencionado anteriormente, puede haber incompatibilidades de tipo cuando se aplican operadores de comparación (=, <>, >, < etc.) en expresiones que implican valores dinámicos. Tenga cuidado y aplique la conversión adecuada antes de comparar valores dinámicos.

2.43

En la versión de abril de 2024:

  • Distinguir mayúsculas de minúsculas. Por ejemplo, NewVar es una variable diferente a newVar.
  • La acción Ejecutar expresión de Power Fx está disponible en el grupo de acciones Variables. Ejecutar expresión de Power Fx le permite ejecutar expresiones directamente en orígenes de datos.
  • Las funciones Collect, Clear, ClearCollect Power Fx son compatibles con los flujos de escritorio.
  • Las funciones Patch de Power Fx son compatibles con los flujos de escritorio.
  • Las variables y expresiones de Power Fx se pueden utilizar en la sintaxis del elemento de la interfaz de usuario o del selector web.
  • Los valores interpolados ahora se pueden incluir en la sintaxis de un selector de elementos web/IU. Para cadenas interpoladas, puede utilizar esta sintaxis: ${ Power Fx expresión }.

Importante

En la versión 2.43 de Power Automate para escritorio, ha habido actualizaciones para flujos de escritorio de Power Fx habilitados que podrían afectar a la ejecución de flujos de escritorio de Power Fx habilitados creados con versiones anteriores. Específicamente:

  • Nombres de variables que distinguen entre mayúsculas y minúsculas: los nombres de variables dentro de flujos de escritorio de Power Fx habilitados creados con Power Automate para la versión de escritorio 2.43 y posteriores distinguen entre mayúsculas y minúsculas. Los flujos de escritorio de Power Fx creados con Power Automate para la versión de escritorio 2.42 y anteriores permitían nombres de variables que no distinguían entre mayúsculas y minúsculas. Por ejemplo, NewVar y newVAR hacen referencia a la misma variable. Para flujos de escritorio de Power Fx habilitados creados con Power Automate para la versión de escritorio 2.42 y anteriores, asegúrese de revisar y verificar que las variables producidas sean las esperadas.

2.42

En la versión de marzo de 2024:

  • Las capacidades de IntelliSense ahora están disponibles para Power Fx flujos de escritorio habilitados.
    • Colorización de sintaxis
    • Funcionalidad de autocompletar durante la escritura con sugerencias en tiempo real
    • Ayudantes de firma para Power Fx funciones

Nota

Las capacidades de IntelliSense están disponibles para expresiones. Para ingresar una expresión, use el signo igual (= su expresión ) al comienzo de la entrada respectiva o la notación de interpolación de cadenas ( ${ su expresión } ).

  • Selector de función
    • Puede acceder al selector de funciones utilizando el botón fx en el bolo al interactuar con las entradas respectivas. Todas las funciones de Power Fx actualmente admitidas para flujos de escritorio están disponibles allí.

2.41

En la versión de febrero de 2024:

  • De ahora en adelante las entradas que no comienzan con el signo igual (=) se consideran valores de tipo texto. Las entradas numéricas y booleanas siempre deben comenzar con el signo igual.
  • Las entradas ahora admiten cadenas interpoladas. Para incluir un valor interpolado en una entrada, utilice la siguiente sintaxis: Text before ${variable/ expression} text after.
    • Ejemplo: The total number is ${Sum(10, 20)}

Nota

Para utilizar la sintaxis de cadena interpolada, omita el signo igual (=) al comienzo de la entrada.

2.39

En la versión de diciembre de 2023:

  • Si la entrada proporcionada no comienza con el signo igual a, se aplican las siguientes reglas:
    • Los valores numéricos sin espacios se interpretan como valores numéricos.
    • Verdadero Falso como entrada, independientemente de mayúsculas y minúsculas y sin espacios, se interpretan como valores booleanos.
    • Todas las demás entradas se consideran valores de tipo texto.