设为首页 收藏本站
查看: 826|回复: 0

[经验分享] SharePoint Managed Metadata 使用总结

[复制链接]

尚未签到

发表于 2015-9-24 13:46:52 | 显示全部楼层 |阅读模式
前言
  本文完全原创,转载请说明出处,希望对大家有用。
  在SharePoint开发中,通常我们会将数据存储在列表,文档库或者直接存到数据库。但涉及到数据的层级结构时,用列表等存储实现并不是一件简单的事情,这时候就可以使用SharePoint的另外一种存储数据的方式:托管元数据。
  托管元数据为SharePoint提供了统一的术语库,企业用户可以将各种日常使用的术语存放在托管元数据。托管元数据的另外一个重要特点是树型结构,比较典型的应用时企业的组织架构,将企业组织架构按照层级结构存放到托管元数据中,通过遍历元数据树输出企业组织信息。
 本文着重对开发过程中对托管元数据的操作进行总结,如何配置Managed Metadata Service(托管元数据服务)请查看官方文档,本文不做描述。



阅读目录


  • 认识托管元数据存储结构
  • 托管元数据操作

    • 读元数据
    • 修改元数据
    • 读父节点、子节点
    • 复制、合并、移动节点
    • TaxonomyHiddenList
    • 定义TaxonomyFieldType字段


  • 总结



正文


认识托管元数据存储结构  在使用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的总结大概就是这些了,希望对读者有所帮助,有任何疑问请及时与我讨论。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118285-1-1.html 上篇帖子: Sharepoint学习笔记---关于Element.xml中Ghostable与GhostableInLibrary属性设置 下篇帖子: SharePoint服务器端对象模型 之 使用CAML进行数据查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表