Variations Extension
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Hola a tod@s, en esta entrada os vas a encontrar con una utilidad en forma de extensión que ofrece una serie de métodos en SharePoint on-premise desde el lado del servidor para poder desarrollar más fácilmente en esos tediosos portales web con múltiples idiomas.
Los objetivos de esta utilidad es ofrecer una serie de funciones para resolver ciertas incertidumbres a la hora de implementar controles dentro de un portal con múltiples idiomas como en los siguientes casos de ejemplo:
La necesidad de desarrollar un control, que muestre al usuario y permita acceder de una forma rápida al contenido en los otros idiomas que ofrece el portal web.
Saber si el sitio actual en el que se ejecuta el control personalizado se encuentra dentro de una variación de SharePoint.
Saber si la ejecución de un control personalizado se encuentra sobre la variación origen o algunos de sus variaciones destinos.
Cuando se ha navegado dentro de una variación, puede surgir la necesidad de acceder a sitio web de la raíz de esa variación para obtener información necesaria para el contenido actual.
Si el control personalizado, utiliza la cache de servidor (HttpContext) para optimizar sus procesos, esta extensión os puede servir para montar claves dinámicas por variación para identificar contenido en cache.
Informar que esta extensión no cubre los siguientes casos relacionados con las variaciones en SharePoint on-premise, pero os indico unas pautas que puede facilitar el desarrollo:
-
Si se desarrolla con el modelo de objeto cliente de SharePoint, no se va a disponer en ningún momento del objeto ‘Microsoft.SharePoint.Publishing.Variations.Current’, por estar fuera del contexto del servidor de SharePoint. Para saber información de las variables habría que realizar los siguientes pasos:
Acceder objeto web del sitio web de la raíz de la colección de sitios.
En el objeto web, buscar el valor de la propiedad _VarLabelsListId. Este valor es el identificador GUID de la lista donde está establecida la información de las variaciones definidas en el portal web.
Realizar una consulta Query sobre la lista con el identificador obtenido y se dispondrá del listado elementos de una lista con la información de las variables que ofrece el método GetVariations de la extensión.
Si el proceso está dentro del servidor de SharePoint on-premise, pero fuera del contexto como puede ser la ejecución de un jobs de SharePoint on-premise, si ya se dispone del mecanismo usando en el modelo cliente de SharePoint, reutilizarlo. Sino hay que hacer los mismos pasos que se han descrito para el modelo cliente de SharePoint, pero con el modelo servidor.
Para sacar las variantes de las paginas, hay que profundizar en el modelo de objeto cliente o servidor de SharePoint, ya que en la página Contenido y estructura del sitio del producto, activando la opción Mostrar recursos relacionados, se muestra las variaciones de una página.
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
namespace Microsoft.SharePoint.Publishing{
/// <summary>
/// Provide extensions to the class <see cref="Variations" />.
/// </summary>
public static class VariationsExtensions{
/// <summary>
/// Returns the object <see cref="VariationLabel" /> corresponding to the current variation.
/// </summary>
/// <param name="instance"> The instance of <see cref="Variations" />.</param>
/// <returns>
/// The object <see cref="VariationLabel" /> of the current variation; otherwise, <see langword="null" />.
/// </returns>
public static VariationLabel GetCurrentVariation(this Variations instance){
return instance.GetVariationForWeb(SPContext.Current.Web);
}
/// <summary>
/// Returns the <see cref="VariationLabel" /> object of the variation to which the specified <see cref="SPWeb" /> belongs.
/// </summary>
/// <param name="instance"> The instance of <see cref="Variations" />.</param>
/// <param name="web"> The object <see cref="SPWeb" /> for which the variation will be searched. </param>
/// <returns>
/// The <see cref="VariationLabel" /> object of the website; otherwise, <see langword="null" />.
/// </returns>
public static VariationLabel GetVariationForWeb(this Variations instance, SPWeb web){
return instance.UserAccessibleLabels.FirstOrDefault(label => web.Url.StartsWith(label.TopWebUrl, true, CultureInfo.CurrentCulture));
}
/// <summary>
/// Returns the object <see cref="VariationLabel" /> corresponding to the source variation.
/// </summary>
/// <param name="instance"> The instance of <see cref="Variations" />.</param>
/// <returns>
/// The <see cref="VariationLabel" /> object of the source variation; otherwise, <see langword="null" />.
/// </returns>
public static VariationLabel GetSourceVariation(this Variations instance){
return instance.UserAccessibleLabels.FirstOrDefault(label => label.IsSource);
}
/// <summary>
/// Returns a list of objects <see cref="VariationLabel" /> corresponding to the collection of sites
/// </summary>
/// <param name="instance"> The instance of <see cref="Variations" />.</param>
/// <returns>
/// List of objects <see cref="VariationLabel" /> of the site collection; otherwise, <see langword="null" />.
/// </returns>
public static List<VariationLabel> GetVariations(this Variations instance)
{
var variationsLabel = new List<VariationLabel>();
foreach (var theVariationLabel in Variations.Current.UserAccessibleLabels){
variationsLabel.Add(theVariationLabel);
}
return variationsLabel;
}
}
}
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones