繁体   English   中英

更改SharePoint组的说明

[英]Change description of a SharePoint group

我正在尝试更改现有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中。

我在另一个论坛找到了解决方案。 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();   

2件事:

是否要更改组的描述或名称? 有一个名字和一个描述属性....

您是否尝试以其他用户身份运行它? 即SPSecurity.RunWithElevatedPrivileges。

的SPWeb。 将允许您仅提取具有站点内定义的某些/任何类型权限的组。

无论是否定义了任何权限,SPWeb.SiteGroups都将提取所有跨站点组。

您可以尝试使用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();
}

该代码应该工作。

如果我将它与我使用的代码进行比较,唯一的区别是我使用这样的代码来获取组。 应该不是差别,但也许......

    foreach (SPGroup group in web.SiteGroups)
    {
        if (group.Name.Equals(groupName, StringComparison.OrdinalIgnoreCase))
        {
            return group;
        }
    }

确保没有任何东西被缓存在任何地方 - 众所周知,未知的缓存可以让完美的开发人员疯狂。

也许您需要在SPWeb或SPSite上使用AllowUnsafeUpdates? 如果您没有进行POST,而是进行GET,这通常是必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM