2013-04-19 26 views
6

私はRest Callから結果をフィルタリングしようとしています。私は文字列で始まるか、どこかで文字列を持っているアイテムのタイトルとIDを取得しようとしている私の連絡先リストでODataサブストリングまたはstartswithすべてのアイテムを返す

$.ajax({ 
    type: "GET", 
    headers: { 
     "Accept": "application/json;odata=verbose" 
    }, 
    dataType: "JSON", 
    url: _spPageContextInfo.webServerRelativeUrl + "/_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$startswith('Title','" + request.term + "') eq true", 
    success: function (data) { 
    }, 
    error: function (ex) { 
    } 
}); 

、ここでは例えば、それが誰かの名前です。

私もsubstringofでそれを試してみました:

"/_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$substringof(" + request.term + ",'Title') eq true" 

も同じ結果を実現しています。

リストからすべてのリストアイテムを取得し、フィルタリングは適用されません。 私はそこに与えられたスキーマと同じように、ここでProgramming using the SharePoint 2013 REST service を見た後、私はURLがOKに見えると思いますが、それはそう思わない:)

編集休憩のためのURLを構築する:

はのよう$filterを適用しますODataのウリ表記は私に次のエラーを与える:

{"error":{"code":"-1, Microsoft.SharePoint.SPException","message":{"lang":"en-US","value":"The query is not valid."}}} 

は、次のクエリ文字列でそれを試してみました:

_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$filter=substringof(m,'Title') eq true 

_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$filter=substringof('m','Title') eq true 

_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$filter=substringof('m',Title) eq true 

答えて

10

私は、 "eq true"を削除したときにsubstringofが正しい結果を返すようにフィルタを取得できました。

クエリ文字列の1つを使用して、それは次のように動作するはずです:

_api/lists/getByTitle('Contacts')/items?$select=Title,Id&$filter=substringof('m',Title) 

私は、任意の他の機能をチェックしていないが、少なくとも、同じことがSTARTSWITH機能で発生します。この質問を見ている人のために

0

正しいuri規則についてはhttp://www.odata.org/documentation/odata-v2-documentation/uri-conventions/を確認してください。

"/ _API /リスト/ getByTitle( 'コンタクト')/アイテム?$ =タイトルを選択し、Idを& $フィルタ= substringofであるべき(" + request.term + " 'タイトル')真eqで"

だから$フィルタが

+0

私の編集をご覧ください。 $フィルタを適用すると、クエリが正しい形式でないというエラーが表示されます – Mark

+0

$ selectの組み合わせ/順序が原因である可能性があります。 http://sharepoint.mindsharpblogs.com/NancyB/Lists/Posts/Post.aspx?List=b6efd474-248a-4b16-ab88-afdb6fa31b65&ID=25。 フィルタだけで試してみませんか? – Rolfvm

+0

同じエラーが返されているフィルタでのみ試してみました。 Theresはおそらく何かが欠けているが、私はそれを得ていない。私が規則を見ているときには、それはokでも見えます – Mark

0

を含めて、私は自分のエンドポイントであなたのクエリURIを試してみましたが、いくつかの変更を適用: - ストリングの2番目のパラメータは文字列であってはならないので、私はapostropesに

を削除しましたこの後、私は結果を得ます:

http://jaydata.org/examples/Northwind.svc/Products?$ = PRODUCT_ID、PRODUCT_NAME & $フィルタ= substringof( 'CH'、PRODUCT_NAME)を選択

私のエンドポイントは、標準のWCFデータサービスで、フィルターが働いています。

URIを変更してもすべてのレコードが返される場合、これはSherePointのトリックだと思います。フィルターに「zzz」やランダムな文字列を置くとどうなりますか?

+0

その文字列で再度テストされましたが、「クエリは有効ではありません」という同じエラーだけを返しています。 $ filterタグを使用しているとき – Mark

6

、私は

/_api/web/lists/GetByTitle('Applications')/items?$filter=startswith(Title,'1AAJ') 

が私のために働いていることを報告することができます。

-1

また、containsメソッドが機能し、互換性が向上しました。構文は次のとおりです。

api/People?$filter=contains(LastName,%27Smith%27)&$select=LastName,FirstName 
+0

には少なくともSharepoint 2013ではparam doesnt workが含まれています – Alberto

+0

containsパラメータはhttp://www.odata.org/getting-started/basic-tutorial/で参照されているように間違いなく機能します。これは、より簡単なフィルタ部分一致の1つです。私はSharepoint 2013を持っていないので、私はそれをテストすることはできませんが、現代的で標準的なODataの実装を使用している人にとっては役に立ちます。 –

+1

申し訳ありませんが私のせいで、トピックはSP 2013に関連していると思っていました。私は自分のdownvoteを削除できるので、あなたの答えを編集できますか?ありがとう – Alberto

関連する問題