Session Title - InsideSharePoint.NET

Report
Developing against Managed Meta
Data – Blackbelt
Bart-Jan Hoeijmakers
Donald Hessing
Introduction – Who are we?
Donald Hessing
– Working with SharePoint since 2007, before .Net architect
– Technical Manager, Lead SharePoint Architect at VX Company
– Virtual Technology Solution Professional for Microsoft Netherlands
Bart-Jan Hoeijmakers
– Working with SharePoint since 2006, before .Net developer
– Lead SharePoint Developer at VX Company
– Strong focus on developing custom solutions
Agenda
•
•
•
•
•
•
•
Introduction – Who are We?
Architectural overview of Managed Meta Data
Provision Taxonomy Field
How to set Taxonomy Field value programmatically?
Query List items by Taxonomy Field value using CAML
Search for items by Term
Column specific TermSets
MANAGED META DATA ARCHITECTURE
Managed Meta Data Service
Application
• Sharing meta data cross:
– Sites, Site Collections, Web Applications, Farms
• Centralized management of:
– TermSets, Terms, ContentTypes
• MMS can be connected cross farm
• Multiple MMS can be connected to the
same web application
• MMS is Tenant “aware”  partitioned
Terminology
= TermStore
= TermGroup
= TermSet
= Term
= Term
Administration
• Managed Meta Data Service Application
– Administrators
• Manage the properties of the Service Applications
• Are NOT Term Store Administrator by default
– Permissions
• Local Farm: By default all services local to the farm have full access
• Term Store Administrator
– Create Term Groups
– Assign Term Group Managers
• Can assign Term Group Contributors
– Create and manage Term Sets and Terms
Consuming Managed Meta Data
• Webapplication must be connected to the Service
Application
– Managed Meta Data Service Applications in the default
proxy group are connected automatically
Enterprise Keywords
• Enterprise Keyword Field allows users to select enterprise
keywords and managed terms
• Used keywords are stored in the Keywords TermSet of the
System Group in the MMS
• Set the default storage location for keywords
• Users must have permissions on the MMS
TaxonomyHiddenList
Location: [SiteCollectionUrl]/Lists/TaxonomyHiddenList
• Stores taxonomy values for:
– Assigned Taxonomy values in the site collection
– Default values of the Taxonomy Field Site Column
• The Taxonomy Field is a lookup field to TaxonomyHiddenList
– This prevents a hotspot on MMS
• TaxonomyHiddenList is synchronized with the TermStore by the Taxonomy
Update Scheduler Timer Job
• Updating a term in the TermStore doesn’t change the field
– The new value is provided by the lookup to the synchronized
TaxonomyHiddenList
PROVISION MANAGED META DATA
FIELD
Provision Managed Metadata Field
• For provisioning a Taxonomy Field you need 2 Fields:
<Field Type=“TaxonomyFieldTypeMulti” Name=“DemoTaxField” ..../>
<Field Type=“Note” Name=“DemoTaxFieldTaxHTField0” .... />
• TaxonomyFieldTypeMulti renders the hierarchical meta
data field (FieldControl)
– Stores the WssId of the item in the TaxonomyHiddenList
– [4;#SharePoint 2010]
– Value is provided by the Lookup to the TaxonomyHiddenList
• Note field stores the selected term label and term GUID
– [SharePoint 2010|dd212d38-417e-4a9d-8222-e856b05d627b]
Provision Taxonomy Field
Microsoft Naming Convention
• When provisioning TaxonomyFields, also
provision the hidden notefield!
Add Field to ContentType
•
•
Manually add the TaxCatchAll and TaxCatchAllLabel fields to the
listdefinition, or to your contenttype
Seach refinement panel and Document Information Panel rely
on these fields
Event Receivers
• Manually add the
TaxonomyItemSynchronousAddedEventReceiver and
TaxonomyItemUpdatingEventReceiver to the list definition
Synchronizes the TaxCatchAll fields
and the hidden notefield
Bind Taxonomy Field to TermStore
• Taxonomy Field is a specialized lookup field
• After provisioning it should be binded to a
TermStore:
– Bind TermStoreID and TermSetID in event receiver
– Bind the hidden note field in event receiver
This doesn’t work for SandBox solutions because the
“Microsoft.SharePoint.Taxonomy” DLL is not available!!
TaxonomyFieldAdded feature
When using custom webtemplates, or site
definitions based on Blank Site Template make
sure that hidden feature 73ef14b1-13a9-416ba9b5-ececa2b0604c (TaxonomyFieldAdded) is
activated on the sitecollection!
DEMO
SET TAXONOMY FIELD VALUE
PROGRAMMATICALLY
How to set a value of a Taxonomy field
programmatically?
• In General: Terms that were not used before will
be added to the TaxonomyHiddenList of the
SiteCollection
• Taxonomy Field can be updated by
– TermGUID
– Term from the Term Store (MMS)
• The Taxonomy Field has a reference to the
TermStore (SspId) and TermSet (TermSetId)
Set value by the Guid of the Term
Site can have
multiple
TermStores
associated
We usually
don’t know
the GUID of
the Term
Set term based on Label
The Taxonomy Field
has a reference to
the TermStore and
TermSet Taxonomy
Field
Get the
Term by
label
Set taxonomy value
TaxonomyHiddenList
DEMO
QUERY LIST ITEMS BY TAXONOMY FIELD
VALUE USING CAML
Query the list using CAML
• Get all list items that are tagged with a
term or one of its child terms
• CAML query can be constructed to
achieve this goal
<Where><In><FieldRef LookupId="TRUE" Name=“MyTaxonomyField" /><Values>
<Value Type="Integer">7</Value>
TaxonomyField.GetWssIdsOfTerm(..,..,..)
<Value Type="Integer">5</Value>
<Value Type="Integer">6</Value>
</Values></In></Where>
Taxonomy Fields and CAML
Get the Lookup Id’s of the Term from the TaxonomyHiddenList
Construct the CAML query
Execute the CAML Query against the list
Query List Items by Taxonomy Field value using CAML
DEMO
SEARCH FOR ITEMS BY TERM
Setting up Metadata properties
• For Taxonomy Fields, Crawled and Managed properties are
automatically created after the first full crawl
– Only when a list item is added and contains a taxonomy field value
• Nice for out of the box implementations, but for custom solutions :
– You can’t first call someone to create a listitem for the managed
properties
– Create the crawled and managed properties in advance by using
powershell
– Provide crawled property with prefix ows_taxId_
– Provide managed property with prefix owstaxId
Managed and crawled properties
To create and map properties in PowerShell, use the following commandlets:
• New-SPEnterpriseSearchMetadataCrawledProperty
• New-SPEnterpriseSearchMetadataManagedProperty
• New-SPEnterpriseSearchMetadataMapping
Search by Term in code
Hierarchical search vs exact search
• Prefix term GUID in search query with # or
with #0
• #0 = exact search  SharePoint
• # = search for the term or any child terms
below it in the TermStore hierarchy
 SharePoint, MOSS 2007, SharePoint 2010
Searching items by term from code
DEMO
COLUMN SPECIFIC TERMSETS
Column specific TermSets
• In general Taxonomy Fields are connected to a central TermSet
– Departments
• It is also possible to create and connect to a local TermSet
– To provide team specific termsets that don’t make sense for global availability
– Termsets are stored in the MMS with SiteCollection-FieldName as name
• Default storage location for column specific Term Sets should be
enabled
Other Gotcha’ s
• TaxonomyHiddenList is resource throttled
• The TaxonomyHiddenList is not cleaned up with
unused terms
• Keywords stored in the termstore are not security
trimmed
• The number of lookupFields is limited to 8 by default
 number of joins allowed per query
• Import of termsets will get a new GUID during import |
DTAP
Key take aways!
• MMS can provide taxonomy for Sites, SiteCollections, Web
Applications or Farms
• TaxonomyHiddenList in the Site Collection prevents hotspot on
MMS
• Provisioning Taxonomy Fields requires additional Fields and
attached EventReceivers
• The Taxonomy Field contains a reference to the TermStore and
TermSet
• Hierachical search on Taxonomy Fields can be done by using Search
– Use #0 for exact match
– Use # for search on child terms
Q&A
Contact
Donald Hessing
[email protected]
http://bloggingabout.net/blogs/donald
Twitter:@dhessing
Contact
Bart-Jan Hoeijmakers
[email protected]
http://www.insidesharepoint.net

similar documents