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?

¿Fue útil?

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

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Para obtener más detalles, por favor, siga Gestión de palabras clave de empresa en Office 365 a través de CSOM POST.

Licenciado bajo: CC-BY-SA con atribución
scroll top