更新sharepoint列表C#代码的人员或组字段

时间:2014-09-17 09:23:52

标签: c# sharepoint sharepoint-2010

我有一个控制台应用程序,它更新了sharepoint列表的人员或组字段。如果项目["审批人"]值是用户值,则此应用程序正常工作。如果项目["审批人"]值是一个sharepoint组,则会失败。 如果项目["审批者"]值既是用户又是组,我希望此应用程序可以正常运行。有人可以建议代码部分让我成功吗?

static  SPWeb _web;
static SPSite _site;
static SPList myList;

static void Main(string[] args)
{
    string usercontrolvalue = "test";
    _site = new SPSite("URL");
    _web = _site.OpenWeb();
    _web.AllowUnsafeUpdates = true;
    myList = _web.Lists["MYList"];
    SPListItem item = myList.Items.Add();
    SPFieldUserValueCollection usercollection = new SPFieldUserValueCollection();
    string[] userarray = usercontrolvalue.Split(',');
    for (int i = 0; i < userarray.Length; i++)
    {
        SPFieldUserValue usertoadd = ConvertLoginName(userarray[i]);
        usercollection.Add(usertoadd);
    }
    item["Approver"] = usercollection;
    item.Update();
}

public static SPFieldUserValue ConvertLoginName(string userid)
{
    SPUser requireduser = _web.EnsureUser(userid);
    SPFieldUserValue uservalue = new SPFieldUserValue(_web, requireduser.ID, requireduser.LoginName);
    return uservalue; 
}

2 个答案:

答案 0 :(得分:2)

由于SPGroup是Lookup项,因此您必须先在组中查找用户。

http://msdn.microsoft.com/en-gb/library/microsoft.sharepoint.spgroup(v=office.14).aspx

//允许组或用户更新

SPFieldUser spuserField = (SPFieldUser)item.Fields.GetField("Approver");

SPFieldUserValue spuserFieldValue = (SPFieldUserValue)spuserField.GetFieldValue(item["Approver"].ToString());

//Tries to get SPUser

if (spuserFieldValue.User != null)
{
   SPUser user = userFieldValue.User;
}
//if the field contain group
else
{
  SPGroup group = web.SiteGroups.GetByID(spuserFieldValue.LookupId);
}

希望以上有所帮助。

答案 1 :(得分:2)

按原样使用以下代码。希望这会对你有所帮助:)。

            static SPWeb _web;
            static SPSite _site;
            static SPList myList;
            static void Main(string[] args)
            {
                string usercontrolvalue = "test";
                _site = new SPSite("URL");
                _web = _site.OpenWeb();
                _web.AllowUnsafeUpdates = true;
                myList = _web.Lists["MYList"];
                SPListItem item = myList.Items.Add();
                SPFieldUserValueCollection usercollection = new SPFieldUserValueCollection();
                for (int i = 0; i < userarray.Length; i++)
                {
                    SPUser usr = web.EnsureUser(userarray[i]);
                    SPFieldUserValue usertoadd = new SPFieldUserValue(_web, usr.ID, usr.Name);
                    if (usertoadd.User == null) // value is a SharePoint group if User is null
                    {
                        SPGroup group = web.Groups[usertoadd.LookupValue];
                        SPFieldUserValue groupValue = new SPFieldUserValue(_web, group.ID, group.Name);
                        usercollection.Add(groupValue);
                    }
                    else
                    {
                        usercollection.Add(usertoadd);
                    }
                }
                item["Approver"] = usercollection;
                item.Update();
            }