Caml Query- Order By- SharePoint 2013-CSOM



我是caml查询的新手,一直在为此而苦苦挣扎。我需要上次修改的列表项。只有一个项目。这意味着它应该是按"修改"排序的,行限制应该是 1。

但是我的查询只有行限制部分有效。不是按顺序部分。

这是我的查询:

        var camlQuery = new SP.CamlQuery();
        camlQuery.set_viewXml('<View><Query><OrderBy><FieldRef Name='Modified' Ascending="FALSE"/></OrderBy><RowLimit>1</RowLimit></Query></View>";')

我不知道我哪里出错了。我什至尝试删除上述查询中的查询标签。

查询正在工作,它只得到一条记录。 我相信 orderby 不起作用。

这是在jQuery中。我已经编写了一个函数,并正在我的 Ready 函数中调用该函数。

请帮助我。

谢谢。

实际上,在您的示例中,查询返回所有结果,因为查询包含一些错误。

该行:

camlQuery.set_viewXml('<View><Query><OrderBy><FieldRef Name='Modified' Ascending="FALSE"/></OrderBy><RowLimit>1</RowLimit></Query></View>";')

应替换为:

camlQuery.set_viewXml('<View><Query><OrderBy><FieldRef Name="Modified" Ascending="FALSE"/></OrderBy></Query><RowLimit>1</RowLimit></View>');

示例:如何获取最后一项

function getLastItem(listTitle,Success,Error){
    var ctx = SP.ClientContext.get_current();
    var web = ctx.get_web();
    var list = web.get_lists().getByTitle(listTitle);
    var query = new SP.CamlQuery();
    query.set_viewXml('<View><Query><OrderBy><FieldRef Name="Modified" Ascending="FALSE"/></OrderBy></Query><RowLimit>1</RowLimit></View>');
    var items = list.getItems(query);
    ctx.load(items);
    ctx.executeQueryAsync(
      function() {
        if(items.get_count() > 0) { 
           var item = items.getItemAtIndex(0); 
           Success(item);
        }
        else
        {
            Success(null);
        }
      },
      Error
    );
}

getLastItem('Contacts',function(item){
   console.log(item.get_item('Modified'));
},function(sender,args){
    console.log(args.get_message());
});

Rowlimit 必须放在查询之外。实际上我正在使用SharepointPlus(用于处理Sharepoint的JavaScript API),它会自动为我创建查询:-)

因此,发送到服务器的 XML 代码应如下所示:

<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
  <listName>Your list</listName>
  <viewName></viewName>
  <query>
    <Query>
      <OrderBy>
        <FieldRef Name="Status" Ascending="false"></FieldRef>
      </OrderBy>
    </Query>
  </query>
  <rowLimit>1</rowLimit>
  <viewFields>
    <ViewFields Properties="True">
      <FieldRef Name="ID"></FieldRef>
    </ViewFields>
  </viewFields>
  <queryOptions>
    <QueryOptions>
      <DateInUtc>False</DateInUtc>
      <Paging ListItemCollectionPositionNext=""></Paging>
      <IncludeAttachmentUrls>True</IncludeAttachmentUrls>
      <IncludeMandatoryColumns>False</IncludeMandatoryColumns>
      <ExpandUserField>False</ExpandUserField>
      <ViewAttributes Scope="Recursive"></ViewAttributes>
    </QueryOptions>
  </queryOptions>
</GetListItems>
这里有

一个完整的示例,升序='真'或升序='假' 区分大小写

<View>
<Query>
    <Where>
        <Eq>
            <FieldRef Name='OrderNum' />
            <Value Type='Number'>90696</Value>
        </Eq>
    </Where>
    <OrderBy>
        <FieldRef Name='Modified' Ascending='False'/>
    </OrderBy>
</Query>
<ViewFields>
    <FieldRef Name='Title' />
    <FieldRef Name='ID' />
</ViewFields>
<RowLimit>10</RowLimit>

共享点提示

AymKdn 是正确的,OrderBy 子句应该在 Caml 中的 Query 子句之外。下面是一个示例:

caml.set_viewXml('<View><OrderBy><FieldRef Name="Modified" Ascending="False"/></OrderBy><RowLimit>1</RowLimit></View>');

查询子句用于筛选(Where 子句)。

相关内容

  • 没有找到相关文章

最新更新