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 project, resources or appointments.
Twproject gives you also a refined filtering system, that uses database searches (sql) instead on full-text ones.
Common filters
Every list, project, resources, ToDos etc. has a set of commonly used filters. These filters are accessible from the left menu, section by section.
For instances on projects page you will have “Open”, “Next Milestones”, etc.
On ToDos pages you will have “My ToDo”, “For today” 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 project, ToDos 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 “Projects”.
By default you will see the “default filter”, in this case “Open”. Not enough? Press on the icons to get more options on a right bar:
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 “type” you will find only projects/phases of that type. 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 in the drop down near the page title:
You can decide to use a filter as your default one. In this case prefix the name with “d:”.
Filter buttons
On the right side of every list page you will find some buttons for adding, printing and exporting.
The magic wand will be visible if you have some wizard active.
The eye icon will allow you to show/hide columns in the list:
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.
If values are specified in more than one field, all these must be satisfied (fields are in “AND”). Fields where QBE is enabled are usually easily identifiable:
Queries can be composed with the following parameters:
Condition | Operator | Example |
---|---|---|
comparison | =,>,<,>=,<= | All projects whose progress is above 5%: progress: % More complex: above 3, lesser than 6 or equal to 10: unitary price: |
not equal | ! | All projects whose description does not contain “jewel”: name/description |
exactly equal | “” | All projects whose description is “jewel”, excluding those that have “nice jewels” or “red jewel”: name/description |
empty field | (), [] | All projects whose description and name are “null”: name/description |
zero length field | // | All projects whose description and name have empty content: name/description |
not empty field | !(), ![] | All projects whose description and name are not empty: name/description |
contains | * | All projects whose description or name end with “spies”: name/description All projects whose description or name start with “Contact”: name/description All projects whose description or name contain “an”: name/description |
isolated word | # | All projects whose description or name contain “jewel” as isolated word: name/description Will find “Another jewel robbery” but not “Jewellery stolen” |
is between | : | All projects whose start is between the dates below: start |
conjunction | + | All projects whose description or name contain “another” AND contain “jewel”:name/description |
disjunction | | , | All projects whose description or name contain “another” OR contain “jewel”:name/description or name/description |
Parametric date settings | YESTERDAY TODAY TOMORROW LQ LM LW Y T NW NM NQ (-)n[DWMY] |
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 shortcuts
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:
Shortcut | “Longcut” | Description |
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
“^-?[0-9]+[DWMY]$”.
This is a regular expression syntax, and to explain it a bit more clearly, some examples may help:
Example | Meaning |
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: