Como obter raiz das variações pelo cliente OM (JS)?
-
10-12-2019 - |
Pergunta
Vamos dizer que eu tenho sub-sites em meu "site principal" (o que não é raiz do conjunto de sites), como a Casa de sub-site, Sobre, entre em Contato.O "site principal" é, na verdade, a linguagem variação de outro site.Em outra palavras, eu tenho estrutura 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"
O que eu gostaria de fazer é algo como o seguinte
var rootOfVarSPWeb = SP.ClientContext.get_current().get_web().get_rootOfVariation()
//get the list
//do other stuff in root of variation
EDITAR:A pergunta é para o SharePoint 2013.
Solução
Ele, na verdade, depende de qual versão do SharePoint é usado.
Como recuperar Rótulos de Variação através de CSOM?
Desde variações rótulos são armazenados em uma Lista Oculta (MOSS 2007, SPS 2010/2013) podemos recuperá-lo através de CSOM (ECMAScript), como demonstrado abaixo:
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
);
}
A função retorna uma matriz de Rótulo de Variação de entradas:
IsSource
- Determina se o Rótulo de Variação é definida como a fonte do rótulo
Language
- Retorna a Linguagem da Variação Labe
Locale
- Retorna a Localidade do Rótulo de Variação
Title
- Retorna o título do Rótulo de Variação, que é o único identificador de seqüência de caracteres da etiqueta
TopWebUrl
- Retorna a URL do topo de Publicação na Web da hierarquia de variação deste rótulo.
Exemplo:Como determinar a Variação de Casa?
Suponha os seguintes rótulos de variação tiverem sido configuradas
onde
en-us
Rótulo de variação corresponde a Variação Casa (Is Source
parâmetro é definido para True
)
em seguida, a seguinte função irá retornar o Url da hierarquia de variação:
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.O demonstrado exemplos de código foi testado com o SharePoint 2013