Here’s a usability solution that was necessitated by my desire to present a logical, workable solution to my end-user. I’m still learning jQuery so my solution may not be the most elegant – but it works. I welcome any improvements!
The Setup
I have a SharePoint site that is displaying the results of an SQL stored procedure. I’m using Quest Web Parts for SharePoint – qSIListView part which is part of their fine System Integration web parts package. The great thing about these web parts is that I can create a stored procedure on a database and then use the Filter capabilities of the qSIListView to supply the stored procedure with the parameter values. It’s a pretty slick solution and very easy to configure. My problem is that when you use the filter fields as the Parameter input fields, only the “Equals” operator has any meaning. I can select “Begins with” or “Contains” but it will only just pass the parameter value and not the operator. That means that my End User will be presented with a lot of false options. To avoid the confusion, I would like to present the user with one operator – “Equals”, or in the case where I’m trying to do some wild card matching in SQL, I would remove all but “Contains”. You get my point. The problem is that the Web Parts do not have the ability to filter out the operator selections. I’ve submitted this change idea to Quest for future versions but in the mean time, I needed to find a solution. My solution was to use jQuery.
Solution
There are many posts out on the web about using jQuery to manipulate the SharePoint interface. One of the best sites for jQuery on SharePoint can be found on EndUserSharePoint.com. The solution I am talking about today can be used in any web environment, including SharePoint. Essentially, my short script removes all <option> elements from all select boxes that match a certain text value. This effectively narrows the choices presented to the User to only the valid choices, Exclude from search and Equals.
To do this, I placed a Content Editor Web Part (CEWP) onto my page and pasted my script in it. In the script, I use jQuery to select all <OPTION> elements of the page and remove them if they contain any of the invalid choices. The script is pretty straight forward. I have jQuery stored in a script library on my SharePoint site. This library provides read-access to all users on the site. It is also a common place to store all of my scripts. A good post on creating a script library can be found on here.
Once I load the document, I have search for all matching <OPTION> elements and remove them.
<script src="http://mysharepointdomain.com/scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$("option").remove(":contains('Does not equal')");
$("option").remove(":contains('Contains')");
$("option").remove(":contains('Starts with')");
$("option").remove(":contains('Ends with')");
$("option").remove(":contains('Is empty')");
$("option").remove(":contains('Is not empty')");
});
</script>
That’s it! The end result looks like this.
As I said earlier, this is a pretty simple solution to a problem that I was having. Now, every time I use filter fields to supply parameter values, I can be assured that I have presented my User with valid options.
I welcome any feedback!