Manipulação de dados
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.
Criar linhas de dados relacionadas
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.
Encontrar e remover dados relacionados
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))