Freitag, 26. August 2011

SharePoint, PowerShell und Taxonomy

Eines der spannensten Features in SharePoint 2010 ist sicherlich der Managed Metadata Service und Taxonomien. Die Produktversion 2010 ist frisch mit diesem Feature bereichert worden. Daher ist gerade für Anwender, die schon ältere Produktversionen wie den Office SharePoint Server 2007 oder die Windows SharePoint Services 3.0 eingesetzt haben Umdenken angesagt! Hat man sich früher mit Auswahl- und Nachschlagefelder auf Schlagwortlisten beholfen, kann man heute Managed Metadata einsetzen! Dies erfordert allerdings auch neue Anforderungen an die Administration und schafft neue Herausforderungen bei der Migration - denn wer will schon die alten Notlösungen weiter verwenden, wenn er jetzt ein neues Feature dafür hat?! Die Erfahrung zeigt, dass man sich für solche Migrationen von alten Schlagwortspalten in Taxonomien oftmals am besten mit individuellen PowerShell Skripts behilft. Daher möchte ich im folgenden Skript- Beispiele für die häufigsten Anwendungsfälle bereit stellen.

  1. ####   
  2. # www.letssharepoint.com   
  3. ####   
  4.   
  5. # Get Taxonomy Session and Term Store   
  6. $site = Get-SPSite http://yoursiteurl   
  7. $taxonomySession = Get-SPTaxonomySession -site $site  
  8. $termStore = $taxonomySession.TermStores["Your Managed Metadata Service Application"]   
  9.   
  10. # Create Groups   
  11. $termStoreGroup = $termStore.CreateGroup("Your Groupname")   
  12. $termStoreGroup.Description = "Your Description"    
  13. $termStoreGroup.AddGroupManager("domain\user")   
  14. $termStoreGroup.AddContributor("domain\user")   
  15.   
  16. # Create Termset   
  17. $termSet = $termStoreGroup.CreateTermSet("Your Termset name")   
  18.   
  19. # Create Term   
  20. $term = $termSet.CreateTerm("Your Term Name", LanguageID)   
  21.   
  22. $termStore.CommitAll()  
Das Beispiel Skript oben zeigt, wie man sich gegen einen Term Store verbindet und neue Gruppne, Term Sets und Terms anleget. Zu beachten ist, das bei der Methode CreateTerm die LanguageID ausgetauscht werden muss!

  1. ####   
  2. # www.letssharepoint.com   
  3. ####   
  4.   
  5. # Load Microsoft.SharePoint.Taxonomy to work with TaxonomyFieldValueCollection   
  6. [Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Taxonomy")   
  7.        
  8. # Get Taxonomy Session and Term Store   
  9. $site = Get-SPSite http://yoursiteurl   
  10. $taxonomySession = Get-SPTaxonomySession -site $site  
  11. $termStore = $taxonomySession.TermStores["Your Managed Metadata Service Application"]   
  12.   
  13. # Get Web, List item and Taxonomy Field   
  14. $web = Get-SPWeb http://yourweburl   
  15. $list = $web.Lists["YourList"]   
  16. $item = $list.GetItemById(1)   
  17. $taxField = $item.Fields["YourTaxField"]   
  18.   
  19. # Create Taxonomy Field Collection for a Multi Managed Metadata Field   
  20. $taxCollection = new-object Microsoft.SharePoint.Taxonomy.TaxonomyFieldValueCollection $taxField  
  21.   
  22. ## Get Terms and Add them to the TaxonomyFieldValueCollection   
  23. # Get Term Group   
  24. $termStoreGroup = $termStore.Groups["My Group"]   
  25. # Get Term Set   
  26. $termSet = $termStoreGroup.TermSets["My Termset"]   
  27. # Get Terms    
  28. $term1 = $termSet.Terms["Term1"]   
  29. $term2 = $termSet.Terms["Term2"]   
  30. $term3 = $termSet.Terms["Term3"]   
  31. # Get TaxonomyFieldValues   
  32. $taxValue1 = new-object Microsoft.SharePoint.Taxonomy.TaxonomyFieldValue($taxField)   
  33. $taxValue1.TermGuid = $term1.Id   
  34. $taxValue1.Label = $term1.Name   
  35. $taxValue1.WssId = -1   
  36. $taxValue1 = new-object Microsoft.SharePoint.Taxonomy.TaxonomyFieldValue($taxField)   
  37. $taxValue2.TermGuid = $term2.Id   
  38. $taxValue2.Label = $term2.Name   
  39. $taxValue2.WssId = 0   
  40. $taxValue3 = new-object Microsoft.SharePoint.Taxonomy.TaxonomyFieldValue($taxField)   
  41. $taxValue3.TermGuid = $term3.Id   
  42. $taxValue3.Label = $term3.Name   
  43. $taxValue3.WssId = 1   
  44. # Add Values to Tyxonomy Field Value Collection   
  45. $taxCollection.Add($taxValue1)   
  46. $taxCollection.Add($taxValue2)   
  47. $taxCollection.Add($taxValue3)   
  48.   
  49. # Update Managed Metadata Colum on Item   
  50. $taxField = SetFieldValue($item$taxCollection)   
  51. $item.Update()  
Dieses Skript Beispiel zeigt, wie man eine Spalte vom Typ "Verwaltete Metadaten", welche mehrere Werte zulässt, befüllt. Im hier gezeigten Fall werden drei Werte in der Spalte gesetzt. Die WssId des TaxonomyFieldValues wird einfach hochgezählt, sofern das Feld noch nicht mit anderen Werten befüllt ist.

Good Luck,

Andreas

1 Kommentar:

  1. Zwei kleine Optimierungen:
    Zeile 36 muss lauten: $taxValue2
    Und in Zeile 50 muss der Befehl lauten: $taxField.SetFieldValue($item, $taxCollection)

    Ansonsten ein tolles Skript.

    AntwortenLöschen