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

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

[复制链接]

尚未签到

发表于 2015-9-25 12:17:03 | 显示全部楼层 |阅读模式
  前面我们使用ECMCA script对象模型操作了Sharepoint 网站对象,这里我们来看看如何操作网站上的列表(List),操作列表List的方式与访问网站对象类似,首先使用 ClientContext构造函数并传递 URL 或 URI 以返回特定的请求上下文。然后,可以使用 Web  类的 lists  属性获取网站中列表的集合。
  一、创建一个List  


<script type="text/javascript">
    var currentcontext = null;
    var currentweb = null;
    function CreateList() {
        currentcontext = new SP.ClientContext.get_current();
        currentweb = currentcontext.get_web();

        var ListInfo = new SP.ListCreationInformation();
        var ItemInfo = new SP.ListItemCreationInformation();

        ListInfo.set_title('List Created From ECMA Script');
        ListInfo.set_templateType(SP.ListTemplateType.genericList);
        this.createdList = currentweb.get_lists().add(ListInfo);
        currentcontext.load(createdList, 'Title', 'Id');

        currentcontext.executeQueryAsync(Function.createDelegate(this, this.ExecuteOnSuccessCreateList),
                                         Function.createDelegate(this, this.ExecuteOnFailureCreateList));
    }

    function ExecuteOnSuccessCreateList(sender, args) {
        alert('list title:' + createdList.get_title() + '\n ID' + createdList.get_id());
    }

    function ExecuteOnFailureCreateList(sender, args) {
        alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());
    }

</script>  
DSC0000.jpg   
  二、检索网站中所有列表的全部属性
  若要返回网站的所有列表,可通过 load(clientObject) 方法加载列表集合,然后调用 executeQueryAsync(succeededCallback, failedCallback) 。以下示例显示网站的 URL 以及创建列表的日期和时间。


<script type="text/javascript">

    var siteUrl = '/';
    function retrieveAllListProperties() {
        var clientContext = new SP.ClientContext(siteUrl);
        var oWebsite = clientContext.get_web();
        this.collList = oWebsite.get_lists();

        clientContext.load(collList);

        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededretrieveAllListProperties),
                                        Function.createDelegate(this, this.onQueryFailedretrieveAllListProperties));
    }

    function onQuerySucceededretrieveAllListProperties() {

        var listInfo = '';

        var listEnumerator = collList.getEnumerator();

        while (listEnumerator.moveNext()) {
            var oList = listEnumerator.get_current();
            listInfo += 'Title: ' + oList.get_title() + ' Created: ' + oList.get_created().toString() + '\n';
        }
        alert(listInfo);
    }

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

</script> DSC0001.jpg
  
  三、检索列表的指定属性
  上面的示例返回网站中列表的所有属性。若要减少客户端和服务器之间不必要的数据传输,可以使用 LINQ 查询表达式指定要返回的属性。在 JavaScript 中,可以指定 Include 作为传递给 load(clientObject) 方法的查询字符串的一部分,以便指定要返回的属性。下面的示例使用该方法只返回集合中每个列表的标题和 ID ,由于在Include中只指定了Title与ID,如果尝试显示诸如ParentWebUrl 等内容,您将会收到 PropertyOrFieldNotInitializedException异常。


<script type="text/javascript">
    var siteUrlretrieveSpecificListProperties = '/';
    function retrieveSpecificListProperties() {

        var clientContext = new SP.ClientContext(siteUrlretrieveSpecificListProperties);
        var oWebsite = clientContext.get_web();
        this.collList = oWebsite.get_lists();

        clientContext.load(collList, 'Include(Title, Id)');

        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededretrieveSpecificListProperties),
                                        Function.createDelegate(this, this.onQueryFailedretrieveSpecificListProperties));
    }
    function onQuerySucceededretrieveSpecificListProperties() {

        var listInfo = '';

        var listEnumerator = collList.getEnumerator();

        while (listEnumerator.moveNext()) {
            var oList = listEnumerator.get_current();
            listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString() + '\n';
        }
        alert(listInfo);
    }

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

