I know, most of the SharePoint developers are looking for this. As everyone knows we can do partial search on data view web part by passing a parameter to it and by using the expression "contains" we can implement partial search on a field or column. But, when you come to list view web part you can't pass the parameters [There is no support for list view web part like web part parameters] and no way we can implement the partial keyword search. Today I have spent time on it to solve this problem with the help of my colleague Durga and found a wonderful way. This is giving really wonderful result and doing wild card search even on very big document libraries fast. Below are the steps I followed to solve this. [I will post detailed post on it with screen shots and nice explanation soon in this blog.]
- Created an ASPX web part page in a SharePoint site.
- Added two web parts to the page. One is for content editor web part and another is for list view web part of a SharePoint library or list.
- Now, open the page in IE browser and add a text box, button to the content query web part.
- Written simple logic to button click event of the button and reload the page with the below formatted url. The url should be of the format
"you aspx page url?FilterName=FieldName&FilterMultiValue=*valuefromtextbox*".
- In above url, we are using two key value pairs to solve our problem.
- First one is FilterName: which is for in which field of the list view we need to search the value. For example the value may be Title, ID etc…
- Second one is the FilterMultiValue: Which is for what is the value we need to search. i.e. keyword. So, here you can pass multiple values too separated by semi-colon ';'.
- So, example url should like this
- http://mosssite/pages/listviewcustomwildcardsearch.aspx?FilterName=Title&FilterMultiValue=*prav*
- Now the above url will search all the records in the given list view for the keyword "prav". So, wherever it exists in the given field name it will return all records.
Then how it is working?
Generally, If you research on query strings for a list view web part, it expects some query strings to filter and sort. I am SharePoint developer and got to know the two query strings which SharePoint list view web part uses for filtering. FilterName and FilterMultiValue. So, with that my research continued and tried long time with so many operators like %, single quotes, double quotes etc… in the value of the FilterMultiValue. Finally, I tried with * character before and end of the keyword, there I succeeded. Example: *prav* to FilterMultiValue.
- That’s it…. Working simply great.
- With that, You are done implementing the wild card search in a column in list view web part.
Happy by doing SharePoint customization. I know, this will solve so many problems to SharePoint dev’s. Isn’t it? Please let me know if you have any questions, issues and write your valuable feedback and comments.
Will post more descriptive explanation of this post with screenshots soon in this blog. Follow me!!!
Using SharePoint designer you can also promote your ListView web part to a DataView web part, which allows you to choose what parameters to use - including query string parameters.
ReplyDeleteHere's a fairly complex example from my blog - it talks about the parameters in the lower half of the post.
Your way is quite ingenious, though :)
Thanks for the comment.
ReplyDeleteBut for my requirement, I can't use the data view web part. There are lot of differences to both web parts in rendering and implementation. For my requirement I need to use list view web part and wild card search.
And more over I already mentioned in my blog post like "we can implement it in data view". :)
Really awesome post. Saved so much time.
ReplyDeleteHi Praveen,
ReplyDeleteI have taken the same steps you have provided in your post, but is not working for me.
It is not redirecting the page when i enter some string in the text box and click on the button.
I have even tried editing the url directly in the browser.
In my current example i have list which has a column Analyst and i want to get all the rows which contain "Holloway" in the analyst column.
the url i used is "http://urlofthepage.aspx?FieldName=Analyst&FieldMultiValue=*Holloway*".
Any help.
Hi there,
ReplyDeleteI have corrected my post as there are minor mistakes in the url. I changed the url correctly and tested. Please try once with new url given and let me know the result. Still if you face any problem then tell me the problem. I will help you out.
And automatically, the page won't refresh when you click submit button. Below is the logic to render the controls and rise the button click event and reload the page with new values. Paste the below as is in the content editor web part.
<script type="text/javascript">
function RedirectUrl()
{
var tb = document.getElementById("tbSearch").value;
if(tb != null)
{
window.location.href="?FilterName=Title&FilterMultiValue=*"+tb+"*";
}
return false;
}
</script>
<input type="text" id="tbSearch" />
<input type="button" id="btnSearch" value="search" onclick="return RedirectUrl();" />
Remember, change the url query string FilterName in the javascript to actual field name. [In your case, it is FilterName=Analyst]
Don't forget.
Hi Praveen,
DeleteThanks a lot for this post. We have implemented this and it works fine, except for one thing: we are using the filter on a grouped view of a list and after applying it indicates in which groups we can find the item, but all items of that group are still shown. Do you know what could be the issue here and how we could solve it?
Regards,
Anna and Mary
Hi Praveen,
ReplyDeleteThanks for correcting the query string I owe you one, it is working absolutely fine. But I have one other problem when i filter i have say about 60 records and at a time I am displaying on 15 records so when i click on the next page the filter is removed and it is going to the next page of the whole list.
Wonderful, It's a great find by you Praveen. But, I agree with the other guy who said about paging issue. Seems it is loosing the values when you click on page index.
ReplyDeleteThanks
Bob.
Hi Praveen,
ReplyDeleteI have one another problem also.
There are announcement's list on the same page, when i provide a filter string and redirect it the announcement's list shows a error "One or more field types are not installed properly. Go to the list settings page to delete these fields." or some times it shows no announcements inspite the announcements list has some.
HI, i have the same problem, have you find a solution ?
ReplyDeleteHi,
ReplyDeleteTo solve the issue that I had (The paging and the one with the Announcement's web part on the same page), I have created different views for the same list and while creating the views we can provide the filters for the list and that's how I solved my problem.
Hope it helps.
Thanks
Blue Diamond.
Hi Praveen
ReplyDeleteNice feature - thanks.
I'm trying to get 2 or 3 search fields work on the same time.
Since I'm no where near a script dude I got some problems.
The function uses FilterName and FilterMultiValue - when I manually filter on one og two columns SharePoint uses FilterField1 and FilterValue1 - repeating the fields for each filter.
I have without luck tryed to manipulate your function to use FilterField1, FilterValue1 and 2, but maybe I need the FilterMultiValue parameter...
Do you know if it can be done what I'm trying to do? maybe I can ask for some help with the syntax?
Here's what I have
script line
function ReDirectUrl()
{
var city = document.getElementById("tbSearchCity").value;
var adr = document.getElementById("tbSearchAddress").value;
var vies = "View={871052A4-958B-4A9E-9F50-98C2EEEF9707}"&;
var url = ""
if(city != null)
{
url = "FilterField1=City&FilterValue1=*"+city+"*";
if(adr != null)
{
url = url+"&FilterField2=Address&FilterValue2=*"+adr+"*";
// Search with two field
window.location.href="http://AllItems.aspx?"+url;
}
else
{
// Search with one field
window.location.href="http://AllItems.aspx?"+url;
}
else
{
if(adr != null)
{
url = "FilterField1=Address&FilterValue1=*"+adr+"*";
// Search with one field
window.location.href="http://AllItems.aspx?"+url;
}
}
return false;
}
}
script line
City:
input type="text" id="tbSearchCity" />
* Address:
input type="text" id="tbSearchAddress" />
*
input type="button" id="btnSearch" value="search" onclick="return ReDirectUrl();" />
Nice post dude..!!! :)
ReplyDeleteDid you get any ideas/solutions for the paging issue. I got a hit there. :(
You can get multiple values using this technique as well.
ReplyDeleteFor example lets say you're looking for all items with a status of "Open" and have *prav* in the description. Here's the url:
?FilterField1=Status&FilterValue1=Open&FilterField2=Description&FilterMultiValue2=*prav*
Just make sure:
a) you use unique number for each filter (1, 2, 3)
b) the FitlerFieldN matches the FilterValueN
c) use FilterMultiValueN to do wildcard matching
Andy has a nice blog entry but this is low impact and can be done with a CEWP. You don't even have to create a page for this, just edit your AllItems.aspx view of the list and add the CEWP there.
Thanks for this tip it's a great feature!
Hi Bil Simser,
ReplyDeleteThanks for the comment. We have tried that way, but the only thing bothered me is, how to handle this while paging. The scenario is, when we want to show the data on a specific ASPX page other than allitems.aspx and using the list view web part, I want to do filter. But if results contains more than 20, the paging will appear and when page index changed all my query strings are disappears. So, how to keep them? The post went into the confusion mode with that question.
thanks
-Praveen.
Hi Bil,
ReplyDeleteI used the solution mentioned by u. My url seems like:
"/Lists/Career%20Map/AllItems.aspx?FilterField1=TechnicalExcellence&FilterValue1=25%&FilterField2=Division&FilterMultiValue2=*DDPM;Sales*"
But its not working
If i change my url as shown below, it seems to be working fine
"/Lists/Career%20Map/AllItems.aspx?FilterField1=TechnicalExcellence&FilterValue1=25%&FilterField2=Division&FilterValue2=DDPM"
The following is also working fine:
"/Lists/Career%20Map/AllItems.aspx?FilterField1=Division&FilterMultiValue1=*DDPM;Sales*"
But i need my querystring as per 1st format.
Please help.Note that data view webpart wll not work in my requirement. I need to have list view only.
Hi Bil,
ReplyDeleteI tried the format mentioned by u.My url seems like
"/Lists/Career%20Map/AllItems.aspx?FilterField1=TechnicalExcellence&FilterValue1=25%&FilterField2=Division&FilterMultiValue2=*DDPM;Sales*"
But its not working.If i change my url to following its working fine
"/Lists/Career%20Map/AllItems.aspx?FilterField1=TechnicalExcellence&FilterValue1=25%&FilterField2=Division&FilterValue2=DDPM"
Even the following is working fine
"/Lists/Career%20Map/AllItems.aspx?FilterField1=Division&FilterMultiValue1=*DDPM;Sales*"
But i need my querystring in 1st format.
Please help. Note that I cannot use dataview webpart and have 2 use listview only
Hi there,
ReplyDeleteYou need to use the FilterName and FilterMultiValue or FilterField1 and FilterValue1. FilterMultiValue works with the FilterName. So, in your querystring I am not seeing any thing related to FilterName. So, try to change the querystring and let me know.
I am believing if you place both formats that may not work. But, give it a try like shown below.
"/Lists/Career%20Map/AllItems.aspx?FilterField1=TechnicalExcellence&FilterMultiValue1=25%&FilterField2=Division&FilterMultiValue2=*DDPM;Sales*"
Very nice solution, but...
ReplyDeleteLet's say you need to have two list view webparts on the same page. They both have a column with internal name 'Title'.
How can I filter the first list view web part, but not the second one?
Explanation: I named the first list 'Jobs'. I changed the name column 'Title' to 'Job' (internal name stays the same of course).
The second list is named 'Employees'. Column 'Title' changed to 'Full Name'.
I would like to filter just the values from the 'Job' column, but not the ones from 'Full Name'.
Do you know a solution to this?
Many thanks in advance!
What version of SharePoint are you all using? I am trying this in 2007 and the moment I sufix the paremeters with a number it stops working. The query string below fails:
ReplyDelete?FilterName1=Title&FilterMultiValue1=*deliveries*
The moment I take the "1" sufixes, it works.
Any clues?
Thanks!
hi,
ReplyDeletepraveen ur solution is very use full to me but i am unable to get the filter data for discussion board (LinkDiscussionTitle-->Subject) and Document library (LinkFilename-->Name).for these columns i am unable to filtering please give me suggestion.
Awesome article! Thanks a lot for posting it.
ReplyDeleteCheers
Max
Awesome work!!!!
ReplyDeleteI need the same functionality for a form library. Could you help me out
It works fine for me.
ReplyDeleteWhen i try to filter using promoted column it throws me the error :
One or more fields types are not installed prperly.Go to the list settings page to delete these fields
Please assist me
Great Post and useful info. However, like some I ran into columns not working (throwing error) etc. This is because sharepoint has both a 'display' name and a real 'name'when it generate a list. To search you need to use the real name. Here is some JavaScript I used for a search feature on our little farm.
ReplyDelete--------------
You can pick it up as a txt as it is too big to post here.
http://www.listedthings.com/SPsearchWild1.txt
--------------
Enjoy!
Bill
Hi Praveen, is there a way to use the wild card search to retain the filter values if we select one of the values obtained by search.
ReplyDeleteHey Praveen,
ReplyDeleteWhen searching the web on this topic, I have found a third party web part that can do wildcard search on a SharePoint List view.
The URL is http://demo.metadatasys.com
Thanks
Srini
Hi there.
ReplyDeleteGreat job!
What I'm missing is the way to show documents wich are stored in folders.
I'm wondering if this could be achieved:
1. ASK the user for the folder name and insert it in the URL
2. Create a new view that shows all files from all folders and use it in the URL
In both options i'm lacking the way to modify
window.location.href="?FilterName=DocNo&FilterMultiValue=*"+tb+"*";
Where here can I put as a parameter the folder name or "NoFolders.aspx"?
Awesome! Worked like a charm and so easy.
ReplyDeletePraveen,
ReplyDeleteDid you find a solution to the pagination problem?
I am new to Share Point and loved your code but the only issue is that the filter gets cleared when I move to other page.
Hope you must have got a solution by now?
Thanks anyways.
When using this method with grouping the filter does not apply to any collapsed groups, any idea how to overcome this?
ReplyDeleteI found this very helpful. Thanks very much for posting this.
ReplyDeleteThis solution works really well, except when I try to search on multiple values. When I separate the values with a semicolon, it will only display the last value, unless the text in the first value is the last word in the text string. For example if I enter search values: "rate;preventive" only the Preventive line item will display. However, if I search on: "rate review;preventive", then I'll get both line items. Do I need to modify the code to ensure that I get all results or is this just a limitation of the search. Please help.
ReplyDeleteThanks a lot for this solution.
ReplyDeleteThanks to Bill( cbandman_# ) for the enhanced JS to improve wildcard search.
I found this example:
ReplyDeletehttp://jasear.wordpress.com/2012/04/19/sharepoint-2010-basic-list-search-filter-webpart/
It works with pagination.
The FilterMultiValue does NOT work for non-English keyword, for example, cannot provide a Chinese word between * and *.
ReplyDeleteThis will not work:
http://server/DocLib1/Forms/AllItems.aspx?FilterName=_x59d3__x540d_&FilterMultiValue=*上*
(Have used InternalName for FilterName)
Any idea?
- Linda
What can I do if I need to pull all records between 2 dates and a column name. EX:
ReplyDeleteI have multiple columns for different steps that contains the date it starts.
Column A - Column B
01/01/2012 - 03/01/2012
02/01/2012 - 03/15/2012
I should be able to provide 2 filters like - Show me all records where Column A dates are between 01/01/2012 to 01/31/2012.
How can I do this?
Hi Praveen,
ReplyDeleteI am able to get this working for a regular list, but when I try to use it on a team discussion list (like a forum), it doesn't seem to work. Any ideas?
Thanks,
Eli
I will test it quickly and let you know! What field type you tested on forum list?
ReplyDelete-Praveen.
Praveen,
ReplyDeleteThis script works great. One question, when no result is found, how can we notify the user instead of just returning to the default page? Thanks.
Praveen,
ReplyDeleteDid you have a chance to add the screen shots with more detailed steps? I am a newbie at SharePoint so was not able to follow some of the steps.
Thank you!
Dee
Hello,
ReplyDeleteFirstly, great work Praveen! I can't thank you enough for this solution. However, multi-value searches seem to be problematic for me. Searching for val1 and val2 using the code above gives the search query *val1;val2* which is incorrect. It returns only search results for val2 or other quirky results. Also, I would rather have an AND keyword search rather than an OR - both val1 and val2 should be present in each search result, even if they are wildcards. I believe the search query should be *val1*+*val2* (correct me if I'm wrong) as described in this code below:
function RedirectUrl()
{
var tb = document.getElementById("tbSearch").value;
if(tb != null)
{
var arr = tb.split(";");
var str = "";
for (var i = 0; i < arr.length; i++)
{
str += "*" + arr[i] + "*";
if(i == (arr.length - 1))
{
return str;
} else {
str += "+";
}
}
window.location.href="?FilterName=Title&FilterMultiValue="+str;
}
return false;
}
- Stanley
Thanks Praveen, Spent lot of time on this. U gave me the simple solution.
ReplyDelete- Rajashekar
how to use or condition so make it a search box solution
ReplyDeleteNice article.I have a similar issue. I have a web part page with 2 list web parts. So I am unable to use the •http://mosssite/pages/listviewcustomwildcardsearch.aspx?FilterName=Title&FilterMultiValue=*prav*
ReplyDeletehow can i perform search on my page?