通过代码在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"时,这怎么可能呢?启动工作流的用户是站点管理员。即使是终端商店管理员也是网站管理员。。。那么我在这里做错了什么?
问题是,您的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
}