Добавить TermSetGroup в Sharepoint через код - PullRequest
0 голосов
/ 15 марта 2012

У меня проблема при создании 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.Но когда я использую этот код из веб-сервиса, который был вызван в рабочем процессе, он говорит мне, что у моего пользователя нет прав на создание группы.Когда группа существует, она работает и может создавать TermSet.

Как это может быть, когда я использую "RunWithElevatedPrivileges"?Пользователь, который запускает рабочий процесс, является администратором сайта.Даже администратор термистора является администратором сайта ... так что я тут не так делаю?

1 Ответ

0 голосов
/ 15 марта 2012

Вопрос в том, под каким именем работает ваш веб-сервис? Потому что это личность, которая будет принята. Пока вы работаете в отдельном процессе, чем рабочий процесс IIS (w3wp), использующий SPSecurity.RunWithElevatedPrivileges не будет предоставлять вам учетную запись системы.

Edit:

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
}
...