使用 Javascript 从 Sharepoint 列表的列表视图中检索项目

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/28764636/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 02:21:52  来源:igfitidea点击:

Retrieve Items from a List View of a Sharepoint List using Javascript

javascriptsharepoint-2013sharepoint-designer

提问by Pranav Bilurkar

This is my code:\

这是我的代码:\

Here pranav_listis list name and Mainis view of that list.

pranav_list是列表名称,Main是该列表的视图。

<script type="text/javascript">
    function retrieveListViewItems(){
    alert('start');
    var cc = SP.ClientContext.get_current();
    var alllist = cc.get_web().get_lists().getByTitle('pranav_list');
    var view = alllist.get_views().getByTitle('Main');
    var caml = new SP.CamlQuery();
    caml.set_viewXml('<View><Query><Where><Leq>' + 
                '<FieldRef Name=\'ID\'/><Value Type=\'Number\'>100</Value>' + 
                '</Leq></Where></Query><RowLimit>8</RowLimit></View>'); 

    this.list = view.getItems(caml);
    cc.load(list);
   cc.executeQueryAsync(Function.createDelegate(this,this.QuerySucceeded5),Function.createDelegate(this,this.onQueryFailed));
    }
    function QuerySucceeded5(){
    var listiteminfo='';

    var listItemEnumerator = list.getEnumerator();
    while(listItemEnumerator.moveNext())
    {
      var listitem = listItemEnumerator.get_current();

     listiteminfo += '\nID:'+ listitem.get_id() +
                      '\nFirstName:' + listitem.get_item('Title') +
                      '\nLastName:' + listitem.get_item('LN') +
                      '\nAge:' + listitem.get_item('Age') +
                      '\n City:' + listitem.get_item('City');

    // alert(listiteminfo.toString());       
    }
    alert(listiteminfo.toString());
            }
    function onQueryFailed(){
    alert("Failed");
    }
    </script>

Help.!!

帮助。!!

回答by Vadim Gremyachev

Since JSOM API does not support to retrieve list items from a View you could consider the following approach:

由于 JSOM API 不支持从视图中检索列表项,您可以考虑以下方法:

  • retrieve CAML query for a View
  • provide that query to SP.List.getItems()method
  • 检索视图的 CAML 查询
  • 将该查询提供给SP.List.getItems()方法

Example

例子

function getItemsFromView(listTitle, viewTitle,success,error)
{
    var ctx = SP.ClientContext.get_current();
    var list = ctx.get_web().get_lists().getByTitle(listTitle);
    var view = list.get_views().getByTitle(viewTitle);
    ctx.load(view,'ViewQuery');
    ctx.executeQueryAsync(
        function() {
            var viewQry = "<View><Query>" + view.get_viewQuery() + "</Query></View>";
            getItems(listTitle,viewQry,success,error);
        },
        error);
}

function getItems(listTitle, queryText,success,error) 
{
    var ctx = SP.ClientContext.get_current();
    var list = ctx.get_web().get_lists().getByTitle(listTitle);
    var query = new SP.CamlQuery();
    query.set_viewXml(queryText);
    var items = list.getItems(query);
    ctx.load(items);
    ctx.executeQueryAsync(
        function() {
            success(items);
        },
        error
   );
}

Usage

用法

The following example demonstrates how to retrieve List Items from All Tasksview in Taskslist:

以下示例演示了如何从列表中的All Tasks视图中检索列表项Tasks

getItemsFromView("Tasks", "All Tasks",
 function(items){
    for(var i = 0; i < items.get_count(); i++){
        var item = items.get_item(i);
        console.log(item.get_item('Title'));
    }
 },
 function(sender,args){ 
    console.log(args.get_message())
 });

回答by King Holly

This might help some people here. The code did not work for me until I added the line to check that sp.js was loaded.

这可能会帮助这里的一些人。在我添加了检查 sp.js 是否已加载的行之前,该代码对我不起作用。

SP.SOD.executeFunc('sp.js', 'SP.ClientContext', sharePointReady);

function sharePointReady(){
   //Code goes here
}

Also note that I used the context of a site other than the current site. See below for my whole solution. Thanks Vadim!!! A real life saver. Other sample code and documentation code did not work for me.

另请注意,我使用了当前站点以外的站点的上下文。请参阅下面的我的整个解决方案。谢谢瓦迪姆!!!真正的救星。其他示例代码和文档代码对我不起作用。

<script type="text/javascript">

$(document).ready(function(){
    //Make sure the necessary SharePoint script file 'sp.js' is loaded before your code runs
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', sharePointReady);

    function sharePointReady(){

        getItemsFromView("My List", "All Items",
         function(items){
             for(var i = 0; i < items.get_count(); i++){
                 var item = items.get_item(i);
                 console.log(item.get_item('Title'));
             }
         },
         function(sender,args){ 
             console.log(args.get_message())
         });
    }
}); //End Document.ready

function getItemsFromView(listTitle, viewTitle,success,error)
{
    var ctx = new SP.ClientContext('https://mywebsite.name/site/subsite');
    var list = ctx.get_web().get_lists().getByTitle(listTitle);
    var view = list.get_views().getByTitle(viewTitle);
    ctx.load(view,'ViewQuery');
    ctx.executeQueryAsync(
        function() {
            var viewQry = "<View><Query>" + view.get_viewQuery() + "</Query></View>";
            getItems(listTitle,viewQry,success,error);
        },
        error);
}

function getItems(listTitle, queryText,success,error) 
{
    var ctx = new SP.ClientContext('https://mywebsite.name/site/subsite'');
    var list = ctx.get_web().get_lists().getByTitle(listTitle);
    var query = new SP.CamlQuery();
    query.set_viewXml(queryText);
    var items = list.getItems(query);
    ctx.load(items);
    ctx.executeQueryAsync(
        function() {
            success(items);
        },
        error
   );
}
</script>