2013-04-19 16 views
6

Sto provando a filtrare i miei risultati da un Rest Call.Sottostringa OData di o startswith restituisce tutti gli articoli

$.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) { 
    } 
}); 

nella mia lista di contatti che sto cercando di recuperare il titolo e l'Es articoli che iniziano con una stringa o che contengono la stringa da qualche parte in esso, qui ad esempio è il nome di qualcuno.

Ho anche provato con substringof:

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

che offre anche lo stesso risultato.

Mi fornisce tutte le voci dell'elenco dall'elenco e non viene applicato alcun filtro. costruisco l'URL per il resto dopo aver guardato qui Programming using the SharePoint 2013 REST service Come lo schema dato lì penso che l'URL sembra ok, ma non sembra così :)

Edit:

Applicando la $filter come nel OData Uri Convenzioni mi dà il seguente errore:

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

provato con le seguenti stringhe di query:

_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 

risposta

10

Sono riuscito a ottenere il filtro con substring di restituire i risultati corretti quando ho rimosso il "eq true".

utilizzando una delle tue stringhe di query, dovrebbe funzionare in questo modo:

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

Non ho controllato altre funzioni, ma almeno, lo stesso accade con la funzione startswith.

0

Controllare http://www.odata.org/documentation/odata-v2-documentation/uri-conventions/ per la convenzione uri corretta.

Dovrebbe essere "/ _api/liste/getByTitle ('Contatti')/articoli? $ = Selezionare Titolo, Id & $ filter = substringof (" + request.term + " 'Titolo') eq vera"

quindi, con il filtro $ incluso

+0

vedere la mia modifica. Quando applico il filtro $ mi dà un errore che la query non è in un formato corretto – Mark

+0

Forse è a causa della combinazione/ordine della selezione $, sembra che dovrebbe funzionare. http://sharepoint.mindsharpblogs.com/NancyB/Lists/Posts/Post.aspx?List=b6efd474-248a-4b16-ab88-afdb6fa31b65&ID=25. Puoi provare solo con il filtro? – Rolfvm

+0

Provato solo con il filtro, viene restituito lo stesso errore. C'è probabilmente qualcosa che manca ma non capisco. Quando guardo le convenzioni sembra ok – Mark

0

ho provato la query URI sul mio punto finale e applicato alcune modifiche: - il secondo parametro della stringa non deve essere una stringa, quindi ho rimosso l'apostropes

Dopo questo ottengo i risultati:

http://jaydata.org/examples/Northwind.svc/Products? $ = Selezionare Product_ID, Product_Name & $ filter = substringof ('CH', Product_Name)

mio punto finale è di serie WCF Data Service, e il filtro funziona.

Se la modifica dell'URI restituisce ancora tutti i record, suppongo che sarebbe un trucco SherePoint. Cosa succede se metti 'zzz' o una stringa casuale nel filtro?

+0

Testato anche di nuovo con quella stringa, ma restituisce solo lo stesso errore "La query non è valida." quando sto usando il tag $ filtro – Mark

6

Per chiunque guardando a questa domanda, posso riferire che

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

sta lavorando per me.

-1

Inoltre, il metodo contiene contiene e ho avuto una migliore compatibilità con esso. La sintassi è:

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

contiene parametri non funziona, almeno in SharePoint 2013 – Alberto

+0

Il parametro contiene sicuramente funziona, come indicato su http://www.odata.org/getting-started/basic-tutorial/. È una delle corrispondenze parziali del filtro più facili. Non ho Sharepoint 2013, quindi non posso testarlo, ma funziona per chiunque utilizzi un'implementazione moderna e standard di OData. –

+1

Scusate per colpa mia, pensavo che l'argomento fosse correlato all'SP 2013. Potete modificare la vostra risposta in modo da poter rimuovere il mio downvote? Grazie – Alberto

Problemi correlati