Чтобы сохранить имя пользователя в поле людей

Чтобы сохранить имя пользователя в поле людей:

Предоставил управление редактором людей в моей пользовательской форме и сохранил каждую разрешенную сущность следующим образом:

 if (currentPeopleEditor.Entities.Count != 0)
 {
 SPFieldUserValueCollection userCollection = new SPFieldUserValueCollection();
 for (int index = 0; index < currentPeopleEditor.ResolvedEntities.Count; index++)
 {
  PickerEntity ObjEntity = (PickerEntity)currentPeopleEditor.ResolvedEntities[index];
  userCollection.Add(new SPFieldUserValue(objSPWeb,Convert.ToInt32(ObjEntity.EntityData["SPUserID"]), ObjEntity.Key));
  }
  newItem[Field.Key.ToString()] = userCollection;
  }            

Он работал очень хорошо, пока какой-то пользователь не заявил, что получает это исключение: "Неверное значение поиска"

Поле поиска содержит недопустимые данные. Пожалуйста, проверьте значение и попробуйте снова."

При исследовании мы обнаружили, что эта ошибка произошла, потому что ObjEntity.EntityData["SPUserID"]) возвращался как ноль.

Это произошло потому, что требовалось сохранить имена некоторых пользователей, которые не имеют доступа к этому семейству сайтов, но являются членами корпоративной системы AD.

2 ответа

Решение

Короче говоря, чтобы решить вышеуказанную проблему в SharePoint 2010, просто используйте web.EnsureUser()

Он добавляет пользователя в список всех пользователей и возвращает объект spuser.

Чтобы решить эту проблему, мы обратились к SharePoint и повторили, что они делают. В один из списков добавили столбец типа people и группа позволила ему выбрать любого пользователя. создать новый элемент в этом списке и выбрать пользователя, чье имя не присутствует во всех списках пользователей. сохранить элемент Вернитесь к списку всех пользователей, вы увидите, что новое имя пользователя было добавлено в этот список.

Примечание. Чтобы просмотреть список всех пользователей в пользовательском интерфейсе, перейдите по следующему адресу: URL-адрес семейства сайтов /_catalogs/users/simple.aspx

так что теперь для достижения той же функциональности. Я обновил код следующим образом

if (currentPeopleEditor.Entities.Count != 0)
{
    SPFieldUserValueCollection userCollection = new SPFieldUserValueCollection();
    for (int index = 0; index < currentPeopleEditor.ResolvedEntities.Count; index++)
{
               PickerEntity ObjEntity = (PickerEntity)currentPeopleEditor.ResolvedEntities[index];
               if (ObjEntity.EntityData["SPUserID"] == null)

                {
                      SPContext.Current.Site.RootWeb.AllUsers.Add(ObjEntity.Key, ObjEntity.EntityData["Email"].ToString(), ObjEntity.DisplayText, "");

                     SPContext.Current.Site.RootWeb.Update();

                     userCollection.Add(new SPFieldUserValue(objSPWeb, Convert.ToInt32(SPContext.Current.Site.RootWeb.AllUsers[ObjEntity.Key].ID), ObjEntity.Key));
                      }
                      else    
                       {    userCollection.Add(new SPFieldUserValue(objSPWeb,                 Convert.ToInt32(ObjEntity.EntityData["SPUserID"]), ObjEntity.Key));
                       }
         }
    newItem[Field.Key.ToString()] = userCollection;
 }  
Другие вопросы по тегам