Update metadata value using server object model in sharepoint 2013

This blog will continue The steps of migrating metadata from SP site 2010 to SP site 2013, and the below is about Updating metadata value using server object model in sharepoint 2013

1. Update the metadata value of the item in list about sharepoint 2013.

2. Save the result into log.

/// <summary>
        /// Update sharepoint 2013 metada value via the param of the config xml file. 
        /// </summary>
        /// <param name="siteUrl2013"></param>
        /// <param name="siteUrl2010"></param>
        /// <param name="webUrl2013"></param>
        /// <param name="webUrl2010"></param>
        /// <param name="documentName2013"></param>
        /// <param name="documentName2010"></param>
        /// <param name="rootFolder2013"></param>
        /// <param name="rootFolder2010"></param>
        /// <param name="metadataServiceName"></param>
        /// <param name="groupName"></param>
        /// <param name="termSetName"></param>
        /// <param name="metadataName"></param>
        public void updateMetadata(string siteUrl2013, string siteUrl2010, string webUrl2013, string webUrl2010, string documentName2013, string documentName2010, string rootFolder2013, string rootFolder2010, string metadataServiceName, string groupName, string termSetName, string metadataName)
        {
            using (SPSite site = new SPSite(siteUrl2013 + webUrl2013))
            {
                MetadataXML xml = new MetadataXML();
                XmlDocument myXmlDoc = new XmlDocument();
                myXmlDoc.Load(xmlMetadata);
                Log log = new Log();
                log.beginMigrate(siteUrl2013 + webUrl2013 + documentName2013 );
                try
                {
                    string fileName;
                    string relativeUrl;
                    List<string> termName;
                    TaxonomySession session;
                    TermStore termStore;
                    Microsoft.SharePoint.Taxonomy.Group group;
                    TermSet termSet;
                    
                    Term term;
                    Term newterm;
                    TaxonomyField taxField;
                    TaxonomyFieldValueCollection taxCollection;
                    int count;

                    SPWeb web = site.OpenWeb();
                    web.AllowUnsafeUpdates = true;
                    SPList list = web.Lists[documentName2013];
                    SPListItemCollection listItems = list.Items;
                    web.AllowUnsafeUpdates = true;
                    ClientMetadataService service = new ClientMetadataService();

                    session = new TaxonomySession(site);
                    termStore = session.TermStores[metadataServiceName];
                    group = termStore.Groups[groupName];
                    termSet = group.TermSets[termSetName];
                    count = termSet.Terms.Count;

                    foreach (SPListItem item in listItems)
                    {
                        fileName = item["LinkFilename"].ToString();
                        if (webUrl2010 != "/")
                        {
                            relativeUrl = webUrl2010 + "/" + item.Url.Replace("/" + fileName, "").Replace(rootFolder2013, rootFolder2010);
                        }
                        else
                        {
                            relativeUrl = webUrl2010 + item.Url.Replace("/" + fileName, "").Replace(rootFolder2013, rootFolder2010);
                        }
                        taxField = item.Fields[metadataName] as TaxonomyField;
                        taxCollection = new TaxonomyFieldValueCollection(taxField);
                        termName = xml.getDocument(myXmlDoc, webUrl2010, documentName2010, metadataName, relativeUrl, fileName);

                        int flag = 0;
                        int flagTerm = 0;
                        if (termName.Count > 0)
                        {
                            if (termName[0] != "")
                            {
                                for (int i = 0; i < termName.Count; i++)
                                {
                                    int termsCount = termSet.Terms.Count;
                                    for (int num = 0; num < termsCount; num++)
                                    {
                                        TaxonomyFieldValue taxValue = new TaxonomyFieldValue(taxField);
                                        term = termSet.Terms[num];
                                        newterm = service.circleTerm(term, termName[i]);
                                        if (newterm != null)
                                        {
                                            flagTerm = 1;
                                            taxValue.TermGuid = newterm.Labels[0].Term.Id.ToString();
                                            taxValue.Label = newterm.Labels[0].Term.Name;
                                            if (taxField.AllowMultipleValues)
                                            {
                                                taxCollection.Add(taxValue);
                                            }
                                            else
                                            {
                                                taxField.SetFieldValue(item, taxValue);
                                                flag = 1;
                                            }
                                            break;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                flagTerm = 1;
                            }
                        }

                        if (flagTerm == 0 && termName.Count > 0)
                        {
                            string metadata = "";
                            for (int i = 0; i < termName.Count; i++)
                            {
                                metadata += metadata + termName[i].ToString() + ";";
                            }
                            log.errorNoMetadata(siteUrl2013 + webUrl2013 + item.Url, metadata);
                        }
                        else if (termName.Count == 0)
                        {
                            log.errorNofound(siteUrl2013 + webUrl2013 + item.Url);
                        }

                        if (taxField.AllowMultipleValues)
                        {
                            taxField.SetFieldValue(item, taxCollection);
                        }
                        else if (flag == 0)
                        {
                            TaxonomyFieldValue taxValue = new TaxonomyFieldValue(taxField);
                            taxField.SetFieldValue(item, taxValue);
                        }

                        item.SystemUpdate();
                    }
                    web.Update();
                }
                catch
                {
                    log.errorMigrate(siteUrl2013 + webUrl2013 +"/"+ documentName2013);
                }
                finally {
                    log.endMigrate(siteUrl2013 + webUrl2013 + "/" + documentName2013);
                }
            }
        }
    }


The code about logging result:

public void errorNofound(string url2013)
        {
            string words = "ERROR : Unable to find the item  ";
            lock (typeof(Log))
            {
                FileInfo finfo = new FileInfo(fname);
                using (FileStream fs = finfo.OpenWrite())
                {
                    StreamWriter SW = new StreamWriter(fs);
                    SW.BaseStream.Seek(0, SeekOrigin.End);
                    SW.WriteLine(words + "\"" + url2013 + "\"" +" in site 2010");
                    SW.Close();
                    errorNumber++;
                }
            }
        }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Failed to update metadata after 60000 ms" 是一个错误消息,通常在使用 Apache Kafka 进行数据传输时出现。这个错误表示 Kafka 客户端在指定的时间内无法更新元数据信息。 元数据是 Kafka 集群中关于主题、分区和副本等信息的描述。当 Kafka 客户端需要连接到集群并发送或接收消息时,它需要获取最新的元数据信息。如果在指定的时间内无法更新元数据,就会出现这个错误。 这个错误可能有以下几个原因: 1. 网络问题:客户端无法与 Kafka 集群建立连接,可能是由于网络故障、防火墙配置或者集群不可用导致的。 2. 集群问题:Kafka 集群可能正在进行重分区、副本分配或者其他维护操作,导致元数据更新失败。 3. 客户端配置问题:客户端的配置可能不正确,比如指定了错误的集群地址、端口或者其他参数。 解决这个问题的方法包括: 1. 检查网络连接:确保客户端能够正常连接到 Kafka 集群,并且网络稳定。 2. 检查集群状态:确认 Kafka 集群正常运行,并且没有正在进行的维护操作。 3. 检查客户端配置:仔细检查客户端的配置文件,确保配置正确。 4. 增加超时时间:可以尝试增加更新元数据的超时时间,以便给集群足够的时间来响应。 5. 调整 Kafka 集群的配置:如果问题持续存在,可能需要调整 Kafka 集群的配置,比如增加副本数、调整分区分配策略等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值