我有一个控制台应用程序,它更新了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;
}
答案 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();
}