Función With en Power Apps

Calcula valores e realiza accións para un único rexistro, incluídos rexistros en liña de valores nomeados.

Descripción

A función With avalía unha fórmula para un único rexistro. A fórmula pode calcular un valor e/ou realizar accións, como modificar datos ou traballar cunha conexión. Use a función ForAll para avaliar unha fórmula para todos os rexistros nunha táboa de rexistros.

Os campos do rexistro que se están a procesar actualmente están dispoñibles na fórmula. Use o operador ThisRecord ou simplemente faga referencia aos campos por nome como faría con calquera outro valor. O operador As tamén se pode usar para nomear o rexistro que se está a procesar, o que pode axudar a que a fórmula sexa máis fácil de comprender e facer que os rexistros anidados sexan accesibles. Para obter máis información, consulte os seguintes exemplos e traballar co ámbito do rexistro.

Use With para mellorar a lexibilidade de fórmulas complexas dividíndoas en subfórmulas nomeadas máis pequenas. Estes valores nomeados actúan como variables locais simples confinadas ao ámbito de With. A mesma sintaxe de rexistro en liña que se emprega coa función UpdateContext pode usarse con With. O uso de With prefírese sobre variables contextuais ou globais, xa que é autónomo, de fácil comprensión e pódese usar en calquera contexto de fórmula declarativa.

Use With para acceder aos campos do rexistro que son devoltos por funcións, como por exemplo Patch ou Match. With mantén o valor destas funcións o tempo suficiente para empregarse en máis cálculos ou accións.

Se o argumento Rexistro en With é un erro, este erro será devolto pola función e a Fórmula non se avaliará.

Sintaxe

With( Rexistro, Fórmula )

  • Rexistro: necesario. Rexistro sobre o que actuar. Para os valores de nomes, use a sintaxe en liña { name1: value1, name2: value2, ... }
  • Formula: necesario. Fórmula que se vai avaliar para o Rexistro. A fórmula pode facer referencia a calquera dos campos de Rexistro directamente como ámbito do rexistro.

Exemplos

Valores nomeados sinxelos

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

Este exemplo usa un rexistro de valores nomeados para calcular o volume dun cilindro. With estase a empregar para capturar todos os valores de entrada xuntos, facilitando a súa separación do propio cálculo.

With aniñado

Calculadora de intereses usando a 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 exemplo aniña funcións With para crear un cálculo de dous niveis pagamentos mensuais de hipoteca. Sempre que non haxa conflito, todos os valores nomeados de With exterior están dispoñibles en With interior.

Dado que os controis do cursor da barra de desprazamento só poden moverse en incrementos de 1, os cursores da barra de desprazamento divídense ou multiplícanse para crear un incremento personalizado de forma eficaz. No caso da taxa de interese, RateSlider ten a súa propiedade Máx. establecida en 48, dividido por 8 para un incremento de 1/8 punto porcentual e dividido por 100 para converter dunha porcentaxe a un decimal, cubrindo o intervalo de 0,125 % a 6 %. No caso do importe do préstamo, AmountSlider ten a súa propiedade Máx. establecida en 60 e multiplicada por 10 000, cubrindo o intervalo de 10 000 a 600 000.

With recalcúlase automaticamente a medida que os cursores da barra de desprazamento se moven e aparece o novo pagamento do préstamo. Non se usan variables e non hai necesidade de empregar a propiedade OnChange dos controis do cursor da barra de desprazamento.

Aquí están as instrucións detalladas para crear esta aplicación:

  1. Cree unha nova aplicación.
  2. Engada un control Cursor da barra de desprazamento e asígnelle o nome RateSlider. Estableza a súa propiedade Máx. en 48.
  3. Engada un control Etiqueta á esquerda do control do cursor da barra de desprazamento. Estableza a súa propiedade Texto en "Taxa de interese:".
  4. Engada un control Etiqueta á dereita do control do cursor da barra de desprazamento. Estableza a súa propiedade Texto na fórmula RateSlider/8 & " %".
  5. Engada outro control Cursor da barra de desprazamento e asígnelle o nome AmountSlider. Estableza a súa propiedade Máx. en 60.
  6. Engada un control Etiqueta á esquerda deste control do cursor da barra de desprazamento. Estableza a súa propiedade Texto en "Importe do préstamo:".
  7. Engada un control Etiqueta á dereita deste control do cursor da barra de desprazamento. Estableza a súa propiedade Texto na fórmula AmountSlider/8 * 10000.
  8. Engada outro control Cursor da barra de desprazamento e asígnelle o nome YearsSlider. Estableza a súa propiedade Máx. en 40.
  9. Engada un control Etiqueta á esquerda deste control do cursor da barra de desprazamento. Estableza a súa propiedade Texto en "Número de anos:".
  10. Engada un control Etiqueta á dereita deste control do cursor da barra de desprazamento. Estableza a súa propiedade Texto na fórmula YearsSlider.
  11. Engada un control Etiqueta e configure a súa propiedade Texto na fórmula que se mostra anteriormente.
  12. Engada un control Etiqueta á esquerda do control da última etiqueta. Estableza a súa propiedade Texto en "Pagamento mensual periódico:".

Clave principal devolta 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 exemplo engade un rexistro na táboa Pedido en SQL Server. A continuación, use a clave principal devolta para o pedido, devolta pola función Patch no campo OrderID para crear rexistros relacionados na táboa OrderDetails.

Valores extraídos cunha 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 exemplo extrae as horas, minutos e segundos dun valor de duración ISO 8601 e despois usa estas subcoincidencias para crear un valor Data/hora.

Teña en conta que, aínda que as subcoincidencias conteñen números, aínda están nunha cadea de texto. Use a función Value para converter a un número antes de realizar operacións matemáticas.