在开发中一直都是从解决一个个问题使得code能力有所提升,最近在sharepoint的开发中遇到一个难题。简单描述下。
做了一个webpart,需要写入一个值到文档库的列,该列类型为托管元数据。当然,要写入的值是在术语集中已经存在的。Baidu,Goole了很多资料多没能解决我的问题,直到cnblog http://www.cnblogs.com/love007/archive/2012/12/06/2805381.html 才成功,非常感谢。我在他的方法上做了简化,目前解决了我的问题。
思路如下,
要想通过代码将术语写回到术语集,首先得构造一个该类型的值,然后在写回到托管元数据列。
- 定义元数据类
/// <summary> /// 托管元数据 /// </summary> public class SPTaxonomyEntity { /// <summary> /// 托管元数据的guid /// </summary> public string Guid { get; set; } /// <summary> /// 托管元数据的名称 /// </summary> public string Name { get; set; } }
2. 构建值并赋值
#region//给托管元数据类型赋值 /// <summary> /// 给托管元数据类型赋值 /// </summary> /// <param name="site">当前网站集</param> /// <param name="list">当前列表</param> /// <param name="listItem">当前列表项</param> /// <param name="fieldDisplayName">当前栏目显示名称</param> /// <param name="taxName">节点元数据的名称</param> /// <param name="guid">所选元数据的GUID</param> private static void SetTaxonomyValue(SPSite site, SPList list, SPListItem listItem, string fieldDisplayName, string taxName,string guid) { try { //得到值 SPTaxonomyEntity entity = new SPTaxonomyEntity(); entity.Guid = guid; entity.Name = 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) { VisualWebPartUploadUserControl.WriteMessageToText(DateTime.Now + "给托管元数据类型栏目[" + fieldDisplayName + "]赋值错误:" + ex.Message); } } #endregion
以上关键代码通过调用后即可实现效果