VirtualBox

Trac 工单工作流系统

Trac 工单系统提供可配置的工作流。

默认工单工作流

当创建新环境时,您的 trac.ini 中会配置一个默认工作流。此工作流是基本工作流,具体请参阅basic-workflow.ini

额外工单工作流

Trac 源代码树中提供了示例工作流,请参阅contrib/workflow 以获取 .ini 配置文件节。其中之一可能非常符合您的需求。它们可以粘贴到您的 trac.ini 文件的 [ticket-workflow] 节中。但是,如果您有现有工单,如果这些工单的状态不在新工作流中,则可能会出现问题。

以下是一些图表,展示了上述示例。

基本工单工作流定制

注意:工单的“状态”并非单独定义。工单所能处于的状态由工作流中定义的转换自动生成。因此,创建新的工单状态只需在工作流中定义以该状态开始或结束的状态转换即可。

trac.ini[ticket-workflow] 节中,每个条目都是可以对工单执行的操作。例如,请考虑 simple-workflow.ini 中的 accept 操作

accept = new,accepted -> accepted
accept.permissions = TICKET_MODIFY
accept.operations = set_owner_to_self

此示例中的第一行定义了 accept 操作,以及该操作有效的状态(newaccepted),以及执行该操作时工单的新状态(accepted)。

accept.permissions 行指定了用户执行此操作所需的权限。ExtraPermissionsProvider 可以在此处定义新的权限。

accept.operations 行指定了执行操作时,除了状态更改之外,还将对工单进行的更改。在此示例中,当用户单击 accept 时,工单负责人字段将更新为当前登录的用户。可以在逗号分隔的列表中指定多个操作。

可用的操作包括

  • del_owner -- 清除负责人字段。
  • set_owner -- 将负责人设置为选定或输入的负责人。默认为当前用户。当 [ticket] restrict_owner = true 时,选择框将填充具有 TICKET_MODIFY 权限和已认证会话的用户。
    • 操作名称.set_owner 可以选择指定一个逗号分隔的用户列表,用于填充选择框,或指定单个用户。列表还可以包含群组和权限(自 1.1.3 版)。当指定群组或权限时,选择框将填充该群组的所有成员或拥有该权限的所有用户。
  • set_owner_to_self -- 将负责人设置为当前登录的用户。
  • may_set_owner -- 将负责人设置为选定或输入的负责人。默认为现有负责人。(自 1.1.2 版)
  • del_resolution -- 清除解决方案字段。
  • set_resolution -- 将解决方案设置为所选值。
    • 操作名称.set_resolution 可以选择设置为逗号分隔列表或单个值。此属性中指定的解决方案必须在数据库中定义。示例
      resolve_new = new -> closed
      resolve_new.label = resolve
      resolve_new.operations = set_resolution
      resolve_new.permissions = TICKET_MODIFY
      resolve_new.set_resolution = invalid,wontfix
      
  • leave_status -- 显示“保留为 <当前状态>”,并且不对工单进行任何更改。
  • reset_workflow -- 重置处于不再定义的状态的工单的状态。

注意:指定冲突的操作,例如 set_ownerdel_owner,其结果未指定。

以下示例演示了 .label 属性。这里的操作是 resolve_accepted,但它将以 resolve 的形式呈现给用户。

resolve_accepted = accepted -> closed
resolve_accepted.label = resolve
resolve_accepted.permissions = TICKET_MODIFY
resolve_accepted.operations = set_resolution

.label 属性是 Trac 1.1.3 中新增的,功能上与 .name 属性相同,后者现已弃用。如果未指定 .label.name,则该操作将以 resolve accepted 的形式呈现给用户,其中下划线已被替换为空格(自 1.1.3 版)

对于应在所有状态下可用的操作,可以使用 * 代替状态。显而易见的例子是 leave 操作

leave = * -> *
leave.operations = leave_status
leave.default = 1

转换为 *-> *)表示工作流操作决定下一个状态。唯一可配置的决定下一个状态的工单工作流操作是 leave_status。但是,另一个工作流控制器可以对具有新状态 * 的操作进行操作并确定下一个状态。

这也展示了 .default 属性的使用。此值应为整数,操作的显示顺序由该值决定。具有最高 .default 值的操作会首先列出,并默认选中。其余操作按 .default 值递减的顺序列出。如果未为某个操作指定,.default 默认为 0。该值可以为负数。

工作流有一个硬编码的约束:工单应具有 closed 状态。默认报告/查询会将除 closed 之外的任何状态都视为开放状态。

工单创建操作

工单创建操作通过从特殊的 <none> 状态转换来指定。用户必须至少有一个可用的创建操作才能创建工单。默认工作流中定义的创建操作是

create = <none> -> new
create.default = 1

create_and_assign = <none> -> assigned
create_and_assign.label = assign
create_and_assign.permissions = TICKET_MODIFY
create_and_assign.operations = may_set_owner

工单重置操作

对于处于不再定义的状态的工单,默认会添加特殊的 _reset 操作。这允许在工作流更改后单独“修复”工单,尽管建议管理员通过批量修改受影响的工单来执行此操作。默认情况下,_reset 操作可供具有 TICKET_ADMIN 权限的用户使用,重置的工单会进入 new 状态。默认的 _reset 操作等同于以下 [ticket-workflow] 操作定义

