我是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 子句)。