通过代码在Sharepoint中添加TermSetGroup

本文关键字:添加 TermSetGroup Sharepoint 代码 | 更新日期: 2023-09-27 18:27:48

创建TermSetGroup时遇到问题。我的代码如下:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    //create new group if the groupName was not created.            
    Group group = termStore.Groups.Where(g => g.Name == groupName).Count() > 0 ? termStore.Groups[groupName] : termStore.CreateGroup(groupName);
    //create new term set if the termSetName was not created.
    TermSet termSet = group.TermSets.Where(s => s.Name == termSetName).Count() > 0 ? group.TermSets[termSetName] : group.CreateTermSet(termSetName);
    termSet.Owner = TermSetOwner;
    //add terms to term set.
    int lcid = CultureInfo.CurrentCulture.LCID;
    foreach (string termName in terms)
    {
        if (termSet.GetTerms(termName, false).Count <= 0)
        {
            termSet.CreateTerm(termName, lcid);
        }
    }
    termStore.CommitAll();
});

如果我在一个单独的控制台项目中使用它,那么这段代码实际上是有效的。它创建了我的组,并在此组中创建了术语集。但当我在工作流中调用的Web服务中使用此代码时,它会告诉我,我的用户没有创建组的权限。当组存在时,它就可以工作,并且可以创建术语集。

当我使用"RunWithElevatedPrivileges"时,这怎么可能呢?启动工作流的用户是站点管理员。即使是终端商店管理员也是网站管理员。。。那么我在这里做错了什么?

通过代码在Sharepoint中添加TermSetGroup

问题是,您的Web服务以什么身份运行?因为这是将被假定的身份。只要您在一个独立于IIS工作进程(w3wp)的进程中使用SPSecurity.RunWithElevatedPrivileges将不会授予您系统帐户标识。

编辑:

SPSecurity.RunWithElevatedPrivileges(delegate() { 
using(SPSite elevatedSite = new SPSite(YOUR_SITEID))
{
    var elevatedTSession = new TaxonomySession(SPContext.Current.Site);
    var elevatedTermstore = elevatedTSession.TermStores[0]; //Or other if you have more
    //your code here, but using elevatedTermstore instead
}