Tuesday, 26 May 2009

Easy and efficient browse and search combination

All of us have seen many innovative ways of searching, filtering and browsing data from a list. While working on this dialogue I encountered this problem. I call it a problem because the list of users may vary anywhere in between 2 (for an entry level executive) to 50,000 for a CTO. And every level of users would use it frequently.

For an entry level executive, the browse model suits the best. Easy to use and prevents errors. However, for a senior executive, the search model would be the best.

- These are 2 fields that need to be filled up in order to assign a user to a task.
- Each field can have any number of possible values ( I get to choose between 2-10 if I am a junior executive; 50,000 for a CTO!)
- All users are uniquely identified only by a combination of Area Code and ID.
- Data selected / entered in a field needs to be validated. Validation queries the database. Narrower the search , less is the system load.
- This selection has to be made on a Task Assignment dialogue that contains other fields as well.

- Development on Eclipse RCP using native SWT components only. Custom components can be developed only if “really required”.
- No AJAX (or any similar technology). To populate fields with data, we need to explicitly query the database.
- Keyboard navigation should not be affected
- This form/ dialogue is already a pop-up on the main screen
- Efficiency is crucial, so a Wizard interface is ruled out. (the development teams are not so happy with Wizard interfaces)

- Users know how many users they supervise. So they make a choice between Browse and Search.
- Fields are dynamically displayed on the dialogue.
- On selecting ‘Browse’, the user gets a drop-down for Area Codes.
- On making a selection, the ID dropdown is populated. On selecting ‘Search’, users gets to input Area Code and query database.
- Data is validated and the IDs populated. Less than 30 IDs, dropdown shows.
- More than 30 IDs, need to type 2-3 numbers to allow data to be filtered.