Manipulação de dados

Concluído

Você pode usar plug-ins para centralizar a lógica que modifica ou aumenta os dados. Os plug-ins instantâneos são úteis, pois você pode concluir a ação sob demanda. Por exemplo, você pode ter um plug-in instantâneo ScheduleService que pode usar um conector para localizar o próximo slot de serviço disponível em seu serviço de reserva. Em seguida, o conector pode criar uma linha de dados relacionada ao solicitante para rastrear a reserva.

Os plug-ins automatizados são adequados para modificar dados ou adicionar linhas de dados relacionadas após adicionar a linha de dados primária ao Dataverse. Uma vantagem significativa dos plug-ins automatizados é que todas as alterações de dados feitas pelos plug-ins fazem parte da transação original, e o sistema conclui ou reverte todas as alterações. Por exemplo, considere um cenário em que você cria uma linha de dados do Projeto, e um plug-in é executado quando você cria a linha cria algumas tarefas iniciais relacionadas ao projeto. Se uma dessas tarefas for inválida e a criação falhar, o sistema reverterá o projeto e todas as tarefas que foram criadas.

Alterar os dados antes de salvá-los

A opção Alterar os dados antes de salvá-los se aplica apenas a plug-ins automatizados executados em eventos criados ou atualizados. Em ambos os casos, você pode configurar seu plug-in para ser executado durante a pré-operação, o que lhe dá a oportunidade de modificar os dados na linha que você está criando ou atualizando antes de salvar os dados. Essa opção é benéfica em cenários em que você deseja definir alguns valores padrão. Além disso, você pode usar a lógica condicional do Power Fx para fazer com que os padrões dependam de outros dados na linha que você está modificando.

Você precisa executar seu plug-in na pré-operação e usar a função Set para modificar as colunas de dados. Essa abordagem garante que suas alterações sejam incluídas quando você salvar a linha de dados, em vez de serem feitas como uma atualização separada, o que pode causar um loop infinito ou, possivelmente, disparar a execução de automações indesejadas devido à atualização separada.

O exemplo a seguir mostra o uso da função Set para modificar a coluna de orçamento na linha do projeto que você está criando.

Set(contoso_budget,1000)

Você só pode usar essa abordagem para alterar dados na linha que dispara seu plug-in. Você não pode criar dados relacionados no estágio de pré-operação, pois nenhuma linha primária está disponível para acrescentar os dados relacionados.

Outro cenário comum é quando você deseja criar dados relacionados a uma linha de dados primária. Você pode realizar essa tarefa usando plug-ins instantâneos e automatizados. Para isso, use a função Collect para adicionar os dados. Por exemplo, a função a seguir adiciona automaticamente o criador do projeto como o membro inicial da equipe.

Collect([@'Team Members'],{Name: "David So",'Team Project': ThisRecord })

No exemplo anterior, ThisRecord é a linha do projeto passada em um plug-in instantâneo configurado com um escopo de entidade para a tabela do projeto ou passada em um plug-in automatizado em Criar da tabela do projeto.

Em alguns cenários, é preciso usar a função Patch em vez da função Collect. Por exemplo, você usaria a função Patch ao trabalhar com a coluna Regarding na tabela Tasks para permitir que o sistema defina adequadamente a coluna Regarding. A razão é que a coluna Regarding é polimórfica e pode apontar para muitos tipos diferentes de linhas da tabela. O exemplo a seguir mostra um plug-in criado para ser executado na criação de um projeto para adicionar algumas tarefas iniciais que cada projeto tem.

Patch([@Tasks], Collect([@Tasks], { Subject : "Review Project"} ),{ Regarding: ThisRecord });
Patch([@Tasks], Collect([@Tasks], { Subject : "Schedule Project Launch"} ),{ Regarding: ThisRecord });
Patch([@Tasks], Collect([@Tasks], { Subject : "Assign Project Lead"} ),{ Regarding: ThisRecord });

No exemplo anterior, a função Patch é combinada à função Collect para atualizar a coluna Regarding.

Outro cenário comum é a remoção condicional de dados relacionados. Por exemplo, você poderia criar um plug-in instantâneo chamado Cancelar Projeto. Este plug-in teria um parâmetro de entrada do tipo EntityReference para o projeto que você está cancelando. Em seguida, o plug-in poderá atualizar a linha do projeto para indicar que ele foi cancelado e localizar e remover itens de trabalho abertos para que ninguém possa trabalhar no projeto cancelado. A lógica a seguir mostra a expressão para localizar todos os itens de trabalho relacionados ao projeto e mostra como você pode usar ForAll para percorrer e chamar Remover para cada item de trabalho.

ForAll(Filter([@'Work Items'], 'Team Project'.'Team Project' = Project.'Team Project'),  Remove([@'Work Items'], ThisRecord))