_reset = -> new
_reset.label = reset
_reset.operations = reset_workflow
_reset.permissions = TICKET_ADMIN
_reset.default = 0

milestone:1.0.3起,可以通过重新定义隐式操作来定制 _reset 操作。例如,要允许任何具有 TICKET_MODIFY 权限的用户执行 _reset 操作,需要将工作流操作定义为

_reset = -> new
_reset.label = reset
_reset.operations = reset_workflow
_reset.permissions = TICKET_MODIFY
_reset.default = 0

工作流可视化

可以使用 Workflow 宏 在维基上渲染工作流以进行可视化。

工作流也可以使用 contrib/workflow/workflow_parser.py 脚本进行可视化。该脚本会输出 GraphViz 能识别的 .dot 文件。该脚本可以按如下方式使用(您的安装路径可能不同)

$ cd /var/local/trac_devel/contrib/workflow/
$ ./showworkflow /srv/trac/PlannerSuite/conf/trac.ini

该脚本会在与 trac.ini 文件相同的目录中输出 trac.pdf

示例:在工作流中添加可选测试

以下添加了一个 testing 操作。当工单状态为 newacceptedneeds_work 时,您可以选择提交它进行测试。当工单处于测试状态时,用户可以选择拒绝并将其返回到 needs_work,或者通过测试并将其发送到 closed。如果他们接受,则工单会自动标记为 closed,并且解决方案设置为 fixed。由于所有旧工作流都保留,工单可以跳过整个此部分。

testing = new,accepted,needs_work,assigned,reopened -> testing
testing.label = Submit to reporter for testing
testing.permissions = TICKET_MODIFY

reject = testing -> needs_work
reject.label = Failed testing, return to developer

pass = testing -> closed
pass.label = Passes Testing
pass.operations = set_resolution
pass.set_resolution = fixed

示例:添加简单的可选通用评审状态

有时 Trac 在“测试”对不同的人可能意味着不同的情境中使用,因此您可能希望创建一个可选的工作流状态,它介于默认工作流的 assignedclosed 状态之间,但不强制实施特定于实现的细节。为此,您唯一需要添加的新状态是 reviewing 状态。然后,工单可以从任何可重新分配的状态“提交以供评审”。如果评审通过,您可以重用 resolve 操作来关闭工单;如果评审失败,您可以重用 reassign 操作将其退回到正常工作流。

新的 reviewing 状态及其关联的 review 操作如下所示

review = new,assigned,reopened -> reviewing
review.operations = set_owner
review.permissions = TICKET_MODIFY

为了将其与默认工作流集成,您还需要将 reviewing 状态添加到 acceptresolve 操作中

accept = new,reviewing -> assigned
[…]
resolve = new,assigned,reopened,reviewing -> closed

(可选)您还可以添加一个新操作,允许您更改工单负责人,而无需将工单移出 reviewing 状态。这使您能够重新分配评审工作,而无需将工单推回 new 状态。

reassign_reviewing = reviewing -> *
reassign_reviewing.label = reassign review
reassign_reviewing.operations = set_owner, leave_status
reassign_reviewing.permissions = TICKET_MODIFY

完整的 [ticket-workflow] 配置将是

[ticket-workflow]
create = <none> -> new
create.default = 1
create_and_assign = <none> -> assigned
create_and_assign.label = assign
create_and_assign.permissions = TICKET_MODIFY
create_and_assign.operations = may_set_owner
accept = new,reviewing -> assigned
accept.operations = set_owner_to_self
accept.permissions = TICKET_MODIFY
leave = * -> *
leave.default = 1
leave.operations = leave_status
reassign = new,assigned,accepted,reopened -> assigned
reassign.operations = set_owner
reassign.permissions = TICKET_MODIFY
reopen = closed -> reopened
reopen.operations = del_resolution
reopen.permissions = TICKET_CREATE
resolve = new,assigned,reopened,reviewing -> closed
resolve.operations = set_resolution
resolve.permissions = TICKET_MODIFY
review = new,assigned,reopened -> reviewing
review.operations = set_owner
review.permissions = TICKET_MODIFY
reassign_reviewing = reviewing -> *
reassign_reviewing.operations = set_owner, leave_status
reassign_reviewing.label = reassign review
reassign_reviewing.permissions = TICKET_MODIFY

高级工单工作流定制

如果上述定制无法满足您的需求,您可以使用插件扩展工作流。插件可以为工作流提供额外的操作,例如代码评审,或者为某个操作实现副作用,例如触发构建,这些可能不仅仅是简单的状态更改。请参阅 sample-plugins/workflow 以获取一些入门示例。

但如果这些仍不足够,您可以禁用 ConfigurableTicketWorkflow 组件并创建一个完全替代它的插件。另请参阅 AdvancedTicketWorkflowPlugin,它提供了额外的操作。

将工作流状态添加到里程碑进度条

如果您的工作流中添加了额外的状态,您可能还需要定制您的里程碑进度条。请参阅 [milestone-groups] 节。

后续步骤构想

工作流系统的增强构想应作为增强工单提交给工单系统组件。您也可以将构想记录在TracIdeas/TracWorkflow页面。

最后修改于 2 年前 最后修改于 2023/06/02 10:32:55 AM
注意: 查看 TracWiki 获取使用维基的帮助。

© 2025 Oracle 支持 隐私 / 请勿出售我的信息 使用条款 商标政策 自动化访问礼仪