Twproject uses a full-text search engine indexing every text inserted in.
In order to find something just insert the word or the phrase you want to search and press “return”.
results will be ordered by score and the text highlighted. Twproject uses stemming, so if you searches “hotels” you will find “hotel” too.
This is a wide search on “everything”, so you may find task, resources or appointments. If you want to search for a particular object, you can use the combo to select the scope of your search; t: task, r:resources, i:issues and so on.
Twproject gives you a refined filtering system, that uses database searches (sql) instead on full-text ones.
Every list, task, resources, issues etc. has a set of commonly used filters. These filters are accessible from the right menu.
For instances on projects page you will have “My open projects”, “Next Milestones”, etc.
On issues pages you will have “My open issues”, “Issues open recently” etc.
If you click on a filter, the filter will be applied and you can see how the filter has been composed; it is a good starting to understand how filters work.
Once a filter is applied, print, report and export, will be applied to the filtered elements only.
Search using filters
In order to find task, issues or resources with refined searches, just click on the corresponding link in the top bar; the filtering system works in the same way for every section. For instance “Resources”.
By default you will see the “default filter”, in this case “your colleagues”, but there are already several useful preset filters “Twproject’ users”, “companies” and “people”.
Not enough? Press “more filters” to get more options:
This filter lets you compose refined search conditions – click search to get it going .
Each field is used in logical AND with the others, so for instance if you set the “company” and check the radio “people” you will find only people (not departments) from that company, that in this case means exactly “my colleagues”. In fact every preset filter simply fills the respective fields in the form so you can use them as a guide for composing your own.
Results are usually paged, and you can flip pages by using the paging bar:
Page size can be changed, just click in the field and type a number.
Custom filters are powerful also because Twproject supports Query By Example (QBE) and allows you to store your filters in order to quick repeat complex searches.
Most Twproject’s list pages, allow printing and exporting to Excel: print, export, report will apply to the current set of objects.
Save your filters
In every Twproject search page you can save your filter:
And the filter will always be available on the my filters side box.
You can decide to use a filter as your default one. In this case prefix the name with “d:”.
Search tricks: QBE
The query by example (QBE) search method gives the user an easy way to compose complex queries, by using a particular syntax in the search fields. If for example in a field you write “$mixer*” and click search, you will get all results that start with “mixer”, but not those that have “mixer” as a middle occurrence.
Twproject by default is case insensitive in searches, even on case sensitive databases; this can be changed by the administrators.
Queries can be composed with the following parameters:
|comparison||=,>,<,>=,<=||All tasks whose progress is above 5%: progress: % More complex: above 3, lesser than 6 or equal to 10: unitary price:|
|not equal||!||All tasks whose description does not contain “jewel”: name/description|
|exactly equal||“”||All tasks whose description is “nice jewel”, excluding those that have only “nice” or only “jewel”:name/description|
|empty field||(), ||All tasks whose description and name are “null”: name/description|
|zero length field||//||All tasks whose description and name have empty content: name/description|
|not empty field||!(), !||All tasks whose description and name are not empty: name/description|
|contains||*||All tasks whose description or name end with “spies”: name/description All tasks whose description or name start with “Contact”: name/description All tasks whose description or name contain “an”: name/description|
|isolated word||#||All tasks whose description or name contain “jewel” as isolated word: name/description Will find “Another jewel robbery” but not “Jewellery stolen”|
|is between||:||All tasks whose start is between the dates below: start|
|conjunction||+||All tasks whose description or name contain “another” AND contain “jewel”:name/description|
|disjunction||| ,||All tasks whose description or name contain “another” OR contain “jewel”:name/description or name/description|
|Parametric date settings||YESTERDAY
LQ LM LW Y T NW NM NQ
|These constants get substituted in searches with their current values:
Finds all events started after yesterday. start
Finds all events ending between one week ago and three months. end
Dates are always completed with time, so when you are filtering for a date, QBE applies some conversions: in case of a single date e.g. “1/1/2009” the engine will search for dates >= 1/1/2009 00:00:00:000 and <= 1/1/2009 23:59:59:999. The same in case of an interval e.g.: 1/1/2009:2/1/2009. The engine will search for dates >= 1/1/2009 00:00:00:000 and <= 2/1/2009 23:59:59:999.
Date fields allow users to quickly insert dates in the correct format. You can move between months by using the arrow buttons, but more interestingly, you can use some shortcuts instead of inserting a complete date.
For instance you can insert “today” (or even “t”) instead of inserting the actual date. What is really interesting is the use of such shortcuts in custom filters. In fact using QBE in dates allows you to express something like “all those whose end date <t” intending that end date is in the past. There are several shortcuts:
|N||NOW||Is this instant including milliseconds|
|T||TODAY||Is the first millisecond of today (00:00:00:001)|
|Y||YESTERDAY||Is the first millisecond of yesterday|
|TM||TOMORROW||Is the first millisecond of tomorrow|
|W||WEEK,THISWEEK,WEEKSTART,THISWEEKSTART||Is the first millisecond of the first day of this week|
|LW||LASTWEEK,LASTWEEKSTART||Is the first millisecond of the first day of last week|
|NW||NEXTWEEKNEXTWEEKSTART||Is the first millisecond of the first day of next week|
|M||MONTH,THISMONTH,MONTHSTART,THISMONTHSTART||Is the first millisecond of the first day of this month|
|LM||LASTMONTH,LASTMONTHSTART||Is the first millisecond of the first day of last month|
|NM||NEXTMONTH,NEXTMONTHSTART||Is the first millisecond of the first day of next month|
|Q||QUARTERTHISQUARTERQUARTERSTART,THISQUARTERSTART||Is the first millisecond of the first day of this quarter|
|LQ||LASTQUARTER,LASTQUARTERSTART||Is the first millisecond of the first day of last quarter|
|NQ||NEXTQUARTER,NEXTQUARTERSTART||Is the first millisecond of the first day of next quarter|
|CWn||WEEKOFYEAR, WY||It is the calendar week number start day, e.g. CW2 is the first day of week (and this depends whether American or European format, Sunday of Monday) of the second week of the current year|
Note that every shortcut is always reduced to a date, not to a period even if the name suggests a period (for instance “week”) when used in form data entry; it becomes a period when used in search pages
You can do even more: you can also use in dates fields every expression matching
This is a regular expression syntax, and to explain it a bit more clearly, some examples may help:
|2D||in 2 days|
|-3D||3 days ago|
|12W||in 12 weeks|
|-5W||5 weeks ago|
|2M||In 2 months|
|-35Y||35 years ago|
This can even be used to insert time intervals when recording work, such as in assignment list, for setting days:
Or even in work log recording:
Compute in fields
You can use arithmetic expressions in numeric fields: the result of the computation will be saved like any other numeric value: