Função With

Aplica-se a: Aplicativos de tela Fluxos da área de trabalho Aplicativos baseados em modelo Power Platform CLI

Calcula valores e executa ações para um único registro, incluindo registros embutidos de valores nomeados.

Descrição

A função With avalia uma fórmula para um único registro. A fórmula pode calcular um valor e/ou realização ações, como modificar dados ou trabalhar com uma conexão. Use a função ForAll para avaliar uma fórmula para todos os registros em uma tabela de registros.

Os campos do registro que está sendo processado no momento estão disponíveis na fórmula. Use o operador ThisRecord ou simplesmente referencie os campos por nome como faria com qualquer outro valor. O operador Astambém pode ser usado para nomear o registro que está sendo processado, o que pode ajudar a tornar sua fórmula mais fácil de entender e tornar os registros aninhados acessíveis. Para obter mais informações, veja os exemplos abaixo e consulte trabalhando com escopo de registros.

Use With para melhorar a legibilidade de fórmulas complexas dividindo-a em subfórmulas nomeadas menores. Esses valores nomeados atuam como variáveis locais simples confinadas ao escopo do With. A mesma sintaxe de registro embutido usada com a função UpdateContext pode ser usada com With. Usar With é preferencial em relação ao contexto ou às variáveis globais, pois ela é autocontida, fácil de entender e pode ser usada em qualquer contexto de fórmula declarativa.

Use With para acessar os campos do registro que são retornados por funções como Patch ou Match. With mantém o valor dessas funções por tempo suficiente para ser usado em cálculos ou ações adicionais.

Se o argumento Registro para With for um erro, esse erro será retornado pela função e a Fórmula não será avaliada.

Sintaxe

With( Registro, Fórmula )

  • Registro - obrigatório. O registro a ser tratado. Para valores de nomes, use a sintaxe embutida { name1: value1, name2: value2, ... }
  • Formula - obrigatório. A fórmula a ser avaliada para o Registro. A fórmula pode fazer referência a qualquer um dos campos de Registro diretamente como um escopo de registro.

Exemplos

Valores nomeados simples

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

Este exemplo usa um registro de valores nomeados para calcular o volume de um cilindro. With está sendo usado para capturar todos os valores de entrada juntos, facilitando sua separação do próprio cálculo.

With aninhado

Calculadora de juros usando a função 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 aninha funções With para criar um cálculo de duas camadas para pagamentos mensais de hipoteca.. Desde que não haja conflito, todos os valores nomeados externos With são disponibilizados dentro do interior With.

Como os controles deslizantes só podem ser movidos em incrementos de 1, os deslizantes são divididos ou multiplicados para criar efetivamente um incremento personalizado. No caso da taxa de juros, o RateSlider tem sua propriedade Max definida como 48, dividida por 8 para um incremento de ponto percentual de 1/8 e dividido por 100 para converter de um percentual para um decimal, cobrindo o intervalo de 0,125% a 6%. No caso do valor do empréstimo, o AmountSlider tem sua propriedade Max definida como 60 e multiplicado por 10.000, cobrindo o intervalo de 10.000 a 600.000.

O With é recalculado automaticamente à medida que os controles deslizantes são movidos e o novo pagamento de empréstimo é exibido. Nenhuma variável é usada e não é necessário usar a propriedade OnChange dos controles deslizantes.

Aqui estão as instruções detalhadas para criar este aplicativo:

  1. Crie um aplicativo.
  2. Adicione um controle Slider e nomeie-o como RateSlider. Defina sua propriedade Max como 48.
  3. Adicione um controle Label à esquerda do controle deslizante. Defina sua propriedade Text como "taxa de juros:".
  4. Adicione um controle Label à direita do controle deslizante. Defina sua propriedade Text para a fórmula RateSlider/8 & " %".
  5. Adicione outro controle Slider e nomeie-o como AmountSlider. Defina sua propriedade Max como 60.
  6. Adicione um controle Label à esquerda deste controle deslizante. Defina sua propriedade Text como "valor do empréstimo:".
  7. Adicione um controle Label à direita deste controle deslizante. Defina sua propriedade Text para a fórmula AmountSlider/8 * 10000.
  8. Adicione outro controle Slider e nomeie-o como YearsSlider. Defina sua propriedade Max como 40.
  9. Adicione um controle Label à esquerda deste controle deslizante. Defina sua propriedade Text como "número de anos:".
  10. Adicione um controle Label à direita deste controle deslizante. Defina sua propriedade Text para a fórmula YearsSlider.
  11. Adicione um controle Label e defina sua propriedade Text para a fórmula mostrada acima.
  12. Adicione um controle Label à esquerda do último controle Label. Defina sua propriedade Text como "pagamento mensal recorrente:".

Chave primária retornada do 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 adiciona um registro à tabela Order em SQL Server. Em seguida, ele usa a chave primária retornada para a ordem, retornada pela função Patch no campo OrderID, para criar registros relacionados na tabela OrderDetails.

Valores extraídos com uma expressão 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 extrai as horas, os minutos e os segundos de um valor de duração ISO 8601 e depois usa essas subcorrespondências para criar um valor de data/hora.

Observe que, embora as subcorrespondências contenham números, elas ainda estão em uma cadeia de texto. Use a função Value para converter em um número antes de executar operações matemáticas.

Mapear um registro em um componente

Consulte Mapear registro.