1

要将用户名保存到人员字段中:

在我的自定义表单中提供了人员编辑器控件,并按如下方式保存了每个已解析的实体:

 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 系统成员的用户名。

4

2 回答 2

0

为了解决这个问题,我们参考了 SharePoint 并复制了他们的做法。在其中一个列表中添加一列人员和组类型的列,允许它选择任何用户。在此列表中创建新项目并选择一个名称不在所有用户列表中的用户。保存项目。返回所有用户列表,您将看到新用户名已添加到此列表中。

注意:要查看 UI 中的所有用户列表,请浏览以下位置:网站集 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;
 }  
于 2012-08-09T23:25:11.600 回答
0

长话短说,解决 SharePoint 2010 中的上述问题只需使用 web.EnsureUser()

它将用户添加到所有用户列表并返回 spuser 对象。

于 2013-05-18T04:34:58.337 回答