Bonjour,
J'ai essayé de courir le code et les travaux très bien avec l'utilisateur affecté et non-assigné.
Veuillez attacher le programme de mise au point (attache à w3wp.exe) dans le studio visuel pour corriger l'issue.
Sous ce pli le code, nous avons employé -
vide public ItemUpdating (propriétés de priorité de SPItemEventProperties)
{
base.ItemUpdating (propriétés) ;
si == (de properties.ListTitle.Equals (DocumentLibararyType.Tasks , StringComparison.InvariantCultureIgnoreCase) vrai)
{
Emplacement = nulle de SPWeb ;
essai
{
spItem de SPListItem = properties.ListItem ;
emplacement = properties.OpenWeb () ;
spOwnerGroup de SPGroup = site.AssociatedOwnerGroup ;
spCurrentUser de SPUser = site.CurrentUser ;
ficeler le strStatus = le spItem [ItemFiledType.Status] .ToString () ;
intIndex d'international = spItem [ItemFiledType.AssignedTo] .ToString () .IndexOf (« #") ;
ficeler le spAssignedTo = le spItem [ItemFiledType.AssignedTo] .ToString (). Enlever (0, intIndex + 1) ;
ficeler le spCurrentUserLoginName = le site.CurrentUser.LoginName ;
ficeler le spCurrentUserName = le site.CurrentUser.Name ; // s'est ajouté pour voir si « assigné à » correspond le nom de l'utilisateur courant.
blnAllowUpdate de bool = faux ;
si == (de spCurrentUserLoginName.Equals (« \ de sharepoint \ système », StringComparison.InvariantCultureIgnoreCase) faux)
{
foreach (SPGroup spg dans spCurrentUser.Groups)
{
si (site.AssociatedOwnerGroup ! = nulle)
{
si == 0 (de spg. Name.CompareTo (site.AssociatedOwnerGroup.Name))
{
si == (de strStatus.Equals (FileItemStatusType.Completed, StringComparison.InvariantCultureIgnoreCase) vrai)
{
// ceci est le message que nous voudrions montrer à l'utilisateur
// s'il essaye de mettre à jour une tâche active
properties.ErrorMessage = « tâche est déjà accompli et ne peut pas être mis à jour maintenant. » ;
//// cette ligne décommande réellement la suppression
propriétés. L'annulation = rectifient ;
}
autrement
{
le blnAllowUpdate = rectifient ;
}
}
}
}
// si le statut de tâche est complet il n'est plus tâche active
// autrement nous décommandons la suppression
// si (strStatus ! = strStatus « réalisé » de && ! = strStatus de && de « production » ! = « approbation niée »)
si (== de blnAllowUpdate faux)
{
// « spAssignedTo.CompareTo (spCurrentUserName) ! = 0 » que cette condition s'est ajoutée pour voir si « assigné à » correspond le nom de l'utilisateur courant.
si ((spAssignedTo.CompareTo (spCurrentUserLoginName) ! = 0 && spAssignedTo.CompareTo (spCurrentUserName) ! = 0) &&
== (de strStatus.Equals (FileItemStatusType.Completed, StringComparison.InvariantCultureIgnoreCase) faux))
{
// ceci est le message que nous voudrions montrer à l'utilisateur
// s'il essaye de mettre à jour une tâche active
properties.ErrorMessage = « cet article est encore en marche et peut seulement être mis à jour par le créateur de l'article. » ;
//// cette ligne décommande réellement la suppression
propriétés. L'annulation = rectifient ;
}
autrement si == (de strStatus.Equals (FileItemStatusType.Completed, StringComparison.InvariantCultureIgnoreCase) vrai)
{
// ceci est le message que nous voudrions montrer à l'utilisateur
// s'il essaye de supprimer une tâche active
properties.ErrorMessage = « tâche est déjà accompli et ne peut pas être mis à jour maintenant. » ;
//// cette ligne décommande réellement la suppression
propriétés. L'annulation = rectifient ;
}
}
}
}
crochet (exception ex)
{
properties.ErrorMessage = « une erreur interne s'est produit tout en faisant l'action » + Environment.NewLine +
. Message.ToString ex () ;
propriétés. L'annulation = rectifient ;
}
}
}
J'espère, il aide.
Acclamations…
Rajendra