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 >

执行效果如下 :

 

转载于:https://www.cnblogs.com/wsdj-ITtech/archive/2012/05/09/2405770.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值