Question

Disons que j'ai des sous-sites sur mon "site principal" (qui n'est pas la racine de la collection de sites), comme le sous-site à domicile, sur le contact.Le "site principal" est en réalité une variation de la langue d'un autre site.Dans d'autres mots, j'ai une structure comme celle-ci

 - 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"

Ce que j'aimerais faire, c'est quelque chose comme suit

var rootOfVarSPWeb = SP.ClientContext.get_current().get_web().get_rootOfVariation()

//get the list
//do other stuff in root of variation

Edit: question concerne SharePoint 2013.

Était-ce utile?

La solution

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

enter image description here

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top