Caml查询 - 按SharePoint 2013-CSOM排序

时间:2014-02-26 12:51:21

标签: sharepoint caml csom

我是caml查询的新手,并一直在努力解决这个问题。 我需要最后修改的列表项。只有一个项目。 这意味着它应该是'modified',而rowlimit应该是1。

但我的查询中只有rowlimit部分正在运行。不是订单部分。

这是我的查询:

        var camlQuery = new SP.CamlQuery();

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

我不知道我哪里出错了。 我甚至尝试在上述查询中删除Query标记。

查询正在运行,它只获得一条记录。订单不工作,我相信。

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

请帮帮我。

感谢。

4 个答案:

答案 0 :(得分:7)

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

该行:

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());
});

答案 1 :(得分:2)

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>

答案 2 :(得分:0)

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

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

Query子句用于过滤(Where子句)。

答案 3 :(得分:0)

这里有完整的示例,升序='True'或升序='False'区分大小写

<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>

Sharepoint tips

相关问题