自定义工单字段
Trac 支持在工单模块中添加自定义的用户定义字段。通过自定义字段,您可以为工单添加类型化、站点特定的属性。
配置
在 trac.ini 的 [ticket-custom] 部分配置自定义工单字段。
每个字段定义的语法是
FIELD_NAME = TYPE (FIELD_NAME.OPTION = VALUE) ...
下面的示例有助于解释其语法。
字段名称
字段名称只能包含小写字母 a-z、大写字母 A-Z 或数字 0-9,并且不能以数字开头。
以下字段名称为保留名称,不能用于自定义字段
- cc
- changetime
- col
- comment
- component
- desc
- description
- format
- group
- groupdesc
- id
- keywords
- max
- milestone
- 或
- order
- owner
- page
- priority
- report
- reporter
- resolution
- row
- severity
- status
- summary
- time
- type
- verbose
- version
可用字段类型和选项
- text: 一个简单的(单行)文本字段。
- label: 描述性标签。
- value: 默认值。
- order: 相对于其他自定义字段的排序位置。
- max_size: 允许的最大字符数(自 1.3.2 版起)。
- format: 以下之一
plain
用于纯文本wiki
用于 wiki 格式化的内容reference
将内容视为可查询的值list
将内容解释为以空格分隔的可查询值列表
- checkbox: 一个布尔值复选框。
- label: 描述性标签。
- value: 默认值,0 或 1。
- order: 排序位置。
- select: 下拉选择框。使用值列表。
- label: 描述性标签。
- options: 值列表,以 | (竖线) 分隔。
- value: 默认值(选项中的一个值)。
- order: 排序位置。
- radio: 单选按钮。本质上与 select 相同。
- label: 描述性标签。
- options: 值列表,以 | (竖线) 分隔。
- value: 默认值,选项中的一个值。
- order: 排序位置。
- textarea: 多行文本区域。
- label: 描述性标签。
- value: 默认文本。
- rows: 高度(行数)。
- order: 排序位置。
- max_size: 允许的最大字符数(自 1.3.2 版起)。
- format:
plain
用于纯文本,或wiki
用于将内容解释为 WikiFormatting。
- time: 日期和时间选择器。(自 1.1.1 版起)
- label: 描述性标签。
- value: 默认日期。
- order: 排序位置。
- format: 以下之一
relative
用于相对日期。date
用于绝对日期。datetime
用于绝对日期和时间值。
如果未指定 label
,它将通过将自定义字段名称首字母大写并用空格替换下划线来创建。
使用 wiki
格式渲染 textarea
字段时会展开宏,但使用 wiki
格式渲染 text
字段时不会。
示例配置
[ticket-custom] test_one = text test_one.label = Just a text box test_two = text test_two.label = Another text-box test_two.value = Default [mailto:joe@nospam.com owner] test_two.format = wiki 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 = two test_five = radio test_five.label = Radio buttons are fun test_five.options = |uno|dos|tres|cuatro|cinco test_five.value = dos test_six = textarea test_six.label = This is a large textarea test_six.value = Default text test_six.cols = 60 test_six.rows = 30 test_seven = time test_seven.label = A relative date test_seven.format = relative test_seven.value = now test_eight = time test_eight.label = An absolute date test_eight.format = date test_eight.value = yesterday test_nine = time test_nine.label = A date and time test_nine.format = datetime test_nine.value = in 2 hours
注意: 要使 select
类型字段可选,请在 fieldname.options
中指定一个开头的 |
(例如 test_five
)。
涉及自定义字段的报告
自定义工单字段存储在 ticket_custom
表中,而不是 ticket
表中。因此,要在报告中显示自定义字段的值,您需要对这两个表进行连接(join)。让我们以一个名为 progress
的自定义工单字段为例。
SELECT p.value AS __color__, id AS ticket, summary, owner, c.value AS progress FROM ticket t, enum p, ticket_custom c WHERE status IN ('assigned') AND t.id = c.ticket AND c.name = 'progress' AND p.name = t.priority AND p.type = 'priority' ORDER BY p.value
注意: 这只会显示已设置进度的工单。这不等同于显示所有工单。如果您在已创建一些工单之后才创建此自定义工单字段,则这些工单将不会定义该字段,因此它们永远不会在此工单查询中显示。如果您返回并修改这些工单,该字段将被定义,并且它们将出现在查询中。
但是,如果您想显示所有工单条目(无论是否定义了进度),您需要为查询中的每个自定义字段使用 JOIN
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
特别注意这里的 LEFT OUTER JOIN
语句。
请注意,trac.ini 中的选项名称不区分大小写,因此即使您的选项名称包含大写字符
[ticket-custom] Progress_Type = text
您必须在 SQL 中使用小写:AND c.name = 'progress_type'
。
另请参阅:TracTickets, TracIni