我正在尝试更改现有SharePoint组的描述,这不应该是一项非常艰巨的工作,但遗憾的是它无法按预期工作。运行相应的方法后,组的描述与以前保持一致。
以下是我用来更改说明的代码:
private void ResetGroupDescription(SPWeb rootWeb, string groupName, string groupDescription)
{
rootWeb.AllowUnsafeUpdates = true;
SPGroup group = rootWeb.SiteGroups[groupName];
group.Description = groupDescription;
group.Update();
rootWeb.Update();
rootWeb.AllowUnsafeUpdates = false;
// Code-Update
SPGroup checkGroup = rootWeb.SiteGroups[groupName];
Trace.WriteLine(checkGroup.Description);
}
更新
我在我的方法中添加了更多代码行,并在再次检查其描述属性之前获取我更改的组。这告诉我该组的描述已按预期更改。但是当我尝试通过检查相应网站集的组设置页面(UI)上的组描述来验证这一点时,该组的描述仍然是旧值。
更新2:
因此,我对该问题进行了更多测试,并尝试更改组的标题而不是其描述。奇怪的是,这一个很完美。重命名组立即显示在UI中。
答案 0 :(得分:9)
我在另一个论坛找到了解决方案。 UI中显示的描述存储在UserInformationList中。以下代码更改了组的说明。
SPGroup g = web.SiteGroups["GroupName"];
SPFieldMultiLineText text = (SPFieldMultiLineText)web.SiteUserInfoList.Fields[SPBuiltInFieldId.Notes];
SPListItem groupItem = web.SiteUserInfoList.GetItemById(g.ID);
groupItem[text.InternalName]= groupDescription;
groupItem.Update();
答案 1 :(得分:2)
2件事:
是否要更改群组的说明或名称?有一个名字和一个描述属性....
您是否尝试过以其他用户身份运行?即SPSecurity.RunWithElevatedPrivileges。
答案 2 :(得分:1)
SPWeb。Groups将允许您仅提取在网站中定义了某些/任何类型权限的组。
SPWeb.SiteGroups将提取所有跨站点组,无论是否定义了任何权限。
答案 3 :(得分:0)
该代码应该有效。
如果我将它与我使用的代码进行比较,唯一的区别是我使用这样的代码来获取组。不应该是差别,但也许......
foreach (SPGroup group in web.SiteGroups)
{
if (group.Name.Equals(groupName, StringComparison.OrdinalIgnoreCase))
{
return group;
}
}
答案 4 :(得分:0)
确保没有任何内容被缓存在任何地方 - 众所周知,未知的缓存可以让完美的开发人员疯狂。
答案 5 :(得分:0)
也许您需要在SPWeb或SPSite上使用AllowUnsafeUpdates?如果您没有进行POST,而是进行GET,这通常是必需的。
答案 6 :(得分:0)
您可以尝试使用CSOM(客户端对象模型)。使用以下代码,我可以更新组名称,描述以及您需要的任何其他内容。
using (ClientContext context = new ClientContext("Your Link goes here."))
{
context.Credentials = new System.Net.NetworkCredential("Your User Name", "Your Password", "Domain name");
GroupCollection groupCollection = context.Web.SiteGroups;
context.Load(groupCollection, groups => groups.Include(group => group.Title, group => group.Id, group => group.Users));
context.ExecuteQuery();
Group myGroup = groupCollection.GetByName(OldGroupNameTB.Text);
context.Load(myGroup);
context.ExecuteQuery();
List myGroupList = context.Web.SiteUserInfoList;
context.Load(myGroupList.Fields);
context.ExecuteQuery();
FieldMultiLineText text = (FieldMultiLineText)context.Web.SiteUserInfoList.Fields[7];
ListItem groupItem = context.Web.SiteUserInfoList.GetItemById(myGroup.Id);
myGroup.Title = NewGroupNameTB.Text;
groupItem[text.InternalName] = GroupDescrioptionTB.Text;
groupItem.Update();
myGroup.Update();
context.ExecuteQuery();
}