Context
As of Tuleap 16.0, cross tracker search widget displays the TQL query by default. Unless reader perfectly understands TQL, it's quite hard to tell what is displayed and even for those who master TQL, it's inconvenient to read to remember what the query covers. The current alternative is to place the widget in a dashboard with a descriptive name.
In order to improve the user experience in this area, we associate a name and a description to the query. The name will be displayed by default instead of the whole query.
We also want to leverage on the feedback we have on the usage of reports in trackers. The main problems are that
People don't understand they are seeing a filtered view of their artifacts.
People don't understand there are multiple filters (reports) and they can switch from one to another.
The term "report" itself seems confusing.
In the context of Cross Tracker Search widget, we are going to use the term "Query" to designate the search that is done. A Query is made of
a TQL query
a title
a description (optional)
Multiple Queries
A widget can have several queries, when there are multiple queries, the widget owner can select the one that is run by default.
Creating queries
When creating a new query, the widget owner can either
Copy queries
Unlike Tracker Reports, it will not be possible to have personal queries on a project widget. If a user sees a query on a project dashboard and want to modify it, they have the possibility to clone the widget in their personal dashboard.
It's possible to do
Copy widget from project A to project B
Copy widget from project A to personal dashboard
Copy widget from personal dashboard to project A
Copy query from widget X to widget Y
When the copy is done, the queries are copied "as is" and might need customization to work in the new context
TQL upgrades
As it's possible to to copy queries across widgets (project -> user, user -> project) we need to upgrade aggregated
to be able to run a query on aggregated in personal context (not possible today).
The keyword aggregated
will have a companion "function" AGGREGATED()
that could take a parameter to make it usable elsewhere (AGGREGATED('guinea-pig')
). SELF()
is added too to make it consistent. Usage of aggregated
and self
keyword is deprecated (in documentation and in various examples).