2

我是 caml 查询的新手,一直在为此苦苦挣扎。我需要最后修改的列表项。只有一项。这意味着它应该是 orderby 'modified' 并且 rowlimit 应该是 1。

但我的查询中只有 rowlimit 部分有效。不是 orderby 部分。

这是我的查询:

        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 函数中调用了该函数。

请帮我。

谢谢。

4

4 回答 4

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());
});
于 2014-02-27T09:26:37.107 回答
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>
于 2014-02-27T08:37:25.733 回答
0

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

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

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

于 2014-12-12T03:43:59.433 回答
0

Here there is a full sample, Ascending='True' or Ascending='False' it's case sensitive

<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

于 2020-09-16T06:22:12.063 回答