Pregunta

Estoy intentando obtener las propiedades locales para el término de navegación que se está viendo actualmente.

Por ejemplo...Si navego hacia http://sp2013/about/team Necesito obtener las propiedades personalizadas locales para el plazo. Equipo.

Solución actual (problemas de rendimiento):

  1. Obtenga el término en la URL window.location.pathname de la página actual
  2. Obtenga el almacén de términos predeterminado
  3. Obtener el grupo en el que se encuentra el término
  4. Obtener término Establecer el término en el que se encuentra
  5. Obtener plazo Acerca de (de /sobre/equipo)
  6. Obtener plazo Equipo (de /about/team) y luego lea Propiedades personalizadas.

El rendimiento de esto es bastante malo porque se llaman muchos ejecutadosQueryAsync, ¡y cuanto más profunda sea la URL, más consultas habrá!

¿Otras posibles soluciones?

  • ¿Hay alguna manera de obtener simplemente el término de navegación que se está viendo en la página actual con una consulta?
  • ¿Hay alguna manera de buscar TODOS los términos en un término? Establecer un término de recuperación basado en la URL amigable (donde URL amigable = ventana.ubicación.nombre de ruta)?
¿Fue útil?

Solución 2

Resolvió el problema de rendimiento con la ayuda de Roberto así como también se le ocurrió una solución optimizada mediante el uso getTerms() para buscar en todo el almacén de términos el término requerido:

// Get SP Context
var context = SP.ClientContext.get_current();
// Get the default Term Store for context
var session = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
var termStore = session.getDefaultSiteCollectionTermStore();
// Set up Term Query for termStore.getTerms()
var termQuery = new SP.Taxonomy.LabelMatchInformation(context);
    // The language code identifier (LCID) of the Term.labels to be matched
    termQuery.set_lcid(1033);
    // Determines if only terms available for tagging are returned
    termQuery.set_trimUnavailable(false);
    // The Label of the Term to get
    termQuery.set_termLabel("My Term");
// Get Terms based on termQuery
var termsStoreTerms = termStore.getTerms(termQuery);
// Load em' and run execute query!
context.load(session);
context.load(termStore);
context.load(termsStoreTerms);
context.executeQueryAsync(
    function(){
        // Get all the terms based on search
        var termsEnum = termsStoreTerms.getEnumerator();

        // Loop through results
        while(termsEnum.moveNext()){
            // Current Item in Enumerator Loop
            var currentTerm = termsEnum.get_current();

            // Get Local Custom Properties
            var termLocalCustomProperties = currentTerm.get_localCustomProperties();
        }
    }, function(sender, args){
        // Failure getting Term
        var error = 'Failure getting Term: ' + args.get_message() + '\n' + args.get_stackTrace
        alert(error);
    });

Otros consejos

Podrías usar _spFriendlyUrlPageContextInfo.termId para obtener la información del término (GUID) de la página actual.

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