最近项目中遇到如何用代码给托管元数据类型的栏目赋值问题,经过折腾,现把我的思路和实现方法共享出来,让大家一起来学习学习。相互探讨下。

 /// <summary>/// 托管元数据/// </summary>public class SPTaxonomyEntity{/// <summary>/// 托管元数据的guid/// </summary>public string Guid{get;set;}/// <summary>/// 托管元数据的名称/// </summary>public string Name{get;set;}}
#region//变量
/// <summary>
/// 子类托管元数据的集合对象
/// </summary>
private static  List<SPTaxonomyEntity> termcollection = new List<SPTaxonomyEntity>();
#endregion
#region//私有方法#region//给托管元数据类型赋值/// <summary>/// 给托管元数据类型赋值/// </summary>/// <param name="site">当前网站集</param>/// <param name="list">当前列表</param>/// <param name="listItem">当前列表项</param>/// <param name="fieldDisplayName">当前栏目显示名称</param>/// <param name="taxName">节点元数据的名称</param>private static void SetTaxonomyValue(SPSite site, SPList list, SPListItem listItem, string fieldDisplayName, string taxName){try{//得到值SPTaxonomyEntity entity = GetCurrentTermToName(site, listItem, fieldDisplayName, taxName);//赋值if (entity != null && !string.IsNullOrEmpty(entity.Guid)){//得到字段TaxonomyField taxonomyField = list.Fields[fieldDisplayName] as TaxonomyField;//字段类型值TaxonomyFieldValue taxonomyFieldValue = new TaxonomyFieldValue(taxonomyField);//赋值taxonomyFieldValue.TermGuid = entity.Guid.ToString();taxonomyFieldValue.Label = entity.Name;//最后赋值if (!string.IsNullOrEmpty(taxonomyFieldValue.Label)){listItem[listItem.Fields[fieldDisplayName].InternalName] = taxonomyFieldValue;}}}catch (Exception ex){MessageLog.WriteLog(DateTime.Now + "给托管元数据类型栏目[" + fieldDisplayName + "]赋值错误:" + ex.Message);}}#endregion#region//根据某个节点托管元数据的名称得到某个节点托管元数据对象/// <summary>/// 根据某个节点托管元数据的名称得到某个节点托管元数据对象/// </summary>/// <param name="site">当前网站集</param>/// <param name="listItem">当前列表项</param>/// <param name="fieldDisplayName">当前栏目显示名称</param>/// <param name="termName">节点元数据的名称</param>/// <returns>返回某个节点托管元数据对象</returns>private static SPTaxonomyEntity GetCurrentTermToName(SPSite site, SPListItem listItem, string fieldDisplayName, string termName){//需要返回的对象SPTaxonomyEntity result = new SPTaxonomyEntity();try{//全局变量实例化if (termcollection != null){//移走数据if (termcollection.Count > 0){termcollection.Clear();}}//得到某个栏目TaxonomyField taxField = listItem.Fields[fieldDisplayName] as TaxonomyField;// Get the taxonomy session for the current siteTaxonomySession taxSession = new TaxonomySession(site);// Get the default term store object for this site.TermStore taxTermStore = taxSession.DefaultSiteCollectionTermStore;//得到TermSetTermSet termSet = taxTermStore.GetTermSet(taxField.TermSetId);//得到某个栏的所有托管元数据集合List<SPTaxonomyEntity> alltax = GetAllTerms(termSet);//循环比较是否跟某个节点托管元数据的名称匹配foreach (SPTaxonomyEntity tax in alltax){//如果匹配则返回对象if (tax.Name.Equals(termName)){result = tax;break;}}}catch (Exception ex){MessageLog.WriteLog(DateTime.Now + "取托管元数据错误数据:" + ex.Message);}//返回对象return result;}#endregion#region// 取托管元数据的所有节点数据/// <summary>/// 取托管元数据的所有节点数据/// </summary>/// <param name="termSet">TermSet类型</param>/// <returns>返回数据集合</returns>private static List<SPTaxonomyEntity> GetAllTerms(TermSet termSet){//顶部TermSet数据集合List<SPTaxonomyEntity> parentcollection = new List<SPTaxonomyEntity>();//子类的Terms数据集合List<SPTaxonomyEntity> childcollection = new List<SPTaxonomyEntity>();//try{//如果不为kog if (termSet != null){//循环foreach (Term term in termSet.Terms){//SPTaxonomyEntitySPTaxonomyEntity tax = new SPTaxonomyEntity();//托管元数据的idtax.Guid = term.Id.ToString();//托管元数据的名称tax.Name = term.Name;//加入到父集合中去parentcollection.Add(tax);//递归子类的数据集合childcollection = GetChildTerms(term);}//如果不为空才添加if (childcollection != null){//合并父子类数据集合,返回所有托管元数据集合parentcollection.AddRange(childcollection);}}}catch(Exception ex){MessageLog.WriteLog(DateTime.Now + "无法取到托管元数据的父数据:" + ex.Message);}//返回return parentcollection;}#endregion#region//取得子类托管元数据的集合/// <summary>/// 取得子类托管元数据的集合/// </summary>/// <param name="itemTerm">子类对象</param>/// <returns>子类托管元数据的集合</returns>private static List<SPTaxonomyEntity> GetChildTerms(Term itemTerm){try{//循环foreach (Term childTerm in itemTerm.Terms){//申明SPTaxonomyEntity tax = new SPTaxonomyEntity();//托管元数据的idtax.Guid = childTerm.Id.ToString();//托管元数据的名称,组合成路径格式保存tax.Name = childTerm.GetPath();//把路径格式化下tax.Name = tax.Name.Replace(";", "/");//加入子类集合termcollection.Add(tax);//递归继续得到所有子类GetChildTerms(childTerm);}}catch (Exception ex){MessageLog.WriteLog(DateTime.Now + "无法取到托管元数据的子数据:" + ex.Message);}//返回 return termcollection;}#endregion#endregion

