Sharepoint學習筆記—ECMAScript對象模型系列-- 4、使用ECMA操作網站對象(website)


   有了上一篇的鋪墊 Sharepoint學習筆記—ECMAScript對象模型系列--1、ECMAScript對象模型的引入,我們接下來看看如何利用ECMA來操作Sharepoint網站。

   事實上在上一篇文章里我們已經在對網站進行操作了,我們提取了網站對象的Title與Description信息,並對網站的Title並進行了修改。
   我們知道,若要通過 ECMAScript(JavaScript、JScript)使用網站,應首先使用 ClientContext(serverRelativeUrl) 構造函數並傳遞 URL 或 URI 以返回特定請求上下文。使用 ClientContext  類的 web 屬性指定位於指定上下文 URL 處的網站對象的屬性。通過 load(clientObject) 方法加載網站對象,然后調用 executeQueryAsync(succeededCallback, failedCallback)  后,將會獲取對該網站的所有屬性的訪問權限。
   但由於Sharepoint網站對象有許多屬性,我們並不知道用戶確切需要哪些屬性,他們可能只需要其中的2、3個或幾個,而對此我們返回所有屬性就顯然會加重數據傳輸的負擔。因此,若要減少客戶端和服務器之間不必要的數據傳輸,我們只需要返回網站對象的指定屬性,而不是返回其所有屬性。在這種情況下,可將 LINQ 查詢或 lambda 表達式語法與 load(clientObject) 方法結合使用,以指定從服務器返回哪些屬性。
   一、 下面我們就使用Load方法,指定返回網站的Title與Created兩個屬性。
   繼續接着上文創建的項目進一步操作,在同一個Visual Web Part中,添加按鈕,並定義此按鈕的客戶端事件,如下 :  

< script  type ="text/javascript" >
    
// Retrive Website Properties
     var  siteUrl  =   ' / ' ;

    
function  retriveWebSiteProperties() {
        
var  clientContext  =   new  SP.ClientContext(siteUrl);
        
//  var clientContext= new SP.ClientContext.get_current();
         this .oWebsite  =  clientContext.get_web();

        clientContext.load(
this .oWebsite,  ' Title ' ' Created ' );  // Load the specific properties of website object 
        clientContext.executeQueryAsync(Function.createDelegate( this this .onQuerySucceededProperties),
                                        Function.createDelegate(
this this .onQueryFailedProperties));
    }

    
function  onQuerySucceededProperties(sender, args) {
        alert(
' Title:  '   +   this .oWebsite.get_title()  +   '  Created:  '   +   this .oWebsite.get_created());
        
//   alert('Title');
    }

    
function  onQueryFailedProperties(sender, args) {
        alert(
' Request failed.  '   +  args.get_message()  +   ' \n '   +  args.get_stackTrace());
        
//  alert('Failed');
    }

</ script >


    執行效果如下:

    二、此處,我們進一步看看如何使用ECMA來創建一個Website。

     還是在同一個項目中,創建按鈕及其客戶端事件。

< script  type ="text/javascript" >

    
var  currentcontext  =   null ;
    
var  currentweb  =   null ;

    
var  blogDescription  =   ' This site created from ECMA script ' ;
    
var  blogLanguage  =   1033 ;
    
var  blogTitle  =   ' ECMA Script created site ' ;
    
var  blogUrl  =   ' ECMAScriptSite ' ;
    
var  blogPermissions  =   true ;
    
var  webTemplate  =   ' STS#0 ' ;

    
function  CreateSiteByECMA() {
        currentcontext 
=   new  SP.ClientContext.get_current();
        currentweb 
=  currentcontext.get_web();

        
var  webCreateInfo  =   new  SP.WebCreationInformation();
        webCreateInfo.set_description(blogDescription);
        webCreateInfo.set_language(blogLanguage);
        webCreateInfo.set_title(blogTitle);
        webCreateInfo.set_url(blogUrl);
        webCreateInfo.set_useSamePermissionsAsParentSite(blogPermissions);
        webCreateInfo.set_webTemplate(webTemplate);

        
this .NewWebsite  =   this .currentweb.get_webs().add(webCreateInfo);

        currentcontext.load(
this .NewWebsite,  ' ServerRelativeUrl ' ' Created ' );


        currentcontext.executeQueryAsync(Function.createDelegate(
this this .ExecuteOnSuccessCreateSite),
                                         Function.createDelegate(
this this .ExecuteOnFailureCreateSite));

    }

    
function  ExecuteOnSuccessCreateSite(sender, args) {
        alert(
" Web site url :  "   +   this .NewWebsite.get_serverRelativeUrl());
    }

    
function  ExecuteOnFailureCreateSite(sender, args) {
        alert(
' Site cannot be created ' );
    } 

</ script >

 

 

   執行效果如下:

 

 

驗證網站是否創建成功:


 

  三、使用ECMA來遍歷指定Website下的Sub Websites

  直接上代碼

 

< script  type ="text/javascript" >

    
var  currentcontext  =   null ;
    
var  currentweb  =   null ;

    
function  EnumerateThroughSite() {
        currentcontext 
=   new  SP.ClientContext.get_current();

        currentweb 
=  currentcontext.get_web();

        
this .subsites  =  currentweb.get_webs();

        
// this.sitecoll = currentcontext.get_site(); //to get top level site - just for information 

        currentcontext.load(
this .subsites);

        currentcontext.executeQueryAsync(Function.createDelegate(
this this .ExecuteOnSuccessEnumerateThroughSite),
                                         Function.createDelegate(
this this .ExecuteOnFailureEnumerateThroughSite));

    }

    
function  ExecuteOnSuccessEnumerateThroughSite(sender, args) {
        
var  subsites  =   '' ;

        
var  groupEnumerator  =   this .subsites.getEnumerator();
        
while  (groupEnumerator.moveNext()) {
            
var  Site  =  groupEnumerator.get_current();
            subsites 
+=   ' \nID:  '   +  Site.get_id()  + ' \nTitle:  '   +  Site.get_title();

        }
        alert(subsites);
    }

    
function  ExecuteOnFailureEnumerateThroughSite(sender, args) {
        alert(
" Cannot enumerate " );
    } 
</ script >

執行效果如下 :

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM