2012-03-15 74 views
0

创建TermSetGroup时出现问题。我的代码如下所示:通过代码在Sharepoint中添加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(); 
}); 

如果我在分开的控制台项目中使用它,此代码实际上起作用。它创建了我的组,并在此组中还创建了TermSet。但是,当我使用webservice(这是在工作流中调用的)中使用此代码时,它告诉我,我的用户没有创建组的权限。 当该组存在时,它可以工作,并且可以创建TermSet。

这是怎么回事,当我使用“RunWithElevatedPrivileges”? 启动工作流程的用户是网站管理员。即使Termstore Admin是网站管理员......所以我在这里做错了什么?

回答

0

问题是,你的web服务以什么身份运行? 因为这是假定的身份。只要您使用SPSecurity.RunWithElevatedPrivileges运行我的独立进程而不是IIS工作进程(w3wp),则系统帐户身份不会授予您此权限。

编辑:

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 
} 
+0

web服务运行作为网站管理员,甚至如果我去做了与另一个管理员帐户,通过UserToken,它仍然不起作用。 – 2012-03-15 12:47:17

+0

也许你需要从升级子句中引用termstore和TaxonomySession?看到我编辑的答案。 – 2012-03-15 14:34:00

+0

好吧,我也试过,但仍然没有许可:/我真的不明白... – 2012-03-16 07:46:38