Hola,
Intenté funcionar con el código y los trabajos muy bien con el usuario asignado y no-asignado.
Atar por favor la depuración (fijación a w3wp.exe) en estudio visual para eliminar errores de la edición.
Adjunto el código, hemos utilizado -
vacío público ItemUpdating (características de la invalidación de SPItemEventProperties)
{
base.ItemUpdating (características);
si == (de properties.ListTitle.Equals (DocumentLibararyType.Tasks , StringComparison.InvariantCultureIgnoreCase) verdad)
{
Sitio = falta de información de SPWeb;
intento
{
spItem de SPListItem = properties.ListItem;
sitio = properties.OpenWeb ();
spOwnerGroup de SPGroup = site.AssociatedOwnerGroup;
spCurrentUser de SPUser = site.CurrentUser;
encadenar el strStatus = el spItem [ItemFiledType.Status] .ToString ();
intIndex de la internacional = spItem [ItemFiledType.AssignedTo] .ToString () .IndexOf (“#");
encadenar el spAssignedTo = el spItem [ItemFiledType.AssignedTo] .ToString (). Quitar (0, intIndex + 1);
encadenar el spCurrentUserLoginName = site.CurrentUser.LoginName;
encadenar el spCurrentUserName = site.CurrentUser.Name; // agregó para ver si “asignada a” es igual que nombre del usuario actual.
blnAllowUpdate del bool = falso;
si == (de spCurrentUserLoginName.Equals (“\ \ sistema del sharepoint”, StringComparison.InvariantCultureIgnoreCase) falso)
{
foreach (SPGroup spg en spCurrentUser.Groups)
{
¡si (site.AssociatedOwnerGroup ! = falta de información)
{
si == 0 (del spg. Name.CompareTo (site.AssociatedOwnerGroup.Name))
{
si == (de strStatus.Equals (FileItemStatusType.Completed, StringComparison.InvariantCultureIgnoreCase) verdad)
{
// esto es el mensaje que quisiéramos demostrar al usuario
// si él intenta poner al día una tarea activa
properties.ErrorMessage = “tarea se termina y no se puede ya ahora poner al día. ”;
//// esta línea cancela realmente la cancelación
características. La cancelación = verdad;
}
{
el blnAllowUpdate = verdad;
}
}
}
}
// si el estado de la tarea es completo él no es tarea activa más
// cancelamos de otra manera la canceladura
¡// si (strStatus! ¡= strStatus “terminado” del &&! ¡= strStatus del && de la “producción”! = “aprobación negada”)
si (== del blnAllowUpdate falso)
{
¡// “spAssignedTo.CompareTo (spCurrentUserName)! = 0” que esta condición agregó para considerar si “asignada a” es igual que nombre del usuario actual.
¡si ((spAssignedTo.CompareTo (spCurrentUserLoginName)! ¡= 0 && spAssignedTo.CompareTo (spCurrentUserName)! = 0) &&
== (de strStatus.Equals (FileItemStatusType.Completed, StringComparison.InvariantCultureIgnoreCase) falso))
{
// esto es el mensaje que quisiéramos demostrar al usuario
// si él intenta poner al día una tarea activa
properties.ErrorMessage = “este artículo está todavía en curso y se puede poner al día solamente por el creador del artículo. ”;
//// esta línea cancela realmente la cancelación
características. La cancelación = verdad;
}
si == (de strStatus.Equals (FileItemStatusType.Completed, StringComparison.InvariantCultureIgnoreCase) verdad)
{
// esto es el mensaje que quisiéramos demostrar al usuario
// si él intenta suprimir una tarea activa
properties.ErrorMessage = “tarea se termina y no se puede ya ahora poner al día. ”;
//// esta línea cancela realmente la cancelación
características. La cancelación = verdad;
}
}
}
}
retén (excepción ex)
{
properties.ErrorMessage = “un error interno ocurrió mientras que hacía la acción” + Environment.NewLine +
ex. Message.ToString ();
características. La cancelación = verdad;
}
}
}
Espero, él ayudo.
Aclamaciones…
Rajendra