Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Atualizar ou criar registos a granel permite-lhe agir em muitos registos ao mesmo tempo. Eis alguns cenários em que gostaria de atualizar registos em massa:
- Tens muitas fotos e queres carregá-las todas de uma vez.
- Quer enviar uma folha de horário com dados de uma semana ao mesmo tempo.
Também pode querer criar novos discos em massa. Por exemplo, quando a sua aplicação tem de selecionar muitas imagens, é melhor carregá-las todas de uma vez.
Este artigo explica como atualizar ou criar registos a granel dependendo do seu cenário.
Fórmulas para atualizar registos em massa
As fórmulas desta secção podem ser usadas para atualizar registos em massa em aplicações de tela.
Função patch() — Utilize esta função quando a recolha corresponder à origem de dados.
Patch( DataSource, Collection )
Função ForAll() + Lote aninhado + operador de desambiguação — Use esta função quando as origens de dados tiverem diferentes colunas que precisa de aderir.
ForAll( Collection, Patch( DataSource, LookUp( DataSource, Id = Collection[@Id] ), { Column: Value } ) )
Função AddColumns() — Esta função pode ser utilizada para fornecer uma referência de procura na Coleção que contém as atualizações para o DataSource se não tiver campos que facilmente referenciam a tabela.
Exemplo de uma lista de verificação
Este exemplo utiliza uma lista de tarefas. Quando terminar algumas tarefas, pode marcá-las como completas. Pode alargar este cenário a uma lista de verificação de lançamento de produto, lista de verificação de inspeções domiciliárias ou outras listas.
A imagem que se segue mostra os itens da lista de verificação no ficheiro Microsoft Excel. Pode verificar as tarefas relacionadas com o seu blog ou publicação nas redes sociais neste exemplo. A tabela no Excel chama-se ChecklistItems
.
O exemplo usa coleções para demonstrar este comportamento. A abordagem funciona para qualquer back-end tabular à sua escolha.
Os dados do Excel são importados como dados estáticos na aplicação. Na propriedade App.OnStart
, Collect()
os dados do Excel ChecklistItems entram na recolha ChecklistItemsSource
. O coleção ChecklistItemsSource
será utilizada como os dados de origem ao longo da app.
Este exemplo utiliza uma aplicação de dois ecrãs:
- Ecrã 1 — Utilizado para rever os itens da lista de verificação e os marcar como completo.
-
Ecrã 2 — Utilizado para criar um novo item de lista de verificação. O novo item será adicionado à coleção
ChecklistItemsSource
.
Sempre que um item da lista de verificação é verificado, é adicionado a uma coleção chamada CheckedItems
. Utiliza a fórmula abaixo na propriedade do evento OnCheck
do controlo da caixa de verificação. Se o artigo já estiver verificado e fizer parte da coleção, é removido. Caso contrário, o item verificado é adicionado.
Pode alterar o estado entre Feito e Pendente, ou pode utilizar os eventos Oncheck
e OnUncheck
:
If( !IsBlank(
LookUp( CheckedItems, Id = ThisItem.Id )
),
Remove( CheckedItems, ThisItem ),
Collect( CheckedItems, ThisItem )
)
Criar vários registos ao mesmo tempo
Existem diferentes formas de atualizar os registos a granel dependendo do cenário. Esta secção explica como criar vários registos ao mesmo tempo em aplicações de tela.
Quando o utilizador seleciona Concluído no exemplo acima, é necessário atualizar ChecklistItemsSource
com alterações da coleção CheckedItems.
Para colunas com o mesmo nome
Se a sua fonte e destino tiverem os mesmos nomes de colunas, pode utilizar uma declaração de Lote. Por exemplo, as coleções ChecklistItemsSource
e CheckedItems
têm os mesmos nomes de colunas. Pode utilizar a fórmula abaixo para atualizar a fonte de uma só vez com todas as alterações.
Patch( ChecklistItemsSource, CheckedItems )
Para colunas com nomes diferentes
Se as colunas nas tabelas de origem e destino variarem, utilize o ForAll com Lote.
Com ForAll()
deve circular através de cada registo usando uma condição. A condição é uma comparação entre colunas semelhantes (por exemplo, coluna Id
) das diferentes tabelas. Esta comparação torna-se complicada quando a tabela de origem e a tabela de destino têm os mesmos nomes de colunas (por exemplo, se ProjectId
foi uma coluna encontrada em ambas as tabelas Project
e PurchaseOrder
).
Eis as alternativas:
Utilização com operador de desambiguação
Para atualizar o Status
de CheckedItems
para "Concluído", quando os nomes das colunas de tabela de origem e destino forem os mesmos, utilize esta fórmula:
ForAll( CheckedItems,
Patch( ChecklistItemsSource,
LookUp( ChecklistItemsSource, Id = CheckedItems[@Id] ),
{ Status: "Done" }
)
)
Para cada item da coleção CheckedItems
, o ID (representado pelo operador de desambiguação CheckedItems[@Id])
é comparado com a coluna Id da coleção ChecklistItemsSource
. Em seguida, cada registo combinado é atualizado com o estado de "Concluído". O operador de desambiguação é utilizado quando duas colunas pertencentes a diferentes tabelas têm o mesmo nome. Se não utilizar este operador de desambiguação, verá que apenas o primeiro disco é atualizado.
Use uma etiqueta extra dentro da galeria
Se não quiser utilizar uma coleção extra para armazenar os itens verificados, pode experimentar os seguintes passos:
Criar uma etiqueta extra dentro do modelo de galeria.
- Ligue-o à coluna de identificação.
- Mude o nome para IdText.
Remova o código no OnCheck do controlo da caixa de verificação acima mencionado.
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, está a aplicar diretamente o filtro nos itens da Galeria para encontrar os itens verificados. Para cada registo nos itens filtrados, encontra-se uma correspondência na tabela ChecklistItemsSource comparando o ID com o valor armazenado na etiqueta IdText.
O estado é atualizado para "Concluído".
O operador de desambiguação não pode ser usado nos itens da Galeria. Em vez disso, pode armazenar um rótulo dentro da galeria e referenciá-lo para comparação.
Use uma alternativa para criar uma nova coluna com um rótulo diferente
Este método é uma alternativa à utilização do operador de desambiguação ou de um rótulo dentro da galeria.
Ao criar uma cópia local da sua origem de dados, pode utilizar a fórmula AddColumns()
para criar uma nova coluna com uma etiqueta diferente (NewId
) para a coluna Id na sua coleção de origem. Ao utilizar o ForAll com Lote, compare a coluna NewId com a coluna ID nos dados de origem.
Criação de registos em massa
Pode querer criar novos registos em massa se, por exemplo, quiser enviar muitas imagens de uma só vez.
Aqui está um exemplo usando Exemplo de uma lista de verificação.
No ecrã Criar Itens de Lista de Verificação, sempre que selecionar Adicionar, as informações são armazenadas na coleção NewChecklistItems
. Quando selecionar Enviar, ForAll()
com o Patch()
são utilizados para atualizar a recolha de fontes.
ForAll( NewChecklistItems,
Patch( ChecklistItemsSource,
Defaults( ChecklistItemsSource ),{
Id: Id,
Category: Category,
Description: Description,
Status:Status
}
)
)
Para cada item na NewChecklistItems
, é criado um novo registo (indicado por Defaults(ChecklistItemsSource)
) na coleção ChecklistItemsSource
. O Id
está definido para a Id
a partir da coleção NewChecklistItems
. Da mesma forma, estão definidos os valores Category
, Description
e Status
.