Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: Aplicativos
de tela Copilot Studio
Fluxos
de ambiente de trabalho Aplicações orientadas por modelos Funções
do Power Platform CLI
Dataverse Power
Pages
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.
Use With para melhorar a legibilidade de fórmulas complexas, dividindo-as em subfórmulas nomeadas menores. Esses valores nomeados agem como simples variáveis locais confinadas ao escopo do With. A mesma sintaxe de registro embutido usada com a função UpdateContext pode ser usada com With. O uso With é preferível ao contexto ou às variáveis globais, pois é independente, fácil de entender e pode ser usado 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 Record for With um erro, esse erro será retornado pela função e a Fórmula não será avaliada.
Sintaxe
With( Record, Fórmula )
-
Registro – Obrigatório. O registo que precisa de ação. Para valores de nomes, utilize a sintaxe inline
{ name1: value1, name2: value2, ... } - Fórmula – 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á sendo usado para capturar todos os valores de entrada juntos, facilitando separá-los do cálculo em si.
Aninhado 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 para criar um cálculo de duas camadas para pagamentos mensais de With hipoteca. Desde que não haja conflito, todos os valores nomeados externos With estão disponíveis dentro do .With
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 é automaticamente recalculado à medida que os controles deslizantes se movem e o novo pagamento do empréstimo é exibido. 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:
- Criar uma nova aplicação.
- Adicione um controlo Slider e dê-lhe o nome RateSlider. Defina a propriedade Max para 48.
- Adicione um controlo Label à esquerda do controlo slider. Defina a propriedade de Text como "Taxa de Juros:".
- Adicione um controlo Label à direita do controlo slider. Defina a sua propriedade Texto para a fórmula RateSlider/8 & " %".
- Adicione outro controlo Slider e dê-lhe o nome AmountSlider. Defina a propriedade Max para 60.
- Adicione um controlo Label deste controlo slider. Defina a propriedade de Text como "Loan Amount:".
- Adicione um controlo Label à direita deste controlo slider. Defina a respetiva propriedade Text como a fórmula AmountSlider/8 * 10000.
- Adicione outro controlo Slider e dê-lhe o nome YearsSlider. Defina a propriedade Max para 40.
- Adicione um controlo Label deste controlo slider. Defina a propriedade de Text como "Número de Anos:".
- Adicione um controlo Label à direita deste controlo slider. Defina a respetiva propriedade Text como a fórmula YearsSlider.
- Adicione um controlo Label e defina a respetiva propriedade Text para a fórmula mostrada acima.
- Adicione um controlo Label à esquerda do último controlo label. Defina a propriedade Text 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.
Mapear um registo num componente
Ver Registo de mapa.