我正在尝试通过客户端对象模型。net托管代码在SharePoint在线网站的文档库中上传文档。但是文档库中的关键字列不会仅针对microsoft office文件进行更新。它不会抛出任何错误,代码工作正常,但关键字列没有更新。
我将以下值传递给关键字列:
listItem.File。listtitemallfields ["TaxKeyword"] = "21;# 5 |850EC37A-71D1-44DE-A175-AF51FBB5AE7E";
listItem.File。listtitemallfields ["TaxKeywordTaxHTField"] = "21;# 5 |850EC37A-71D1-44DE-A175-AF51FBB5AE7E";
ofile.ListItemAllFields.Update ();
clientContext.ExecuteQuery ();
帮助。谢谢,尼迪Mohan
由于Enterprise Keywords
是Microsoft.SharePoint.Client.Taxonomy.TaxonomyField,所以使用TaxonomyField.SetFieldValueByValueCollection
方法在SharePoint 2013 CSOM中设置分类字段值
如何使用SharePoint CSOM设置Enterprise Keywords
分类字段值
由于SharePoint 2013 CSOM支持Taxonomy API,下面的示例演示了如何设置Enterprise Keywords字段值:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Taxonomy;
namespace SharePoint.Client.Taxonomy
{
/// <summary>
/// Enterpise Keyword Manager
/// </summary>
public class KeywordsManager
{
/// <summary>
/// Set Enterprise Keyword Value
/// </summary>
/// <param name="item">List Item</param>
/// <param name="values">Keyword values</param>
public static void SetTaxKeywordValue(ListItem item,string[] values)
{
var ctx = item.Context;
var list = item.ParentList;
var field = list.Fields.GetByInternalNameOrTitle(TaxKeywordFieldName);
var taxKeywordField = ctx.CastTo<TaxonomyField>(field);
var keywords = values.Select(value => EnsureKeyword(taxKeywordField, value)).ToList();
taxKeywordField.SetFieldValueByValueCollection(item, new TaxonomyFieldValueCollection(ctx, GetTermsString(keywords), taxKeywordField));
}
/// <summary>
/// Ensure Keyword
/// </summary>
/// <param name="taxField"></param>
/// <param name="name"></param>
/// <returns></returns>
private static Term EnsureKeyword(TaxonomyField taxField, string name)
{
var ctx = taxField.Context;
var taxSession = TaxonomySession.GetTaxonomySession(ctx);
var termStore = taxSession.GetDefaultKeywordsTermStore();
var keywords = termStore.KeywordsTermSet.GetAllTerms();
var result = ctx.LoadQuery(keywords.Where(k => k.Name == name));
ctx.ExecuteQuery();
var keyword = result.FirstOrDefault();
if (keyword != null)
{
return keyword;
}
keyword = termStore.KeywordsTermSet.CreateTerm(name, DefaultLanguage, Guid.NewGuid());
ctx.Load(keyword);
ctx.ExecuteQuery();
return keyword;
}
/// <summary>
/// Retrieve formatted Term string
/// </summary>
/// <param name="term"></param>
/// <returns></returns>
private static string GetTermString(Term term)
{
return string.Format("-1;#{0}{1}{2}", term.Name, TaxonomyGuidLabelDelimiter,term.Id);
}
private static string GetTermsString(IEnumerable<Term> terms)
{
var termsString = terms.Select(GetTermString).ToList();
return string.Join(";#", termsString);
}
private const string TaxKeywordFieldName = "TaxKeyword";
private const int DefaultLanguage = 1033;
private const string TaxonomyGuidLabelDelimiter = "|";
}
}
使用using (var ctx = new ClientContext(webUri))
{
var list = ctx.Web.Lists.GetByTitle(listTitle);
var item = list.GetItemById(itemId);
KeywordsManager.SetTaxKeywordValue(item,new []{"2013","2010"});
item.Update();
ctx.ExecuteQuery();
}
有关更多详细信息,请通过CSOM帖子查看Office 365中的企业关键字管理。