</script> DSC0002.jpg
  
  
  四、在集合中存储检索到的列表
  我们还可以使用 loadQuery(clientObjectCollection, exp)方法而不是像上面使用的load(clientObject)方法。loadQuery方法用来在另一集合中存储返回值,而上面使用的Load方法则是将返回值存储在 lists属性中。但是LoadQuery方法不支持托管对象模型使用的 LINQ 方法和操作。


<script type="text/javascript">
    var siteUrlToCollection = '/';
    function retrieveSpecificListPropertiesToCollection() {

        var clientContext = new SP.ClientContext(siteUrlToCollection);
        var oWebsite = clientContext.get_web();
        var collList = oWebsite.get_lists();

        this.listInfoCollection = clientContext.loadQuery(collList, 'Include(Title, Id)');

        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededretrieveSpecificListPropertiesToCollection), Function.createDelegate(this, this.onQueryFailedretrieveSpecificListPropertiesToCollection));
    }

    function onQuerySucceededretrieveSpecificListPropertiesToCollection() {

        var listInfo = '';

        for (var i = 0; i < this.listInfoCollection.length; i++) {
            var oList = this.listInfoCollection;
            listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString();
        }
        alert(listInfo.toString());
    }

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

</script> DSC0003.jpg
  
  
  
  五、检索网站中的列表字段
  我们可以将 Include 语句嵌套在 JavaScript 查询中,以返回列表及其字段的元数据。该示例返回网站中所有列表的所有字段,并显示其内部名称包含字符串&#8220;name&#8221;的所有字段的标题和内部名称。


<script type="text/javascript">

    var siteUrlListsAllFields = '/';

    function retrieveAllListsAllFields() {
        var clientContext = new SP.ClientContext(siteUrlListsAllFields);
        var oWebsite = clientContext.get_web();
        var rootWebsite = clientContext.get_site().get_rootWeb();
        var collList = oWebsite.get_lists();

        this.listInfoArray = clientContext.loadQuery(collList,
        'Include(Title,Fields.Include(Title,InternalName))');

        clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededretrieveAllListsAllFields),
        Function.createDelegate(this, this._onQueryFailedretrieveAllListsAllFields));
    }

    function onQuerySucceededretrieveAllListsAllFields() {

        var listInfo = '';
        alert("OK");
        for (var i = 0; i < this.listInfoArray.length; i++) {

            var oList = this.listInfoArray;
            var collField = oList.get_fields();

            var fieldEnumerator = collField.getEnumerator();

            while (fieldEnumerator.moveNext()) {
                var oField = fieldEnumerator.get_current();
                var regEx = new RegExp('name', 'ig');

                if (regEx.test(oField.get_internalName())) {
                    listInfo += '\nList: ' + oList.get_title() +
                    '\n\tField Title: ' + oField.get_title() +
                    '\n\tField Name: ' + oField.get_internalName();
                }
            }
        }
        alert(listInfo);
    }

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

</script> DSC0004.jpg
  
  
  五、检索列表的ContentType
  我们可以使用如下代码来获取列表List的ContentTypes


<script language="ecmascript" type="text/ecmascript">
        var contentTypeCollection;
        var listCollection;
        var list;
        function getListContentTypes() {
            var clientContext = new SP.ClientContext.get_current();
            if (clientContext != undefined && clientContext != null) {
                var web = clientContext.get_web();
                this.listCollection = web.get_lists();
                this.list = listCollection.getByTitle("MyTestList");
                this.contentTypeCollection = list.get_contentTypes();
                clientContext.load(this.contentTypeCollection);
                clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededListContentTypes), Function.createDelegate(this, this.onQueryFailedListContentTypes));
            }
        }
        function onQuerySucceededListContentTypes() {
            var contentType = 'List Content Types:\n '
            var contentTypeEnumerator = this.contentTypeCollection.getEnumerator();

            while (contentTypeEnumerator.moveNext()) {
                var content = contentTypeEnumerator.get_current();
                contentType += content.get_name() + '\n';
            }
            alert(contentType);
        }

        function onQueryFailedListContentTypes(sender, args) {
            alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
</script>  

运维网声明 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-118682-1-1.html 上篇帖子: Microsoft Office SharePoint Server 2007案例实战开发 一书出版 下篇帖子: SharePoint开发中对ListViewWebPart的几个操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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