sharepoint 2010 列表中托管元数据列赋值

在开发中一直都是从解决一个个问题使得code能力有所提升,最近在sharepoint的开发中遇到一个难题。简单描述下。

做了一个webpart,需要写入一个值到文档库的列,该列类型为托管元数据。当然,要写入的值是在术语集中已经存在的。Baidu,Goole了很多资料多没能解决我的问题,直到cnblog http://www.cnblogs.com/love007/archive/2012/12/06/2805381.html 才成功,非常感谢。我在他的方法上做了简化,目前解决了我的问题。

思路如下,

要想通过代码将术语写回到术语集,首先得构造一个该类型的值,然后在写回到托管元数据列。

  1. 定义元数据类

    

/// <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

以上关键代码通过调用后即可实现效果

原文地址:https://www.cnblogs.com/zchblog/p/3165061.html