Чтобы сохранить имя пользователя в поле людей
Чтобы сохранить имя пользователя в поле людей:
Предоставил управление редактором людей в моей пользовательской форме и сохранил каждую разрешенную сущность следующим образом:
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;
}