2010-07-29 16 views
0

Je suis aux prises avec les propriétés d'après-projet SharePoint 2007. J'ai un champ de saisie de personnes, où plusieurs personnes peuvent être ajoutées.SharePoint 2007: Le champ de saisie AfterProperties de la personne affiche toujours -1 en tant que lookupid

Lors de l'événement ItemUpdating, j'ai maintenant besoin de déterminer quels utilisateurs ont été ajoutés, supprimés ou restés les mêmes.

Malheureusement, cela devient difficile, car l'ID des utilisateurs intacts passe à -1 dans les propriétés d'après, de sorte que je ne peux pas utiliser SPFieldUserValueCollection pour trouver l'utilisateur.

Un exemple. . Properties.ListItem [ "AssignedTo"] de ToString() indique:

1; #domain \ user1; # 2; #domain \ user2

properties.AfterProperties [ "AssignedTo"] ToString() montre.:

-1; #domain \ user1; # - 1; #domain \ user2, # 3, #domain \ util_3 < -Ajout un utilisateur

je comptais utiliser le code ci-dessous, pour déterminer les utilisateurs supprimés et ajoutés :

foreach (SPFieldUserValue oldUser in oldUserCollection) 
{ 
    if (newUserCollection.Find(x => x.LookupId == oldUser.LookupId) == null) 
    { 
     RemoveRole(aListItem, oldUser.User, roleDefCollection[workerRoleName]); 
    } 
} 

foreach (SPFieldUserValue newUser in newUserCollection) 
{ 
    if(oldUserCollection.Find(x => x.User.LoginName == newUser.LookupValue) == null) 
    { 
     AddRole(aListItem, newUser.User, roleDefCollection[workerRoleName]); 
    } 
} 

Comment puis-je archiver, que les AfterProperties montrent la bonne lookupid?

Répondre

0

Résolu le problème par moi-même. Au lieu d'utiliser SPFieldUserCollection, j'utilise maintenant une liste et j'essaie d'analyser toute l'information par moi-même hors de la chaîne.

Regex reg = new Regex(@"\;\#"); 
string[] usernameParts = reg.Split(usernames); 
List<SPUser> list = new List<SPUser>(); 
int id; 

foreach (string s in usernameParts) 
    { 
     if (!string.IsNullOrEmpty(s)) 
     { 
      if (!Int32.TryParse(s, out id)) 
      { 
       if (list.Find(x => x.ID == spweb.Users[s].ID) == null) 
        list.Add(spweb.Users[s]); 
      } 
      else 
      { 
       if (Convert.ToInt32(s) != -1) 
       { 
        if (list.Find(x => x.ID == Convert.ToInt32(s)) == null) 
         list.Add(spweb.Users.GetByID(Convert.ToInt32(s))); 
       } 
      } 
     } 
    }