Olá!,
Eu tentei funcionar o código e os trabalhos muito bem com o usuário atribuído e não-atribuído.
Unir por favor o depurador de programas (anexo a w3wp.exe) no estúdio visual para eliminar erros da edição.
Juntamente o código, nós usamo-nos -
vácuo público ItemUpdating da ultrapassagem (propriedades de SPItemEventProperties)
{
base.ItemUpdating (propriedades);
se (== de properties.ListTitle.Equals (DocumentLibararyType.Tasks , StringComparison.InvariantCultureIgnoreCase) verdadeiro)
{
Local = zero de SPWeb;
tentativa
{
spItem de SPListItem = properties.ListItem;
local = properties.OpenWeb ();
spOwnerGroup de SPGroup = site.AssociatedOwnerGroup;
spCurrentUser de SPUser = site.CurrentUser;
amarrar o strStatus = o spItem [ItemFiledType.Status] .ToString ();
intIndex do int = spItem [ItemFiledType.AssignedTo] .ToString () .IndexOf (“#");
amarrar o spAssignedTo = o spItem [ItemFiledType.AssignedTo] .ToString (). Remover (0, intIndex + 1);
amarrar o spCurrentUserLoginName = o site.CurrentUser.LoginName;
amarrar o spCurrentUserName = o site.CurrentUser.Name; // adicionou para ver se “atribuído a” é mesmo que o nome do usuário atual.
blnAllowUpdate do bool = falso;
se (== de spCurrentUserLoginName.Equals (do “\ sharepoint \ sistema”, StringComparison.InvariantCultureIgnoreCase) falso)
{
foreach (SPGroup SPG em spCurrentUser.Groups)
{
se (site.AssociatedOwnerGroup ! = zero)
{
se (== 0 do SPG. Name.CompareTo (site.AssociatedOwnerGroup.Name))
{
se (== de strStatus.Equals (FileItemStatusType.Completed, StringComparison.InvariantCultureIgnoreCase) verdadeiro)
{
// isto é a mensagem que nós gostaríamos de mostrar ao usuário
// se tenta atualizar uma tarefa ativa
properties.ErrorMessage = “tarefa já é terminado e não pode ser atualizado agora. ”;
//// esta linha cancela realmente a supressão
propriedades. O cancelamento = retifica;
}
mais
{
o blnAllowUpdate = retifica;
}
}
}
}
// se o status da tarefa está completo ele não é tarefa ativa any more
// de outra maneira nós cancelamos o apagamento
// se (strStatus! = strStatus “terminado” do &&! = strStatus do && da “produção”! = “aprovaçã0 negada”)
se (== do blnAllowUpdate falso)
{
// “spAssignedTo.CompareTo (spCurrentUserName)! = 0” que esta circunstância adicionou para considerar se “atribuído a” é mesma que o nome do usuário atual.
se ((spAssignedTo.CompareTo (spCurrentUserLoginName)! = 0 && spAssignedTo.CompareTo (spCurrentUserName)! = 0) &&
(== de strStatus.Equals (FileItemStatusType.Completed, StringComparison.InvariantCultureIgnoreCase) falso))
{
// isto é a mensagem que nós gostaríamos de mostrar ao usuário
// se tenta atualizar uma tarefa ativa
properties.ErrorMessage = “este artigo é ainda em andamento e pode somente ser atualizado pelo criador do artigo. ”;
//// esta linha cancela realmente a supressão
propriedades. O cancelamento = retifica;
}
mais se (== de strStatus.Equals (FileItemStatusType.Completed, StringComparison.InvariantCultureIgnoreCase) verdadeiro)
{
// isto é a mensagem que nós gostaríamos de mostrar ao usuário
// se tenta suprimir de uma tarefa ativa
properties.ErrorMessage = “tarefa já é terminado e não pode ser atualizado agora. ”;
//// esta linha cancela realmente a supressão
propriedades. O cancelamento = retifica;
}
}
}
}
prendedor (exceção ex)
{
properties.ErrorMessage = “um erro interno ocorreu ao fazer a ação” + Environment.NewLine +
. Message.ToString ex ();
propriedades. O cancelamento = retifica;
}
}
}
Eu espero, ele ajudo.
Elogios…
Rajendra