C# 更改SharePoint组的说明

C# 更改SharePoint组的说明,c#,sharepoint,C#,Sharepoint,我正在尝试更改现有SharePoint组的描述,这不应该是一项非常艰巨的工作,但不幸的是,它没有按预期工作。在运行相应的方法后,组的描述与以前保持相同 以下是我用来更改描述的代码: private void ResetGroupDescription(SPWeb rootWeb, string groupName, string groupDescription) { rootWeb.AllowUnsafeUpdates = true; SPGroup

我正在尝试更改现有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);
}
更新:

我在我的方法中添加了更多的代码行,并获取我在再次检查其description属性之前修改过的组。这表明该组的描述已按预期更改。但是,当我试图通过在相应网站集的“组设置”页面(UI)上检查组的描述来验证这一点时,组的描述仍然是旧值

更新2:

所以我在这个问题上做了更多的测试,并试图更改组的标题,而不是其描述。说来奇怪,但这一个很完美。组的重命名立即显示在UI中。

该代码应该可以工作

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

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

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


您是否尝试过以其他用户的身份运行它?i、 e.SPSecurity.RunWithElevatedPrivileges.

确保任何地方都没有缓存任何东西-众所周知,未知的缓存会让非常优秀的开发人员发疯。

也许您需要允许SPWeb或SPSite上的更新?这通常是必要的,如果你不是做一篇文章,而是一个GET。

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

我试图改变小组的描述,而不是我在帖子中写的标题。我纠正了这个错误。我的代码是SPTimerJob的一部分,我以提升的权限运行它,所以这应该不会是问题。您是否尝试调试该方法?看看这个方法是否真的通过了?如果它在TimerJob中,您将不会看到任何“可读”错误弹出(您是否在SharePoint中…)是的,我在调试模式下逐步完成了我的代码。SPGroup对象的Description属性设置正确。我需要重命名组名。如何重命名?我需要更新哪个字段值?嗯,这可能是开始进一步调查的一个点。正如您在我的代码中看到的,我已经在编辑组之前和之后设置了SPWeb对象的AllowUnsafeUpdates属性。现在我也为SPSite对象设置了它,但这也没有帮助。正如我已经提到的,对数据库进行了更改,但没有显示在UI.Duh中。我读得不够仔细。我的错。旁注:我注意到,如果您使用提升权限运行,那么在SPContext.Current.Web/Site上实际设置AllowUnsafeUpdates(而不是新创建的)可能很重要。我想,当您仔细考虑它时,它是有意义的。RunWithElevatedPrivileges会将AllowUnsafeUpdates标志重置为false(在某个地方阅读)。我想我已经说过,我的代码片段是TimerJob的一部分。其Execute方法的第一行代码是“SPSecurity.RunWithElevatedPrivileges(…”并且组对象是在此上下文中初始检索的,所以这不应该是问题所在。除此之外,此调试向我显示了修改是在SharePoint数据库中传输和持久化的。谢谢,Flo,我刚刚遇到了相同的问题,您的问答为我节省了大量调试!+1SPFieldMultiLineText=(spfieldmultilitext)web.SiteUserInfoList.Fields[SPBuiltInFieldId.Notes];你能告诉我这段代码到底要做什么吗?