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

时间:2012-08-09 23:24:09

标签: peoplepicker

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

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

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

在某些用户声明获得此异常之前,它工作得非常好:          &#34;无效的查找值

查找字段包含无效数据,请检查该值并重试。&#34;

在调查中我们发现发生此错误是因为          ObjEntity.EntityData [&#34; SPUserID&#34;])返回为null。

之所以发生这种情况,是因为要求保存一些不能访问此网站集的用户名,但他们是公司AD系统的成员。

2 个答案:

答案 0 :(得分:0)

要解决此问题,我们会查看SharePoint并复制他们的操作。 在其中一个列表中添加一个类型为people and group的列,允许它选择任何用户。 在此列表中创建新项目并选择名称不在所有用户列表中的用户。 保存该项目。 返回到所有用户列表,您将看到新用户名已添加到此列表中。

注意:要在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;
 }  

答案 1 :(得分:0)

很长一段时间用于解决SharePoint 2010中的上述问题 web.EnsureUser()

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