¿Cómo obtener la raíz de las variaciones del cliente OM (JS)?
-
10-12-2019 - |
Pregunta
Diga que tengo subsitios en mi "sitio principal" (que no es la raíz de la colección de sitios), como el subsanto del hogar, el contacto.El "sitio principal" es en realidad la variación del lenguaje de otro sitio.En otras palabras, tengo estructura como esta
- http://mysite -> this is root SPWeb
- http://mysite/de-de -> this is "root variation"
- http://mysite/de-de/Lists/myList -> list I'd like to get
- http://mysite/de-de/Home/History -> sub-site in de-de variation from where I'd like to get "myList"
Qué me gustaría hacer es algo como seguir
var rootOfVarSPWeb = SP.ClientContext.get_current().get_web().get_rootOfVariation()
//get the list
//do other stuff in root of variation
Editar: La pregunta es para SharePoint 2013.
Solución
It actually depends what version of SharePoint is used.
How to retrieve Variation Labels via CSOM?
Since variations labels are stored in a Hidden List (MOSS 2007, SPS 2010/2013) we could retrieve it via CSOM (ECMAScript) as demonstrated below:
function getVaritationLabels(OnSuccess,OnError){
var ctx = SP.ClientContext.get_current();
var rootWeb = ctx.get_site().get_rootWeb();
var webProperties = rootWeb.get_allProperties();
ctx.load(rootWeb);
ctx.load(webProperties);
ctx.executeQueryAsync(
function() {
var varLabelsListId = webProperties.get_item('_VarLabelsListId');
var labelsList = rootWeb.get_lists().getById(varLabelsListId);
var labelItems = labelsList.getItems(SP.CamlQuery.createAllItemsQuery());
ctx.load(labelItems);
ctx.executeQueryAsync(
function() {
var variationLabels = [];
var e = labelItems.getEnumerator();
while (e.moveNext()) {
var labelItem = e.get_current();
variationLabels.push({
'IsSource': labelItem.get_item('Is_x0020_Source'),
'Language': labelItem.get_item('Language'),
'Locale': labelItem.get_item('Locale'),
'Title': labelItem.get_item('Title'),
'TopWebUrl': labelItem.get_item('Top_x0020_Web_x0020_URL')
});
}
OnSuccess(variationLabels);
},
OnError
);
},
OnError
);
}
The function returns an array of Variation Label entries:
IsSource
- Determines whether the Variation Label is set as the source label
Language
- Returns the Language of the Variation Labe
Locale
- Returns the Locale of the Variation Label
Title
- Returns the title of the Variation Label, which is the unique string identifier of the label
TopWebUrl
- Returns the URL of the top Publishing Web of the variation hierarchy of this label.
Example: How to determine Variation Home?
Assume the following variation labels have been configured
where
en-us
Variation Label corresponds to Variation Home (Is Source
parameter is set to True
)
then the following function will return the Url of the variation hierarchy:
function getVariationLabelSourceUrl()
{
var sourceUrl = '';
getVaritationLabels(
function(variationLabels){
for(var j = 0; j < variationLabels.length;j++){
var variationLabel = variationLabels[j];
if(variationLabel.IsSource){
sourceUrl = variationLabel.TopWebUrl.get_url();
break;
}
}
console.log('Variation Label Source Url: ' + sourceUrl);
},
function(sender,args) {
console.log('An error occurred: ' + args.get_message());
}
);
}
P.S. The demonstrated code samples been tested with SharePoint 2013