2

私はcamlクエリが初めてで、これに苦労しています。最後に変更されたリスト アイテムが必要です。1つのアイテムのみ。つまり、orderby 'modified' で、rowlimit を 1 にする必要があります。

しかし、クエリの行制限部分のみが機能しています。orderby 部分ではありません。

これは私のクエリです:

        var camlQuery = new SP.CamlQuery();

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

どこが間違っているのかわかりません。上記のクエリでクエリタグを削除しようとしました。

クエリは機能しており、1 つのレコードしか取得していません。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

行制限はクエリの外に置く必要があります。実際、私は自動的にクエリを作成する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 に答える