博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MOSS2010中如何用代码给托管元数据类型的栏目赋值
阅读量:5923 次
发布时间:2019-06-19

本文共 6314 字,大约阅读时间需要 21 分钟。

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

///  /// 托管元数据 ///     public class SPTaxonomyEntity    {        ///         /// 托管元数据的guid        ///         public string Guid        {            get;            set;        }        ///         /// 托管元数据的名称        ///         public string Name        {            get;            set;        }    }

 

#region//变量/// /// 子类托管元数据的集合对象/// private static  List
termcollection = new List
();#endregion

#region//私有方法        #region//给托管元数据类型赋值        ///         /// 给托管元数据类型赋值        ///         /// 当前网站集        /// 当前列表        /// 当前列表项        /// 当前栏目显示名称        /// 节点元数据的名称        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//根据某个节点托管元数据的名称得到某个节点托管元数据对象        ///         /// 根据某个节点托管元数据的名称得到某个节点托管元数据对象        ///         /// 当前网站集        /// 当前列表项        /// 当前栏目显示名称        /// 节点元数据的名称        /// 
返回某个节点托管元数据对象
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 site TaxonomySession taxSession = new TaxonomySession(site); // Get the default term store object for this site. TermStore taxTermStore = taxSession.DefaultSiteCollectionTermStore; //得到TermSet TermSet termSet = taxTermStore.GetTermSet(taxField.TermSetId); //得到某个栏的所有托管元数据集合 List
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// 取托管元数据的所有节点数据 ///
/// 取托管元数据的所有节点数据 /// ///
TermSet类型 ///
返回数据集合
private static List
GetAllTerms(TermSet termSet) { //顶部TermSet数据集合 List
parentcollection = new List
(); //子类的Terms数据集合 List
childcollection = new List
(); // try { //如果不为kog if (termSet != null) { //循环 foreach (Term term in termSet.Terms) { //SPTaxonomyEntity SPTaxonomyEntity tax = new SPTaxonomyEntity(); //托管元数据的id tax.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//取得子类托管元数据的集合 ///
/// 取得子类托管元数据的集合 /// ///
子类对象 ///
子类托管元数据的集合
private static List
GetChildTerms(Term itemTerm) { try { //循环 foreach (Term childTerm in itemTerm.Terms) { //申明 SPTaxonomyEntity tax = new SPTaxonomyEntity(); //托管元数据的id tax.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; //得到TermSet TermSet 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

 

最后写入的效果如下:

转载地址:http://ehnvx.baihongyu.com/

你可能感兴趣的文章
.Net中的反应式编程(Reactive Programming)
查看>>
Objective-C内存管理教程和原理剖析(四)
查看>>
OC self和super
查看>>
大叔也说Xamarin~Android篇~Activity之间传递数组
查看>>
Hibernate关联关系映射之一对一(主键关联)
查看>>
iOS开发-使用Storyboard进行界面跳转及传值
查看>>
iOS开发-装饰模式
查看>>
第七章 常用Java集合类总结
查看>>
python数字图像处理(2):图像的读取、显示与保存
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
jsp截取字符串
查看>>
javascript 高级选择器:querySelector 和 querySelectorAll
查看>>
memcached +mysql+php 例子
查看>>
广东程序员在加利福尼亚
查看>>
outline属性
查看>>
Java Swing界面编程(27)---JRadioButton事件处理
查看>>
iOS 加密的3种方法
查看>>
Hbase分布式安装部署过程
查看>>
Change Fragment layout on orientation change
查看>>
C++中public、protected及private使用方法
查看>>