2012-03-15 92 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