Pergunta

Eu tenho um controle Remoto do Receptor de Evento anexado a uma lista no meu SP web e de código que executa no ItemUpdated evento:

var web = clientContext.Web;
var site = clientContext.Site;
var list = web.Lists.GetById(properties.ItemEventProperties.ListId);
var item = list.GetItemById(properties.ItemEventProperties.ListItemId);
var memberGroup = web.AssociatedMemberGroup;

clientContext.Load(web);
clientContext.Load(web.AllProperties);
clientContext.Load(item);
clientContext.Load(site);
clientContext.Load(memberGroup);
clientContext.ExecuteQuery();

item.BreakRoleInheritance(true, true);
item.Update();
var roleAssignment = item.RoleAssignments.GetByPrincipal(memberGroup);
roleAssignment.RoleDefinitionBindings.RemoveAll();
roleAssignment.Update();
clientContext.ExecuteQuery();

Mas, às vezes, a segunda metade do quebras de código (por exemplo, o grupo de membros não foi encontrado) e, em seguida, a parte estranha vem.

Eu recebo uma exceção no último clientContext.ExecuteQuery() que diz O valor não pode ser nulo e, em seguida, ele volta para o início do código e tenta refazer tudo novamente.O mesmo acontece se eu adicionar um try catch-statement torno a última parte, como este;

try{
   clientContext.ExecuteQuery();
}
catch {
   throw;
}

Quando eu tento seguir o código no depurador apenas loops sobre o meu código e outra vez até que eu realmente eliminar a lista de web.

Alguém sabe por que isso é e como sair dela?

Foi útil?

Solução

Pois um ItemUpdated ele está chamando o mesmo código novamente e novamente.No modelo de objecto de Servidor temos this.EventFiringEnabled = false; para evitar que o evento de disparo novamente.Você pode ter que executar algumas verificações para evitar a operação de atualização de recorrência.Aqui é um pouco semelhante pergunta: Remoto do Receptor de Evento no atualizada será acionado várias horário

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top