Quando você importa itens em massa para uma lista do SharePoint, o event receiver ou o gatilho do Power Automate pode não disparar para todos os itens. Isso deixa alguns itens sem o processamento esperado, como atualizações de status, fluxos de aprovação ou notificações. A causa raiz está em como o SharePoint lida com operações em massa versus criação de itens individuais. Este artigo explica por que os gatilhos ignoram itens importados em massa e fornece uma correção confiável para garantir que todos os itens sejam processados.
Principais Conclusões: Corrigindo Lacunas de Gatilho em Importações em Massa em Listas do SharePoint
- Event receiver ItemAdded do SharePoint: Dispara apenas para criação de itens individuais, não para importações em massa via exibição de planilha ou PowerShell.
- Gatilho “Quando um item é criado” do Power Automate: Pode pular itens quando a importação usa uma API em lote ou endpoint REST.
- Solução alternativa usando um trabalho temporizador ou fluxo agendado: Consulta a lista por itens não processados e os processa após a conclusão da importação em massa.
Por que os Gatilhos de Lista do SharePoint Falham Durante a Importação em Massa
Os event receivers de lista do SharePoint, como os eventos ItemAdded ou ItemUpdated, são projetados para disparar quando um usuário cria ou modifica um único item por meio da interface do usuário. Quando você importa itens em massa usando métodos como a exibição de planilha (Edição Rápida), exportação-importação do Microsoft Excel, scripts PowerShell ou chamadas em lote CSOM/REST API, o SharePoint geralmente suprime esses eventos para melhorar o desempenho. Isso significa que o gatilho nunca vê os novos itens, e qualquer código personalizado ou fluxo do Power Automate que depende do gatilho não é executado.
Os fluxos do Power Automate que usam o gatilho “Quando um item é criado” se comportam de maneira semelhante. O gatilho depende do log de alterações do SharePoint, que pode não registrar operações em massa da mesma forma que ações individuais do usuário. Como resultado, o fluxo pode processar apenas os primeiros itens ou nenhum.
O Papel do Log de Alterações do SharePoint
O SharePoint mantém um log de alterações que rastreia adições, modificações e exclusões. A criação de um único item adiciona uma entrada clara a esse log. Importações em massa, especialmente aquelas que usam o SaveBinaryStream da REST API ou o método Add do CSOM dentro de um loop, podem combinar alterações em uma única entrada de log ou pular o registro completamente. O gatilho lê esse log para detectar novos itens; portanto, se o log estiver incompleto, o gatilho perde itens.
Passos para Corrigir Gatilhos Perdidos Após Importação em Massa
A correção mais confiável envolve duas partes: desabilitar o gatilho durante a importação para evitar processamento parcial e, em seguida, executar um trabalho pós-importação que processa todos os itens importados. Abaixo estão as etapas detalhadas.
Método 1: Usar um Script PowerShell com um Loop de Processamento Pós-Importação
- Desabilite o event receiver ou o gatilho do fluxo antes da importação
No PowerShell, desative o event receiver ItemAdded na lista de destino. Use o comandoDisable-SPFeaturepara o recurso do receiver ou defina a propriedadeEnableddo receiver como false. Para o Power Automate, desligue o fluxo na página de detalhes do fluxo em make.powerautomate.com. - Realize a importação em massa
Importe seus itens usando o método escolhido: exibição de planilha, Excel, PowerShell ou REST API. A importação é executada sem disparar nenhum evento, evitando processamento parcial. - Reabilite o event receiver ou o fluxo
Após a conclusão da importação, reative o receiver ou o fluxo usando o mesmo método da etapa 1. - Execute um script de processamento para todos os itens importados
Escreva um script PowerShell que consulta a lista por itens criados após o horário de início da importação. Para cada item, chame sua lógica de processamento personalizada (por exemplo, atualizar um campo, enviar um e-mail). O script executa as mesmas ações que o gatilho teria realizado. Exemplo:$items = $list.Items | Where-Object { $_.Created -gt $importStartTime }
Método 2: Usar um Fluxo Agendado do Power Automate como um Trabalho de Polling
- Crie um fluxo agendado no Power Automate
Vá para o Power Automate e crie um novo fluxo com o gatilho “Recorrência”. Defina a agenda para executar a cada 15 minutos ou a cada hora, dependendo das suas necessidades. - Adicione uma ação “Obter itens” para buscar itens não processados
Use a ação “Obter itens” do SharePoint e aplique uma consulta de filtro comoProcessed eq 0. Se sua lista não tiver uma coluna “Processado”, adicione uma coluna Sim/Não chamada “Processado” com valor padrão Não. - Percorra cada item e aplique sua lógica
Adicione uma ação “Aplicar a cada”. Dentro do loop, execute suas etapas de processamento: atualizar um campo, enviar uma aprovação ou chamar uma solicitação HTTP. Após o processamento, atualize a coluna “Processado” para Sim para que o fluxo não reprocesse o item na próxima execução. - Execute o fluxo agendado após a importação em massa
Dispare o fluxo manualmente uma vez ou aguarde a próxima execução agendada. O fluxo capturará todos os itens onde Processado é Não, incluindo aqueles perdidos pelo gatilho original.
Método 3: Modificar o Script de Importação para Chamar o Gatilho Manualmente
- Adicione uma chamada de processamento dentro do loop de importação
Se você estiver usando um script PowerShell ou C# para importar itens, adicione uma linha após cada métodoAddque chame sua função de processamento personalizada. Por exemplo, após$list.Add($item), chameProcess-Item($item). - Use um atraso para evitar limitação
Adicione um pequeno atraso, comoStart-Sleep -Seconds 1, entre cada iteração para evitar a limitação do SharePoint. Isso garante que cada item seja processado antes que o próximo seja adicionado. - Teste com um lote pequeno primeiro
Importe 10 itens e verifique se cada um recebe o processamento esperado. Se o atraso fizer com que a importação demore muito, considere o Método 2.
Se o Gatilho Ainda Perder Itens Após a Correção Principal
Limitação do SharePoint Interrompe o Script de Processamento no Meio
O SharePoint pode limitar seu script de processamento se ele executar muitas solicitações em um curto período. Isso resulta em alguns itens processados e outros ignorados. Para evitar a limitação, adicione backoff exponencial ou um atraso maior entre as solicitações. Para PowerShell, use Start-Sleep -Seconds 2 e aumente o atraso se receber respostas HTTP 429.
Fluxo do Power Automate Expira para Importações Grandes
Um fluxo agendado que processa milhares de itens pode exceder o limite de tempo limite de 30 dias para uma única execução de fluxo. Divida a importação em lotes menores de 500 itens cada. Use uma execução de fluxo separada para cada lote ou use um fluxo pai que aciona fluxos filhos por lote.
Event Receiver Personalizado Não Reabilitado Após a Importação
Se você desabilitou o event receiver durante a importação e esqueceu de reabilitá-lo, criações subsequentes de itens individuais também serão perdidas. Sempre verifique o status do receiver após a importação executando um comando PowerShell que verifica a propriedade EventReceivers da lista. Reabilite-o se estiver desabilitado.
| Item | Criação de Item Individual | Importação em Massa |
|---|---|---|
| Event receiver dispara | Sim | Não (suprimido) |
| Entrada no log de alterações | Detalhada por item | Mesclada ou ausente |
| Gatilho do Power Automate | Dispara imediatamente | Pode pular itens |
| Método de processamento recomendado | Event receiver ou fluxo | Script pós-importação ou fluxo agendado |
Agora você pode lidar com importações em massa sem perder o processamento baseado em gatilho. Aplique o método de fluxo agendado ou o script pós-importação para garantir que todos os itens sejam processados. Para importações futuras, adicione uma coluna “Processado” à sua lista e defina-a como Não por padrão. Isso facilita a identificação de itens não processados e a execução de um fluxo de limpeza sempre que necessário.