Search with Twproject

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.

page-size

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: clip_image003

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.
screen928

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

screen929

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:

compute in field1    alt