2016-05-25 7 views
1

У меня есть следующий бит PowerShell, который возвращает список всех департаментов, хранящихся в управляемых метаданных SharePoint в:Как позвонить Sharepoint таксономии в C#

Add-PSSnapin Microsoft.Sharepoint.Powershell 

# Get the site collection 
$sitecollection = Get-SPSite 'http://mysharepointsite/' 

# Get the term store id 
$taxsession = Get-SPTaxonomySession -Site $sitecollection 

# Change to the requierd service name 
$termstore = $taxsession.TermStores["Managed Metadata Service"] 
$termstore.id 

# Get the term set id 
$termstoregroup = $termstore.Groups["People"] 
# Change to your term set name 
$termset = $termstoregroup.TermSets["Department"] 
$termset.id 

$departments = $termset.id.name 

мне нужно добиться того же с помощью C#, но Я не могу найти ничего, что сработает для меня. Кто-нибудь знает, какой будет стандартный подход?

Я всегда мог начать сеанс PowerShell из моего приложения C#, но это похоже на очень окольный способ сделать что-то, с чем C# не должно возникать проблем.

+1

От C# Я рекомендую использовать CSOM: https://msdn.microsoft.com/en-us/library/office/dn904534.aspx –

+0

@MurrayFoxcroft спасибо за ваш комментарий. Ранее я видел эту страницу, но я был смущен, когда я перехожу к связанному проекту github, я не вижу ссылку для загрузки: https://github.com/OfficeDev/PnP/tree/dev/Samples/Core. MMS – Bassie

+0

Ничего страшного - оказывается, вы не можете скачать суб-репозиторий github, поэтому мне просто нужно было получить проект верхнего уровня – Bassie

ответ

1

мне удалось сделать это с C#, используя следующий код:

var spSite = new SPSite(@"http://mysharepointsite/"); 

var taxSession = new TaxonomySession(spSite); 

var termStore = taxSession.TermStores["Managed Metadata Service"]; 
var termStoreGroup = termStore.Groups["People"]; 
var termSet = termStoreGroup.TermSets["Department"]; 

var deps = termSet.Terms; 

foreach (var dep in deps) 
{ 
    MessageBox.Show(dep.Name); 
} 

который почти идентичен тому, что в главном вопросе.

Важно, чтобы этот код не выполнялся только на сервере, на котором установлен SharePoint.. При запуске этого на моей обычной Dev машине я получаю это исключение на линии 1:

Необработанное исключение типа «System.TypeInitializationException» произошло в Microsoft.SharePoint.dll

Дополнительная информация: тип инициализатора для «Microsoft.SharePoint.CoreResource» сделал исключение.

Точно так же, я могу только запустить скрипт PowerShell из вопроса с сервера SharePoint - который имеет смысл, так как они, по всей видимости, использует один и тот же объект .Net, т.е. TaxonomySession


Использование this sample, Я также был в состоянии получить список отделов из моей машины со следующим кодом:

var clientContext = new ClientContext("http://mysharepointsite/") 
    { AuthenticationMode = ClientAuthenticationMode.Default}; 

var taxonomySession = TaxonomySession.GetTaxonomySession(clientContext); 
var termStore = taxonomySession.GetDefaultSiteCollectionTermStore(); 
clientContext.Load(termStore, 
     store => store.Name, 
     store => store.Groups.Include(
      group => group.Name, 
      group => group.TermSets.Include(
       termSet => termSet.Name, 
       termSet => termSet.Terms.Include(
        term => term.Name) 
      ) 
     ) 
); 
clientContext.ExecuteQuery(); 

if (taxonomySession != null) 
{ 
    if (termStore != null) 
    { 
     foreach (var termGroup in termStore.Groups) 
     { 
      foreach (var termSet in termGroup.TermSets) 
      { 
       foreach (var term in termSet.Terms) 
       { 
        MessageBox.Show(term.Name); 
       } 
      } 
     } 
    } 
} 

Как упоминал Мюррей Фокскрофт, это использует объектную модель клиента (CSOM), которая позволяет удаленно получать доступ к таксономии.

1

В мире SharePoint серверные и клиентские библиотеки называются одинаковыми, I.e. Microsoft.Sharepoint.dll, но имеют разные реализации, что делает вещи запутанными и дает ошибку, которую вы испытываете. Если вам нужно запустить с сервера, вы можете продолжить то, что у вас есть. Если вам нужно, чтобы он запускался удаленно, вам нужно будет поместить в CSOM (объектную модель на стороне клиента), предоставленную в моем ответе.

 Смежные вопросы

  • Нет связанных вопросов^_^