设为首页 收藏本站
查看: 832|回复: 0

[经验分享] Sharepoint学习笔记—ECMAScript对象模型系列-- 4、使用ECMA操作网站对象(website)

[复制链接]

尚未签到

发表于 2015-9-24 10:58:02 | 显示全部楼层 |阅读模式
  有了上一篇的铺垫 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>  
    执行效果如下:
DSC0000.jpg
  二、此处,我们进一步看看如何使用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>  
  
  执行效果如下:
DSC0001.jpg
  
  验证网站是否创建成功:
  
DSC0002.jpg
  
   三、使用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>  执行效果如下 :
DSC0003.jpg
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118125-1-1.html 上篇帖子: SharePoint 2013 禁用搜索服务 下篇帖子: 深入浅出SharePoint—使用回收站
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表