Funções With no Power Apps

Calcula valores e realiza ações num único registo, incluindo registos inline de valores com nome.

Descrição

A função With avalia uma fórmula para um único registo. A fórmula pode calcular um valor e/ou realizar ações, como, por exemplo, modificar os dados ou trabalhar com uma ligação. Utilize a função ForAll para avaliar uma fórmula para todos os registos numa tabela de registos.

Os atuais campos do registo em processamento estão disponíveis na fórmula. Utilize o operador ThisRecord ou simplesmente campos de referência pelo nome, como com qualquer outro valor. O operador As também pode ser usado para nomear o registo que está a ser processado, o que pode ajudar a tornar a sua fórmula mais fácil de compreender e tornar os registos aninhados acessíveis. Para mais informações, consulte os exemplos abaixo e trabalhar com o âmbito de registo.

Utilize With para melhorar a legibilidade de fórmulas complexas dividindo-as em subfórmulas com nomes mais pequenos. Estes valores nomeados funcionam como variáveis locais simples confinadas ao âmbito do With. A mesma sintaxe de registo inline utilizada com a função UpdateContext pode ser utilizada com With. A utilização de With tem preferência sobre variáveis globais ou de contexto, uma vez que é independente, fácil de compreender e pode ser utilizada em qualquer contexto de fórmula declarativa.

Utilize With para aceder aos campos do registo devolvidos por funções como, por exemplo, Patch ou Match. With mantém o valor destas funções o suficiente para ser utilizado em cálculos ou ações adicionais.

Se o argumento do Record como With for um erro, o erro será devolvido pela função e a Formula não será avaliada.

Sintaxe

With( Record, Formula )

  • Record – Obrigatório. O registo que precisa de ação. Para valores de nomes, utilize a sintaxe inline { name1: value1, name2: value2, ... }
  • Formula – Obrigatório. A fórmula a avaliar para Record. A fórmula pode referenciar qualquer um dos campos de Record diretamente como um âmbito de registo.

Exemplos

Valores de nome simples

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

Este exemplo utiliza um registo de valores nomeados para calcular o volume de um cilindro. With está a ser utilizado para capturar todos os valores de entrada em conjunto, facilitando a separação entre eles a partir do cálculo.

With aninhado

Calculadora de juros utilizando 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 as funções With para criar um cálculo de duas camadas para pagamentos mensais de hipoteca. Desde que não exista conflito, todos os valores nomeados externos With ficam disponíveis no With interior.

Uma vez que os controlos de deslize só podem ser movidos em incrementos de 1, os deslizes são divididos ou multiplicados para criar efetivamente um incremento personalizado. No caso da taxa de juros, RateSlider tem a propriedade Max definida como 48, dividida por 8 para um incremento de ponto percentual de 1/8 e dividido por 100 para converter de uma percentagem em decimal, cobrindo o intervalo de 0,125 % a 6%. No caso do montante do empréstimo, AmountSlider tem a respetiva propriedade Max definida como 60 e multiplicada por 10.000, cobrindo o intervalo 10.000 a 600.000.

O WIth é recalculado automaticamente à medida que os controlos de deslize são movidos e o novo pagamento de empréstimo é apresentado. Não são utilizadas variáveis e não é necessário utilizar a propriedade OnChange dos controlos de deslize.

Eis aqui as instruções detalhadas para criar esta aplicação:

  1. Criar uma nova aplicação.
  2. Adicione um controlo de Deslize e dê-lhe o nome RateSlider. Defina a propriedade Max para 48.
  3. Adicione um controlo de Etiqueta à esquerda do controlo de deslize. Defina a propriedade de Texto como "Taxa de Juros:".
  4. Adicione um controlo de Etiqueta à direita do controlo de deslize. Defina a respetiva propriedade Texto como a fórmula RateSlider/8 & " %".
  5. Adicione outro controlo de Deslize e dê-lhe o nome AmountSlider. Defina a propriedade Max para 60.
  6. Adicione um controlo de Etiqueta à esquerda deste controlo de deslize. Defina a propriedade de Texto como "Loan Amount:".
  7. Adicione um controlo de Etiqueta à direita deste controlo de deslize. Defina a respetiva propriedade Texto como a fórmula AmountSlider/8 * 10000.
  8. Adicione outro controlo de Deslize e dê-lhe o nome YearsSlider. Defina a propriedade Max para 40.
  9. Adicione um controlo de Etiqueta à esquerda deste controlo de deslize. Defina a propriedade de Texto como "Número de Anos:".
  10. Adicione um controlo de Etiqueta à direita deste controlo de deslize. Defina a respetiva propriedade Texto como a fórmula YearsSlider.
  11. Adicione um controlo Etiqueta e defina a respetiva propriedade Texto para a fórmula mostrada acima.
  12. Adicione um controlo de Etiqueta à esquerda do último controlo de etiqueta. Defina a propriedade de Texto como "Pagamento Mensal Periódico:".

Chave primária devolvida por 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 registo à tabela Encomenda no SQL Server. Em seguida, utiliza a chave primária devolvida para a encomenda, devolvida pela função Patch no campo OrderID, para criar registos 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, em seguida, utiliza estas subcorrespondências para criar um valor de data/hora.

Tenha em atenção que, embora as subcorrespondências contenham números, ainda estão numa cadeia de texto. Utilize a função Value para converter para um número antes de efetuar operações matemáticas.

Nota

Pode indicar-nos as suas preferências no que se refere ao idioma da documentação? Responda a um breve inquérito. (tenha em atenção que o inquérito está em inglês)

O inquérito irá demorar cerca de sete minutos. Não são recolhidos dados pessoais (declaração de privacidade).