MOSS2010中如何用代码给托管元数据类型的栏目赋值
最近项目中遇到如何用代码给托管元数据类型的栏目赋值问题,经过折腾,现把我的思路和实现方法共享出来,让大家一起来学习学习。相互探讨下。
/// <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 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<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)
{
//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//取得子类托管元数据的集合
/// <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();
//托管元数据的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
最后写入的效果如下:
MOSS2010中如何用代码给托管元数据类型的栏目赋值的更多相关文章
- android中如何用代码来关闭打开的相机
场景描述: 比如你再应用中打开了系统相机,然后需要在几分钟后自动关闭这个系统相机(不是手动关闭) 1.在activityA中利用startActivityForResult(intent,reques ...
- WPF中如何用代码触发按钮Click处理
btnOk.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
- Unity3D除了在编辑器里,怎么用代码给一个Texture类型的变量赋值
resource.load上来一张贴图就行. using UnityEngine; using System.Collections; public class example : MonoBehav ...
- ZH奶酪:PHP中添加HTML代码的三种方法
php中添加HTML代码,就是php类型的文件中添加html代码~ 第一种是在HTML中加PHP. 大段大段的html代码中,在各个需要执行php的地方<?php .... ?> 比如 l ...
- php中嵌套html代码和html代码中嵌套php方式
php中嵌套html代码和html代码中嵌套php方式 一.总结 拷贝的话直接html代码是极好的方式 1.php中嵌套html代码(本质是原生php):a.原生嵌套<?php .....?&g ...
- Salesforce 自定义元数据类型
自定义元数据类型的优点 Salesforce中的设定都是以元数据(Metadata)存在的.在Salesforce中,用户可以新建自定义对象.自定义字段等,这些数据结构都以元数据的形式存储在系统中.当 ...
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- Excel 2003 中如何用VBA 代码访问单元格里的值及操作单元格 - 唐诗宋词的专栏 - 博客频道 - CSDN.NET
在Excel 中编写VBA 代码,最常做的事可能就是操作表单中单元格里的数据. 我这里总结一下如何从VBA 代码中操作单元格的数据. 在VBA 代码中操作单元格需要用到Range 对象,Range 是 ...
- ng1中 如何用双向绑定 实现单向绑定的初始时不显示双括号效果?
ng1中 如何用双向绑定 实现单向绑定(ng-bind就可以不显示{{}})的初始时不显示双括号效果? AngularJS 实例 页面加载时防止应用闪烁: <div ng-app="& ...
随机推荐
- kuangbin专题十六 KMP&&扩展KMP HDU2087 剪花布条
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和小 ...
- kuangbin专题十六 KMP&&扩展KMP HDU1711 Number Sequence
Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M ...
- MySQL数据查询结果导出生成文件
select url from news where url like "%美女%" into outfile "/导出的文件路径" : 在这里有个坑,对于 ...
- UVa 11292 勇者斗恶龙(The Dragon of Loowater)
首先先看一下这道题的英文原版... 好吧,没看懂... 大体意思就是: 有一条n个头的恶龙,现在有m个骑士可以雇佣去杀死他,一个能力值为x的勇士可以砍掉直径不超过x的头,而且需要支付x个金币.如何雇佣 ...
- Java基础笔记(十七)——继承(续)final
final 最终的 修饰类,此类不能被继承.final与访问修饰符public位置随意,在class前即可.public final class A{ } 修饰方法,此方法不能被子类重写,但可以被子 ...
- angularJs实现修改功能
思路: 对表单中内容进行修改,首先需要获取这个内容,再进行修改,再清空弹窗中的内容 //查询实体 $scope.findOne=function(id){ $http.get('../brand/fi ...
- 架构师 AI 技术
架构师是大忽悠吗?阿里技术大牛告诉你真相! - huangshulang1234的博客 - CSDN博客https://blog.csdn.net/huangshulang1234/article/d ...
- C3算法之我见
C3算法说到底就是merge算法,看了一些帖子,总结说得莫名其妙,大家也是抄来抄去,我试着用自己的话来把这个东西怎么操作的说清楚.当然了我也要抄一些别人的,但是我会 尽量把我认为别人没有讲清楚的那一部 ...
- Experimental Educational Round: VolBIT Formulas Blitz K
Description IT City company developing computer games decided to upgrade its way to reward its emplo ...
- linux学习五
一.系统服务管理 1.概念 服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程 序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是 ...