Configuración del valor de las palabras clave empresariales usando CSOM
Pregunta
He incluido la columna de palabras clave empresariales en mi contenido de contenido y lista e intento establecer el valor usando el CSOM administrado.Acabo de utilizar la columna predeterminada ya existente, por lo que el nombre de la columna es "Weykeyword" y el campo de la nota oculta para esa columna es "TaxKeywordtaxhtfield".
Intenté establecer el valor como este:
item["TaxKeywordTaxHTField"] = "-1;#Test|6138f1b1-b85a-4149-b06f-f79f6069a33d";
Esto funciona completamente bien para la mayoría de los tipos de archivos (ASPX, TXT, PDF) pero no funciona para todos los tipos de archivos de oficina (DOCX, XLSX, PPTX).No recibo ningún error cuando llamo al método EXECUTUSQUERY, pero el valor simplemente no se guarda.Cuando actualizo el valor en la interfaz de usuario, todo está funcionando bien.
¿Cómo puedo configurar el valor de las palabras clave empresariales programáticamente para documentos de oficina usando CSOM administrados?
Solución 2
Resolví el problema configurando las palabras clave de la siguiente manera:
Microsoft.SharePoint.Client.Field entKeywordField = list.Fields.GetByInternalNameOrTitle("Enterprise Keywords");
TaxonomyField entKeywordFieldTaxonomy = ctx.CastTo<TaxonomyField>(entKeywordField);
entKeywordFieldTaxonomy.SetFieldValueByValueCollection(item, new TaxonomyFieldValueCollection(ctx, "-1;#Application|f897952a-107a-4988-9913-6d4094318ddb;#-1;#form|9f03d594-a4ef-443b-963d-1d05c3c85bd8", entKeywordField));
Otros consejos
El funcionamiento de la configuración del valor del campo Enterprise Keywords
consiste en dos pasos:
- primero uno para resolver palabras clave en la aplicación de servicio de metadatos administrados
(MMS), esto es lo que
EnsureKeyword method
desde abajo ejemplo es destinado a - después de la palabra clave ha sido recuperada o creada si no existía, la
El valor del campo de la palabra clave empresarial se establece en
TaxonomyFieldValueCollection
El método KeywordsManager.SetTaxKeywordValue
demuestra cómo configurar las palabras clave de la empresa Valor de campo:
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);
ctx.Load(item,i=>i[TaxKeywordFieldName]);
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 = "|";
}
}
usage
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();
}
resultados
Para obtener más detalles, por favor, siga Gestión de palabras clave de empresa en Office 365 a través de CSOM POST.