SharePoint Managed Metadata 使用总结

前言

本文完全原创,转载请说明出处,希望对大家有用。

  在SharePoint开发中,通常我们会将数据存储在列表,文档库或者直接存到数据库。但涉及到数据的层级结构时,用列表等存储实现并不是一件简单的事情,这时候就可以使用SharePoint的另外一种存储数据的方式:托管元数据。

  托管元数据为SharePoint提供了统一的术语库,企业用户可以将各种日常使用的术语存放在托管元数据。托管元数据的另外一个重要特点是树型结构,比较典型的应用时企业的组织架构,将企业组织架构按照层级结构存放到托管元数据中,通过遍历元数据树输出企业组织信息。

 本文着重对开发过程中对托管元数据的操作进行总结,如何配置Managed Metadata Service(托管元数据服务)请查看官方文档,本文不做描述。

阅读目录

正文

 认识托管元数据存储结构

在使用Managed Metadata前,我们先看一下数据的存储结构,在Managed Metadata中,结构类型分为Term Store(容器)、Group、Term set和Term。

它们的关系可以用下图表示:

Managed Metadata Service

  • Term Store
    • Group
      • Term Set
        • Term

Group节点只能创建Term Set节点,Term Set节点只能创建Term节点,Term节点可以继续创建Term子节点。

 

这就是Managed Metadata得数据存储结构,接下来看下如何管理元数据。

路径:Site Settings->Term store management

Term store management是SharePoint自带的托管元数据管理页面,打开Term store management

如图:

我们可以看到在当前的网站集中,有一个Managed Metadata Service(Term Store),在此节点下有5个子节点。

在虚线上方的是自定义的Group(Portal等),展开Portal Group后,如图:

可以看到在Portal节点下是Department等Term Set节点,再下一层就是Term节点,如在部门(Department)节点下存储各个部门,以及各部门下的子部门。

这是SharePoint server 2010自带的管理界面,这里我们为了说明元数据存储结构简单介绍一下,接下来是我们开发过程中真正使用元数据的方法。

 托管元数据操作
 读数据
using (SPSite site = new SPSite(SiteUrl))
  {
      TaxonomySession taxonomySession = new TaxonomySession(site);
      TermStore termStore = taxonomySession.DefaultSiteCollectionTermStore;
      Group group = termStore.Groups[termgroup];
      TermSet termSet = group.TermSets[termSet_Department];
  }

代码解释:

  TaxonomySession:获取当前网站集下的 TermStore上下文环境

  TermStore->Group->TermSet:根据层级结构取得最终的termset

  DefaultSiteCollectionTermStore:默认的TermStore,可以使用taxonomySession.TermStore[""]修改为指定的TermStore

  获取TermSet后,就可以通过其Terms属性获取此节点下的所有Terms。

 修改term数据

在读取termset以后,下一步尝试修改term,加入以下代码:

    Term term= termSet.Terms["IT"];
    term.Name = "MIT";
    termStore.CommitAll();    

代码解释:

  获取名为“IT”的Term

  现在将Name修改为MIT

  提交所有更改

 注意修改元数据需要有相应的权限,同时需要注意的是修改后由于TimerJob的原因,可能会有一些延迟。

 读取父节点、子节点
          if (!term.IsRoot)
              {
                 Term parent = term.Parent;
              }
           TermCollection child_terms = term.Terms;

代码解释:

  term.IsRoot:判断是否为根节点

  term.Parent:如果非根节点,则找到上级节点

  term.Terms:找到此节点下的所有下级节点

 复制、合并、移动节点

  复制:

    Term term= termSet.Terms["MIT"];
    term.Copy(true);
    termStore.CommitAll(); 

Term.Copy方法会将此节点复制一份名称"Copy of MIT"为保存到当前的TermSet中,参数指定为true则复制会包括子节点。同样TermSet也可以复制,不需要指定参数,方法会自动将其中的子节点也复制,子节点是作为原节点的复用(Reuse)节点存在,复用节点可以通过Source属性访问原节点。

  合并:

    Term term = termSet.Terms["MIT"];
    Term term4Merge=termSet.Terms["HR"];
    term.Merge(term4Merge);
    termStore.CommitAll();

Merge方法只能针对同样是Source Term的2个节点,也就是说之前复制后的复用节点是不能合并的。上述代码会将term合并到term4Merge。

  移动:

    Term term = termSet.Terms["HR"];
    Term term4Move=termSet.Terms["Account"];
    term.Move(term4Move);
    termStore.CommitAll();

Move方法应该是最常用到的方法。

Term和Term Set都可以移动,Term可以移动到其他在此Term Store的Term节点或Term Set下,Term Set可以移动到此Term Store的Group节点下。

Move方法可以让用户更加自由的移动节点,假设有这样一个需求,用户需要维护企业组织架构,如上述事例中:HR部门需要移动到Account部门下。使用Move方法,可以方便的将HR部门的所有其他组织一起移动到Account部门节点下,免去了重复添加的过程。甚至可以在页面中以拖拽的方式实现,为用户呈现更加直观友好的页面。

 

 TaxonomyHiddenList

在SharePoint站点中,有一个隐藏的TaxonomyHiddenList,可以通过/Lists/TaxonomyHiddenList/AllItems.aspx访问。TaxonomyHiddenList的item对应TaxonomyFieldType字段的值,TaxonomyFieldType字段被赋值后,就会对应的在TaxonomyHiddenList产生一条记录,用来记录TaxonomyField的详细信息,所以TaxonomyFieldType字段也是LookUp字段类型。

 

 自定义TaxonomyFieldType字段

在SharePoint界面中新建TaxonomyFieldType字段无其他需要注意的,主要看下在SharePoint项目中新建TaxonomyFieldType字段。

以下是TaxonomyFieldType字段的定义:

  <Field ID="{47539D90-EB9B-45A5-8591-68077530FD92}" Name="Field_TaxonomyDemo" StaticName="Field_TaxonomyDemo" DisplayName="TaxonomyDemo" Required="FALSE" Group="Custom group" Type="TaxonomyFieldType">
        <Customization>
          <ArrayOfProperty>
            <Property>
              <Name>TextField</Name>
              <Value xmlns:q6="http://www.w3.org/2001/XMLSchema" p4:type="q6:string" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance">{78FF1668-CDDB-4645-8BED-FC2179944F5F}</Value>
            </Property>
          </ArrayOfProperty>
        </Customization>
   </Field>
   <Field ID="{78FF1668-CDDB-4645-8BED-FC2179944F5F}" Name="Field_TaxonomyDemoTaxHTField0" Type="Note" DisplayName="TaxonomyDemoTaxHTField0" StaticName="Field_TaxonomyDemoTaxHTField0" ShowInViewForms="FALSE" Required="FALSE" Hidden="TRUE" CanToggleHidden="TRUE"/>

Field_TaxonomyDemo字段这个字段是TaxonomyFieldType类型,需要注意的是在此字段中,需要引用下面的Field_TaxonomyDemoTaxHTField0字段作为其TextField属性字段。

总结

作为数据管理的一种方法,个人认为SharePoint Managed Metadata好处多多,在实际应用中也有很多方便之处。

SharePoint Managed Metadata的总结大概就是这些了,希望对读者有所帮助,有任何疑问请及时与我讨论。

 

posted @ 2013-11-08 23:12  任泽华Ryan  阅读(3560)  评论(0编辑  收藏  举报