SharePoint 2007: Поле ввода AfterProperties человека всегда показывает -1 как lookupid - PullRequest
0 голосов
/ 29 июля 2010

Я борюсь с AfterProperties SharePoint 2007.У меня есть поле ввода людей, в которое можно добавить несколько человек.

В событии ItemUpdating мне нужно определить, какие пользователи были добавлены, удалены или остались теми же.

К сожалению, это становитсяВыйти трудно, так как идентификатор пользователя, которого нетронуты, превращается в -1 в AfterProperties, так что я не могу использовать SPFieldUserValueCollection для поиска пользователя.

Пример.properties.ListItem ["AssignedTo"]. ToString () показывает:

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

properties.AfterProperties ["AssignedTo"]. ToString() показывает:

-1; #domain \ user1; # - 1; #domain \ user2; # 3; #domain \ user3 <-Добавил пользователя </p>

Я планировал использовать следующеекод для определения удаленных и добавленных пользователей:

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]);
   }
} 

Как мне архивировать, чтобы AfterProperties показывал правильный lookupid?

1 Ответ

0 голосов
/ 29 июля 2010

Решил проблему сам.Вместо использования SPFieldUserCollection я сейчас использую список и пытаюсь самостоятельно разобрать всю информацию из строки.

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)));
                }
            }
        }
    }
...