Compartir a través de


Función With

Se aplica a: Aplicaciones de lienzo Flujos de escritorio Aplicaciones basadas en modelos Power Platform CLI

Calcula valores y realiza acciones para un único registro, incluidos los registros insertados de valores con nombre.

Descripción

La función With evalúa una fórmula para un solo registro. La fórmula puede calcular un valor o realizar acciones, como modificar datos o trabajar con una conexión. Utilice la función ForAll para evaluar una fórmula para todos los registros en una tabla de registros.

Los campos de registro que se están procesando actualmente estarán disponibles en la formula. Use el operador ThisRecord o simplemente haga referencia a los campos por nombre como lo haría con cualquier otro valor. El operador As también se puede usar para nombrar el registro que se está procesando, lo que puede ayudar a que su fórmula sea más fácil de entender y hacer accesibles los registros anidados. Para obtener más información, vea los ejemplos siguientes y trabajar con el ámbito de registros.

Utilice With para mejorar la legibilidad de fórmulas complejas dividiéndolas en subfórmulas con nombres más pequeños. Estos valores nombrados actúan como variables locales simples confinadas al alcance de With. La misma sintaxis de registro en línea que se utiliza con la función UpdateContext que se puede usar con With. Es preferible usar With que variables de contexto o globales, ya que es autónomo, fácil de entender y puede usarse en cualquier contexto de fórmula declarativa.

Utilice With para tener acceso a los campos del registro que devuelven funciones tales como Patch o Match. With mantiene el valor de estas funciones el tiempo suficiente para utilizarse en cálculos o acciones adicionales.

Si el argumento Record para With es un error, ese error será devuelto por la función y Formula no se evaluará.

Sintaxis

With( Record, Formula )

  • Record (obligatorio). El registro sobre el que se va a actuar. Para valores de nombres, use la sintaxis incorporada { name1: value1, name2: value2, ... }
  • Formula (obligatorio). La fórmula que se evalúa para Record. La fórmula puede hacer referencia a cualquiera de los campos de Record directamente como un ámbito de registro.

Ejemplos

Valores nombrados sencillos

With( { radius: 10,
        height: 15 },
    Pi() * (radius*radius) * height
)
// Result: 4712.38898038 (as shown in a label control)

Este ejemplo utiliza un registro de valores con nombre para calcular el volumen de un cilindro. With se utiliza para capturar todos los valores de entrada juntos, lo que facilita su separación del cálculo en sí.

With anidada

Calculadora de intereses usando la función With.

With( { AnnualRate: RateSlider/8/100,        // slider moves in 1/8th increments and convert to decimal
        Amount: AmountSlider*10000,          // slider moves by 10,000 increment
        Years: YearsSlider,                  // slider moves in single year increments, no adjustment required
        AnnualPayments: 12 },                // number of payments per year
      With( { r: AnnualRate/AnnualPayments,  // interest rate
              P: Amount,                     // loan amount
              n: Years*AnnualPayments },     // number of payments
            r*P / (1 - (1+r)^-n)             // standard interest calculation
      )
)

Este ejemplo anida funciones With para crear un cálculo de dos niveles para pagos mensuales de hipoteca. Mientras no haya conflicto, todos los valores con nombre de la función With externa estarán disponibles con la función With interna.

Dado que los controles deslizantes solo pueden moverse en incrementos de 1, los controles deslizantes se dividen o multiplican para crear efectivamente un incremento personalizado. En el caso de la tasa de interés, RateSlider tiene su propiedad Max establecida en 48, se divide entre 8 para un incremento de un punto porcentual de 1/8 y se divide entre 100 para convertir de porcentaje a decimal, cubriendo el rango de 0,125 % a 6 %. En el caso del importe de un préstamo, AmountSlider tiene su propiedad Max establecida en 60 y se multiplica por 10 000, cubriendo el rango de 10 000 a 600 000.

La función With se recalcula automáticamente a medida que se mueven los controles deslizantes y se muestra el nuevo pago del préstamo. No se usan variables y no hay necesidad de usar la propiedad OnChange de los controles deslizantes.

Aquí están las instrucciones detalladas para crear esta aplicación:

  1. Cree una nueva aplicación.
  2. Agregue un control Slider y nómbrelo RateSlider. Establezca su propiedad Max en 48.
  3. Agregue un control Label a la izquierda del control deslizante. Establezca su propiedad Text en "Tipo de interés":.
  4. Agregue un control Label a la derecha del control deslizante. Establezca su propiedad Text en la fórmula RateSlider/8 & " %".
  5. Agregue otro control Slider y nómbrelo AmountSlider. Establezca su propiedad Max en 60.
  6. Agregue un control Label a la izquierda de este control deslizante. Establezca su propiedad Text en "Importe del préstamo":.
  7. Agregue un control Label a la derecha de este control deslizante. Establezca su propiedad Text en la fórmula AmountSlider/8 * 10000.
  8. Agregue otro control Slider y nómbrelo YearsSlider. Establezca su propiedad Max en 40.
  9. Agregue un control Label a la izquierda de este control deslizante. Establezca su propiedad Text en "Número de años":.
  10. Agregue un control Label a la derecha de este control deslizante. Establezca su propiedad Text en la fórmula YearsSlider.
  11. Agregue un control Label y establezca su propiedad Text en la fórmula que se muestra más arriba.
  12. Agregue un control Label a la izquierda del último control de etiqueta. Establezca su propiedad Text en "Pago mensual recurrente":.

Clave primaria devuelta de Patch

With( Patch( Orders, Defaults( Orders ), { OrderStatus: "New" } ),
      ForAll( NewOrderDetails,
              Patch( OrderDetails, Defaults( OrderDetails ),
                     { Order: OrderID,          // from With's first argument, primary key of Patch result
                       Quantity: Quantity,      // from ForAll's NewOrderDetails table
                       ProductID: ProductID }   // from ForAll's NewOrderDetails table
              )
      )
)

Este ejemplo agrega un registro a la tabla Order de SQL Server. Luego utiliza la clave principal devuelta para el pedido, devuelta por la función Patch en el campo OrderID para crear registros relacionados en la tabla OrderDetails.

Valores extraídos con una expresión regular

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
    Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
// Result: 2:01 AM (as shown in a label control, use the Text function to see the seconds)

Este ejemplo extrae las horas, los minutos y los segundos de un valor de duración ISO 8601 y luego usa estas coincidencia secundarias para crear un valor de fecha y hora.

Tenga en cuenta que, aunque las coincidencias secundarias contienen números, todavía están en una cadena de texto. Utilice la función Value para convertir a un número antes de realizar operaciones matemáticas.

Asignar un registro en un componente

Establezca Asignar registro.