Obtener término de navegación para la página actual en CSOM (JavaScript)
-
10-12-2019 - |
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):
- Obtenga el término en la URL
window.location.pathname
de la página actual - Obtenga el almacén de términos predeterminado
- Obtener el grupo en el que se encuentra el término
- Obtener término Establecer el término en el que se encuentra
- Obtener plazo Acerca de (de /sobre/equipo)
- 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)?
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.