Criar ou atualizar registros em massa no Power Apps

Atualizar ou criar registros em massa permite que você atue em vários registros de uma vez. Aqui estão alguns cenários em que você deseja atualizar registros em massa:

  • Você tem muitas fotos e deseja carregar todas de uma vez.
  • Você deseja enviar um quadro de horários com os dados de uma semana de uma vez.

Você também pode querer criar novos registros em massa. Por exemplo, quando seu aplicativo tiver de selecionar muitas imagens, você poderá querer carregar todas de uma vez.

Este artigo explica como atualizar ou criar registros em massa, dependendo do seu cenário.

Fórmulas para atualizar registros em massa

As fórmulas nesta seção podem ser usadas para atualizar registros em massa em aplicativos de tela.

  • Função Patch() — use essa função quando a coleção corresponder à fonte de dados.

    Patch( DataSource, Collection )
    
  • Função ForAll() + Patch aninhado + operador de desambiguação — use essa função quando as fontes de dados tiverem colunas diferentes que você precisa unir.

    ForAll( Collection,
        Patch( DataSource, 
            LookUp( DataSource, Id = Collection[@Id] ),
            { Column: Value }
        )
    )
    
  • Função AddColumns() — essa função pode ser usada para fornecer uma referência de pesquisa na Coleção que contém as atualizações para a DataSource se ela não tiver campos que façam referência à tabela com facilidade.

Para obter uma lista completa de fórmulas para atualizar registros em massa, baixe arquivos relacionados.

Exemplo de uma lista de verificação

Este exemplo usa uma lista de verificação de tarefas. Ao concluir algumas tarefas, você poderá marcá-las como concluídas. Você pode estender este cenário para uma lista de verificação de lançamento de produto, lista de verificação de inspeção residencial ou outras listas.

A captura de tela a seguir mostra os itens da lista de verificação no arquivo do Microsoft Excel. Você pode marcar as tarefas relacionadas ao seu blog ou postagem em mídia social neste exemplo. A tabela no Excel chama-se ChecklistItems. Aqui está o exemplo no Excel.

O exemplo usa coleções para demonstrar esse comportamento. A abordagem funciona para qualquer back-end tabular à sua escolha.

texto alternativo.

Os dados do Excel são importados como dados estáticos para o aplicativo. Na propriedade App.OnStart, Collect() os dados de ChecklistItems do Excel na coleção ChecklistItemsSource. A coleção ChecklistItemsSource será usada como a fonte de dados no aplicativo.

Este exemplo usa um aplicativo de duas telas:

  • Tela 1 — usado para revisar os itens da lista de verificação e marcá-los como concluídos.
  • Tela 2 — usado para criar um novo item da lista de verificação. O novo item será adicionado à coleção ChecklistItemsSource.

Screen1. Screen2

Cada vez que um item da lista de verificação é verificado, ele é adicionado a uma coleção chamada CheckedItems. Ele usa a fórmula abaixo na propriedade de evento OnCheck do controle de caixa de seleção. Se o item já estiver marcado e fizer parte da coleção, ele será removido. Caso contrário, o item marcado será adicionado.

Você pode alternar o status entre Concluído e Pendente ou pode usar os eventos Oncheck e OnUncheck:

If( !IsBlank( 
        LookUp( CheckedItems, Id = ThisItem.Id )
    ),
    Remove( CheckedItems, ThisItem ),
    Collect( CheckedItems, ThisItem )
)

Criar vários registros de uma vez

Existem diferentes maneiras de atualizar registros em massa, dependendo do cenário. Esta seção explica como criar vários registros de uma vez em aplicativos de tela.

Quando o usuário seleciona Concluído no exemplo acima, você precisa atualizar ChecklistItemsSource com alterações da coleção CheckedItems.

Para colunas com o mesmo nome

Se sua origem e destino tiverem os mesmos nomes de coluna, você poderá usar uma instrução Patch. Por exemplo, as coleções ChecklistItemsSource e CheckedItems têm os mesmos nomes de coluna. Você pode usar a fórmula abaixo para atualizar a fonte de uma vez com todas as alterações.

