Page 1 of 1

lookup filter per view

Posted: 30 Nov 2015
by Eax
Hello guys,

I have a question : is it possible to get a filtering lookup not by items but by a view?

i have 3 Colums : Reporting Period - Start Date - End Date.

In my custom view, my Start Date is less than or equal at [Today] & End Date is equal or more than at [Today].

In my lookup, i want to show all concerned Reporting Period.

Is it possible?

Best regards,

Re: lookup filter per view

Posted: 30 Nov 2015
by rostislav
Hi,

No, unfortunatelly it's not possbile. You'll have to replicate the conditions you use in the view in the request query. It's not hard. Here's the basic idea of what you'll need to do:

Code: Select all

function (term, page) {

  if (!term || term.length == 0) {

    return "{WebUrl}/_api/web/lists('{ListId}')/items?$select=Id,{LookupField}&$filter=(Id ge 2) and (Id lt 5)&$orderby=Created desc&$top=10";

  }

  return "{WebUrl}/_api/web/lists('{ListId}')/items?$select=Id,{LookupField}&$orderby={LookupField}&$filter=((Id ge 2) and (Id lt 5)) and startswith({LookupField}, '" + encodeURIComponent(term) + "')&$top=10";

} 
Notice the $filter variable. What we've done is added is a condition that tells the query executor to return items with Id value in between 2 (inclusive) and 5 (exclusive).

Check the following link for more information:

https://msdn.microsoft.com/en-us/librar ... 42385.aspx

Re: lookup filter per view

Posted: 30 Nov 2015
by Eax
Hi,

Thanks

I try it but "Loading Error".

This is my code :

function (term, page) {

if (!term || term.length == 0) {

return "{WebUrl}/_api/web/lists('{ListId}')/items?$select=Id,{LookupField}&$filter=(Date_x0020_de_x0020_d_x00e9_but ge 'datetime') and (Date_x0020_de_x0020_fin le 'datetime')&$orderby=Created desc&$top=10";

}

return "{WebUrl}/_api/web/lists('{ListId}')/items?$select=Id,{LookupField}&$orderby={LookupField}&$filter=((Date_x0020_de_x0020_d_x00e9_but ge 'datetime') and (Date_x0020_de_x0020_fin le 'datetime')) and startswith({LookupField}, '" + encodeURIComponent(term) + "')&$top=10";

}



Something wrong ?

Best regards,

Re: lookup filter per view

Posted: 01 Dec 2015
by rostislav
If you want to use datetime to do your filtering, then the $filter variable would look something like this:

Code: Select all

...$filter=(Date_x0020_de_x0020_d_x00e9_but ge datetime'" + today.toISOString() + "') and...
where today is a JavaScript Date object. You'd be able to create it anew like this:

Code: Select all

var today = new Date();
or retrieve it from a Date/Datetime field like this:

Code: Select all

var today = fd.field('DateTimeField').control('getDate');
More about date objects:

http://www.w3schools.com/jsref/jsref_obj_date.asp

Re: lookup filter per view

Posted: 02 Dec 2015
by Eax
Thanks,

This is my message error :

{"error":{"code":"-1, Microsoft.SharePoint.Client.InvalidClientQueryException","message":{"lang":"fr-FR","value":"L'expression \u00ab\u00a0(Date_x0020_de_x0020_d_x00e9_but ge datetime')function toISOString() { [native code]}(Date_x0020_de_x0020_fin le datetime')\u00a0\u00bb n'est pas valide."}}}


And this is my code actually :

function (term, page) {
var today = new Date();

if (!term || term.length == 0) {

return "{WebUrl}/_api/web/lists('{ListId}')/items?$select=Id,{LookupField}&$filter=(Date%5Fx0020%5Fde%5Fx0020%5Fd%5Fx00e9%5Fbut ge datetime')" + today.toISOString + "(Date%5Fx0020%5Fde%5Fx0020%5Ffin le datetime')&$orderby=Created desc&$top=10";

}

return "{WebUrl}/_api/web/lists('{ListId}')/items?$select=Id,{LookupField}&$orderby={LookupField}&$filter=((Date%5Fx0020%5Fde%5Fx0020%5Fd%5Fx00e9%5Fbut ge datetime')" + today.toISOString + "(Date%5Fx0020%5Fde%5Fx0020%5Ffin le datetime')) and startswith({LookupField}, '" + encodeURIComponent(term) + "')&$top=10";

}

Re: lookup filter per view

Posted: 02 Dec 2015
by rostislav
Use the following code:

Code: Select all

..
if (!term || term.length == 0) {
	return "{WebUrl}/_api/web/lists('{ListId}')/items?$select=Id,{LookupField}&$filter=(Date_x0020_de_x0020_d_x00e9_but le datetime'" + today.toISOString() + "') and (Date_x0020_de_x0020_fin ge datetime'" + today.toISOString() + "')&$orderby=Created desc&$top=10";
}
	return "{WebUrl}/_api/web/lists('{ListId}')/items?$select=Id,{LookupField}&$orderby={LookupField}&$filter=(Date_x0020_de_x0020_d_x00e9_but le datetime'" + today.toISOString() + "') and (Date_x0020_de_x0020_fin ge datetime'" + today.toISOString() + "') and startswith({LookupField}, '" + encodeURIComponent(term) + "')&$top=10";
.. 

Re: lookup filter per view

Posted: 02 Dec 2015
by Eax
Thank you !