调用方法:

我的托管元数据的如下结构图,建立在默认的那个大类下面,所以代码部分写成如下:

 // Get the default term store object for this site.TermStore taxTermStore = taxSession.DefaultSiteCollectionTermStore;//得到TermSetTermSet termSet = taxTermStore.GetTermSet(taxField.TermSetId);
 
 

如果不是我这个情况,必须建立在其他单独的下面,那么代码部分可以改成如下:

 TaxonomySession taxonomySession = new TaxonomySession(site);TermStore termStore = taxonomySession.TermStores["Managed Metadata Service"];Group group = termStore.Groups["文档中心元数据"];//**************公司                 TermSet termSet = group.TermSets["公司"];
 
 

调用实例:

 #region//更改托管元数据类型//公司SetTaxonomyValue(site, docList, docItem, "公司", "东莞公司");//项目
SetTaxonomyValue(site, docList, docItem, "项目", "上海公司/项目1/我的项目");
//阶段
SetTaxonomyValue(site, docList, docItem, "阶段", "初步设计阶段Ⅳ");
//专业
SetTaxonomyValue(site, docList, docItem, "专业", "初步设计阶段Ⅳ");
#endregion

最后写入的效果如下:

转载于:https://www.cnblogs.com/love007/archive/2012/12/06/2805381.html

MOSS2010中如何用代码给托管元数据类型的栏目赋值相关推荐

  1. unity3d循环滑动_Unity3D中如何用代码实现物体的左右循环移动?

    展开全部 Unity3D中用代码实现物体的左右循环移动的方式如下: 1.新建一32313133353236313431303231363533e59b9ee7ad9431333365646264个Cu ...

  2. 托管元数据(2)——托管元数据和搜索中的精简面板

    精简面板(Refinement Panel,SharePoint也有些地方把Refinement翻译成"优化")是SharePoint 2010搜索中新增加的一个非常好的功能,可以 ...

  3. PHP中添加HTML代码的三种方法(printEND)

    php中添加HTML代码,就是php类型的文件中添加html代码~ 第一种是在HTML中加PHP. 大段大段的html代码中,在各个需要执行php的地方<?php .... ?> 比如 l ...

  4. php中嵌套html代码和html代码中嵌套php方式

    php中嵌套html代码和html代码中嵌套php方式 一.总结 拷贝的话直接html代码是极好的方式 1.php中嵌套html代码(本质是原生php):a.原生嵌套<?php .....?&g ...

  5. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码_转载...

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  6. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  7. java 执行html里的js_如何用java执行指定页面中的js代码

    展开全部 要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,e69da5e6ba9062616964757a686964616f31333366303133否 ...

  8. java transaction cn,JAVA中如何用TRANSACTION来对数据库进行

    TRANSACTION的作用: 比如有 一般的格式. try { conn.setAutoCommit(false); http://www.gaodaima.com/41686.htmljava中如 ...

  9. SharePoint 2010 新体验7 - Managed Metadata (托管元数据)

    在一个企业中,有时候需要一个专门的Metadata库,用来保存各种预定义的Metadata.有了Metadata库,就能方便的为企业中的各种数字内容.数字资产应用上各种定义好的Metadata,或是用 ...

  10. python 测试字符串类型_【教程】如何用Python中的chardet去检测字符编码类型

    [背景] 之前已经使用过chardet了,也算用了不少次了. 之前也写过和chardet相关的: 但是没写教程,举例说明如何使用. 现在去举例解释解释. [python示例代码演示如何用chardet ...

最新文章

  1. linux下字符编码转换
  2. PhpForm表单验证
  3. escape、encodeURI 、encodeURIComponent 编码与解码
  4. From Hero to Zero
  5. LINUX中常用操作命令
  6. git传代码到github
  7. camel apache_Apache Camel 3的工作终于开始了
  8. CI框架发送邮件(带附件)
  9. 2022泰迪杯数据挖掘挑战赛C题思路及赛后总结
  10. 实验三——Pspice
  11. 大规模图算法在京东广告的实践
  12. Android studio 如何连接手机
  13. 愤怒的小鸟有PC版本了!
  14. java8 list find_java8 多个list对象用lambda求差集操作
  15. IP地址计算---子网掩码确定和子网划分等详解 (附常见相关习题)
  16. 电子竞技——靠智力取胜的体育项目
  17. 在计算机中关闭应用程序,电脑中如何取消点击关机后出现的还需要关闭程序的提示...
  18. 优雅java代码效率提高的习惯(一)
  19. 转载:SFC /SCANNOW发现损坏文件应对方法参考
  20. 萧红《生死场》读后感

热门文章

  1. CSS margin合并
  2. 关于var、let和const
  3. [转]非模态对话框的特点与使用
  4. selenium控制浏览器
  5. Spring整合JMS——三种connectionFactory
  6. Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条(未待解决完问题)...
  7. 026 模块3-random库的使用
  8. Floyd算法 C++实现
  9. MySql 存储过程 光标只循环一次
  10. 51 NOD 1407 and and and and !!