문제

홈 하위 사이트, 정보, 연락처와 같은 "주 사이트"(사이트 모음의 근원이 아님)에 하위 사이트가 있다고 가정 해보십시오."주요 사이트"는 실제로 다른 사이트의 언어 변형입니다.또 다른 단어에서는이 같은 구조를 가지고 있습니다

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

내가하고 싶은 것은 다음과 같은 것

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

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

편집 : 질문은 SharePoint 2013입니다.

도움이 되었습니까?

해결책

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top