If the built-in set of attributes for Issues, Tasks, Requirements, and other artifacts is not enough to run a project, you can add the attributes you need.
You will find the full list of custom attributes in the "Attributes" reference list in the project Settings. There you can also create attributes for an arbitrary entity, or for a specific subtype of that entity, for example only Requirements of a given type.
When creating a new attribute you must specify the entity and the type of the future attribute, enter the name of the new attribute, specify default values and other attributes that affect how it is displayed on input forms. Immediately after the attribute is saved you can start using it. The new attribute is displayed on forms and is available for selection in filters, groupings, lists, and boards.
An attribute of the WYSIWYG editor type lets you format the description of Issues, Tasks, and any other objects in the system, using various text formatting options, lists, tables, and images displayed directly in the text. The type of WYSIWYG editor used for this is selected in the general project Settings.
This type of custom attribute is intended for visualizing the steps (micro-tasks) that must be done as part of completing the base Task.
An additional use of this field type is controlling completion of important actions that accompany a quality solution of the Task. For example, in Scrum this can be the Definition of Done for Tasks: wrote the tests, checked everything, updated the localization. Other methodologies use the term Quality Gates — quality criteria that let you confidently report that the Task was completed with the required quality. You can mark this field as required; then a transition from one state to another becomes possible only after all the checkboxes in the checklist field are explicitly set.
References let you create links between entities that were not originally provided by the system, but are required for project management.
In the "Back reference" field you can specify the name of the reference on the entity that is being referenced. This lets you see the link from both sides — from the entity for which the reference is added, and from the entity to which the reference is added. This is a way to implement a two-way association between two entities.
In the "Constraint" field you can specify a search query that will be used as a filter for selecting the values available for choice.
Based on calculated attributes, create fields that obtain field values stored in related entities. For example, you want the requirements to show the related test cases.
To do this, create a custom attribute and, as the formula for the calculation, specify the path to the required value:
Then, you get the list of test cases related to each requirement in the list:
A simple syntax is used to build calculated fields: you can use any characters, as well as substitutions surrounded by curly braces. Inside the curly braces, the path to the required attribute is specified. If the attribute is a reference to an entity, you can refer to attributes of that entity using a dot. For example, a Requirement has a Type attribute, which is essentially a reference to the Requirement type entity. If we want to calculate the short name of the Requirement type, it is enough to write {PageType.ShortCaption}. You can refer to entity attributes recursively; for example, on an Issue you can calculate an attribute such as {Requirements.Features.Importance}. To find out the name of an attribute or a reference, open the entity card, select the required field, and use its name in the expression.
If the calculated field formula is expected to work with a collection (that is, it can return several values or references), then using the query language you can filter that collection. For example, to display not all test scenarios linked to a Requirement, but only those that are in the initial state, you can use the formula
{TestScenario?State = "submitted"}
In the following example you can calculate planned effort only for completed Tasks:
{Tasks?State = "resolved"?.Planned}
To evaluate mathematical expressions, specify an equals sign in the formula text, and then write the mathematical expression using attributes of the entity or of entities related to it, for example,
={Estimation} * 1000 + 20
Besides arithmetic operations, you can use the following mathematical functions:
round(x, number of decimal places)ceil(x)floor(x)abs(x)min(x, y)max(x,y)sqrt(x)In other cases you can use a custom field of string type and script automation to set a validation script that can implement any algorithm for calculating the field value.
For example, to calculate the value of an attribute (c1) from two others (a1 and b1), on the "Validation" tab you can write the following script:
$it->object->getRegistry()->Store( $it,
['c1' => $it->get('a1') + $it->get('b1')]
);
return true;
In this example, a low-level operation changes the value of attribute c1 when any attribute on the entity card changes.
The described functionality is available if you have a license for the "Script automation" module and configured rights for this module. Script execution results can be tracked in the Administration section, in the PHP scripts module.