簡體   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