Patch( ChecklistItemsSource, CheckedItems )

Para colunas com nomes diferentes

Se as colunas nas tabelas de origem e destino variarem, use ForAll com Patch.

Com ForAll(), você deve fazer um loop em cada registro usando uma condição. A condição é uma comparação entre colunas semelhantes (por exemplo, a coluna Id) das diferentes tabelas. Esta comparação será complicada quando a tabela de origem e a tabela de destino tiverem os mesmos nomes de coluna (por exemplo, se ProjectId tiver sido uma coluna encontrada em ambas as tabelas Project e PurchaseOrder).

Aqui estão as opções:

Usar com operador de desambiguação

Para atualizar o Status de CheckedItems para "Concluído", quando os nomes das colunas da tabela de origem e destino forem iguais, use esta fórmula:

ForAll( CheckedItems,
    Patch( ChecklistItemsSource, 
        LookUp( ChecklistItemsSource, Id = CheckedItems[@Id] ),
        { Status: "Done" }
    )
)

Para cada item da coleção CheckedItems, a Id (representada pelo operador de desambiguação CheckedItems[@Id]) é comparada com a coluna Id da coleção ChecklistItemsSource. Em seguida, cada registro correspondido é atualizado com o status "Concluído". O operador de desambiguação é usado quando duas colunas pertencentes a tabelas diferentes têm o mesmo nome. Se você não usar esse operador de desambiguação, verá que apenas o primeiro registro é atualizado.

Se não quiser usar uma coleção extra para armazenar os itens marcados, você poderá tentar as seguintes etapas:

  1. Criar um rótulo extra dentro do modelo de galeria.

    1. Vincule-o à coluna Id.
    2. Renomeie o rótulo para IdText.
  2. Remova o código em OnCheck do controle de caixa de seleção mencionado acima.

  3. Escreva a seguinte fórmula no evento OnSelect do botão Concluído:

    ForAll(
        Filter( ChecklistGallery.AllItems,
          StatusCheckbox.Value = true
        ),
        Patch( ChecklistItemsSource,
          LookUp( ChecklistItemsSource, Id = IdText.Text ),
          { Status: "Done" }
        )
    )
    

Aqui, você está aplicando diretamente o filtro nos itens da Galeria para encontrar os itens marcados. Para cada registro nos itens filtrados, uma correspondência é encontrada na tabela ChecklistItemsSource comparando a Id com o valor armazenado no rótulo IdText.

O status é atualizado para "Concluído".

O operador de desambiguação não pode ser usado nos itens da Galeria. Em vez disso, você poderá armazenar um rótulo na galeria e consultá-lo para comparação.

Usar uma alternativa para criar uma nova coluna com um rótulo diferente

Este método é uma alternativa ao uso do operador de desambiguação ou um rótulo dentro da galeria.

Ao criar uma cópia local da sua fonte de dados, você poderá usar a fórmula AddColumns() para criar uma nova coluna com um rótulo diferente (NewId) para a coluna Id em sua coleção de origem. Ao usar ForAll com Patch, você compara a coluna NewId com a coluna Id em seus dados de origem.

Criar registros em massa

Você pode querer criar novos registros em massa se, por exemplo, quiser carregar muitas imagens de uma vez.

Veja um exemplo que usa o Exemplo de uma lista de verificação.

Na tela Criar Itens da Lista de Verificação, cada vez que você selecionar Adicionar, as informações serão armazenadas na coleção NewChecklistItems. Quando você seleciona Enviar, ForAll() com Patch() são usados para atualizar a coleção de origem.

ForAll( NewChecklistItems,
    Patch( ChecklistItemsSource,
        Defaults( ChecklistItemsSource ),{
            Id: Id,
            Category: Category,
            Description: Description,
            Status:Status
        }
    )
)

Para cada item em NewChecklistItems, um novo registro é criado (indicado por Defaults(ChecklistItemsSource)) na coleção ChecklistItemsSource. A Id é definida como a Id da coleção NewChecklistItems. De forma similar, os valores Category, Description e Status são definidos.

Consulte também