Funções Update e UpdateIf

Aplica-se a: Aplicações de tela Aplicações condicionadas por modelo

Atualiza os registos numa origem de dados.

Description

Função Update

Utilize a função Update para substituir um registo completo numa origem de dados. Em contrapartida, as funções UpdateIf e Patch modificam um ou mais valores num registo sem afetar os outros valores.

Numa coleção, todo o registo tem de corresponder. As coleções permitem duplicar registos, pelo que vários registos podem ter correspondência. Pode utilizar o argumento RemoveFlags.All para atualizar todas as cópias de um registo. Caso contrário, apenas uma cópia do registo é atualizada.

Se a origem de dados gerar o valor de uma coluna automaticamente, o valor dessa coluna terá de ser reafirmado.

Função UpdateIf

Utilize a função UpdateIf para modificar um ou mais valores num ou mais registos que correspondem a uma ou mais condições. Cada condição pode ser uma fórmula que resulta num valor true ou false e pode referenciar as colunas da origem de dados por nome. A função avalia a condição de cada registo e modifica qualquer registo para o qual o resultado seja true.

Para especificar uma modificação, utilize um registo de alteração com novos valores de propriedade. Se fornecer esta alteração de registo inline com chavetas, as fórmulas de propriedade poderão referenciar propriedades do registo que está a ser modificado. Pode utilizar este comportamento para modificar registos com base numa fórmula.

Tal como na função UpdateIf, também pode utilizar a função Patch para alterar colunas específicas de um registo sem afetar as outras colunas.

Ambas as funções Update e UpdateIf devolvem a origem de dados modificada como uma tabela. Tem de utilizar uma ou outra função numa fórmula de comportamento.

Delegação

Quando utilizada com uma origem de dados, estas funções não podem ser delegadas. Só será obtida a primeira parte da origem de dados e, em seguida, a função aplicada. Isto pode não representar o cenário completo. Poderá ser apresentada uma mensagem de aviso na hora da criação para o lembrar desta limitação.

Suporte à delegação (Experimental)

O suporte à delegação para UpdateIf e RemoveIf está agora em Pré-visualização Experimental (Desligado por predefinição) para origens de dados que o suportam. Se uma origem de dados não suportar esta funcionalidade, o Power Apps envia agora uma consulta para o servidor e obtém todos os dados que correspondem à expressão de filtro até ao máximo de 500, 2000 ou ao tamanho da página de dados. Em seguida, estes registos serão atualizados e enviarão cada um de volta ao servidor para serem atualizados.

Sintaxe

Update( DataSource, OldRecord, NewRecord [, RemoveFlags.All ] )

  • DataSource – Obrigatório. A origem de dados que contém o registo que pretende substituir.
  • OldRecord – Obrigatório. O registo a substituir.
  • NewRecord – Obrigatório. O registo de substituição. Esta operação não é um registo de alteração. É substituído todo o registo e as propriedades em falta estarão em blank.
  • RemoveFlags.All — Opcional. Numa coleção, o mesmo registo pode aparecer mais do que uma vez. Especifique o argumento RemoveFlags.All para atualizar todas as cópias do registo.

UpdateIf( DataSource, Condition1, ChangeRecord1 [, Condition2, ChangeRecord2, ... ] )

  • DataSource – Obrigatório. A origem de dados que contém um ou mais registos que pretende modificar.
  • Condition(s) – Obrigatório. Uma fórmula que avalia como true um ou mais registos que pretende modificar. Pode utilizar nomes de colunas de DataSource na fórmula.
  • ChangeRecord(s) – Obrigatório. Para cada condição correspondente, um registo de alteração dos novos valores de propriedade a aplicar aos registos de DataSource que satisfaçam a condição. Se fornecer o registo inline com chavetas, poderão ser utilizados valores de propriedade do registo existente nas fórmulas de propriedade.

Exemplos

Nestes exemplos, vai remover um ou mais registos de uma origem de dados denominada IceCream e que começa com os dados nesta tabela:

Exemplo de IceCream.

Fórmula Descrição Resultado
Update( IceCream,
First( Filter( IceCream, Flavor="Chocolate" ) ), { ID: 1, Flavor: "Mint Chocolate", Quantity:150 } )
Substitui um registo da origem de dados. Substituir um registo.

A origem de dados IceCream foi modificada.
UpdateIf( IceCream, Quantity > 175, { Quantity: Quantity + 10 } ) Modifica registos com Quantidade superior a 175. O campo Quantidade é incrementado em 10 e não é modificado mais nenhum campo. Modificar registos.

A origem de dados IceCream foi modificada.
Update( IceCream,
First( Filter( IceCream, Flavor="Strawberry" ) ),
{ ID: 3, Flavor: "Strawberry Swirl"} )
Substitui um registo da origem de dados. A propriedade Quantity ainda não foi fornecida no registo de substituição, razão pela qual essa propriedade estará blank nos resultados. Substituir o registo quando a quantidade não for fornecida.

A origem de dados IceCream foi modificada.
UpdateIf( IceCream, true, { Quantity: 0 } ) Define o valor da propriedade Quantity para todos os registos da origem de dados como 0. Definir quantidade para todos para 0.

A origem de dados IceCream foi modificada.

Passo a passo

  1. Importe ou crie uma coleção denominada Inventárioe exiba-a numa galeria tal como descrito em Mostrar dados numa galeria.

  2. Atribua o nome ProductGallery à galeria.

  3. Adicione um controlo de deslize com o nome UnitsSold e defina a propriedade Max para esta expressão:
    ProductGallery.Selected.UnitsInStock

  4. Adicione um botão e defina a respetiva propriedade OnSelect a esta fórmula:
    UpdateIf(Inventário, ProductName = ProductGallery.Selected.ProductName, {UnitsInStock:UnitsInStock-UnitsSold.Value})

  5. Prima F5, selecione um produto na galeria, especifique um valor com o controlo de deslize e, em seguida, selecione o botão.

    Ao número de unidades em stock do produto especificado é subtraída a quantidade que especificou.