1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
= Custom Ticket Fields =
Trac supports adding custom, user-defined fields to the ticket module. Using custom fields, you can add typed, site-specific properties to tickets.
== Configuration ==
Configuring custom ticket fields is done in the [wiki:TracIni trac.ini] file. All field definitions should be under a section named `[ticket-custom]`.
The syntax of each field definition is:
{{{
FIELD_NAME = TYPE
(FIELD_NAME.OPTION = VALUE)
...
}}}
The example below should help to explain the syntax.
=== Available Field Types and Options ===
* '''text''': A simple (one line) text field.
* label: Descriptive label.
* value: Default value.
* order: Sort order placement. (Determines relative placement in forms.)
* '''checkbox''': A boolean value check box.
* label: Descriptive label.
* value: Default value (0 or 1).
* order: Sort order placement.
* '''select''': Drop-down select box. Uses a list of values.
* label: Descriptive label.
* options: List of values, separated by '''|''' (vertical pipe).
* value: Default value (Item #, starting at 0).
* order: Sort order placement.
* '''radio''': Radio buttons. Essentially the same as '''select'''.
* label: Descriptive label.
* options: List of values, separated by '''|''' (vertical pipe).
* value: Default value (Item #, starting at 0).
* order: Sort order placement.
* '''textarea''': Multi-line text area.
* label: Descriptive label.
* value: Default text.
* cols: Width in columns.
* rows: Height in lines.
* order: Sort order placement.
=== Sample Config ===
{{{
[ticket-custom]
test_one = text
test_one.label = Just a text box
test_two = text
test_two.label = Another text-box
test_two.value = Just a default value
test_three = checkbox
test_three.label = Some checkbox
test_three.value = 1
test_four = select
test_four.label = My selectbox
test_four.options = one|two|third option|four
test_four.value = 2
test_five = radio
test_five.label = Radio buttons are fun
test_five.options = uno|dos|tres|cuatro|cinco
test_five.value = 1
test_six = textarea
test_six.label = This is a large textarea
test_six.value = Default text
test_six.cols = 60
test_six.rows = 30
}}}
''Note: To make entering an option for a `select` type field optional, specify a leading `|` in the `fieldname.options` option.''
=== Reports Involving Custom Fields ===
The SQL required for TracReports to include custom ticket fields is relatively hard to get right. You need a `JOIN` with the `ticket_custom` field for every custom field that should be involved.
The following example includes a custom ticket field named `progress` in the report:
{{{
#!sql
SELECT p.value AS __color__,
id AS ticket, summary, component, version, milestone, severity,
(CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
time AS created,
changetime AS _changetime, description AS _description,
reporter AS _reporter,
(CASE WHEN c.value = '0' THEN 'None' ELSE c.value END) AS progress
FROM ticket t
LEFT OUTER JOIN ticket_custom c ON (t.id = c.ticket AND c.name = 'progress')
JOIN enum p ON p.name = t.priority AND p.type='priority'
WHERE status IN ('new', 'assigned', 'reopened')
ORDER BY p.value, milestone, severity, time
}}}
Note in particular the `LEFT OUTER JOIN` statement here.
----
See also: TracTickets, TracIni
|