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

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

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

 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"]) возвращал значение null.

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


person user669915    schedule 09.08.2012    source источник


Ответы (2)


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

Примечание. Чтобы просмотреть список всех пользователей в пользовательском интерфейсе, перейдите по следующему адресу: 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;
 }  
person user669915    schedule 09.08.2012

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

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

person user669915    schedule 18.05.2013