Trac 经验谈之(4)报表篇
- wang - 赖勇浩的编程私伙局Trac 经验谈之(1)杂谈篇. Trac 经验谈之(2)杂谈篇补遗. Trac 经验谈之(3)工作流篇. Trac 经验谈之(4)报表篇. Trac 经验谈之(5)插件篇. Trac 经验谈之(6 完)插件篇补遗. =================Trac 经验谈之(4)报表篇. 赖勇浩(http://laiyonghao.com).

[milestone] stats_provider = DefaultTicketGroupStatsProvider然后加入一个名为 milestone-groups 的节,我所用的定义如下:
[milestone-groups]
closed = closed
closed.order = 1
closed.query_args = group=resolution
closed.overall_completion = true
closed.label = 已关闭
resolved = resolved
resolved.order = 2
resolved.css_class = new
resolved.label = 测试中
active = *
active.order = 3
active.css_class = open
active.label = 开发中其中 closed、resolved 和 active 都可以随意定义,它们表示分组名(groupname)。每一个分组名的值是一个以逗号(,)分格的列表,每一个元素都是一个状态名;也可以使用一次星号(*),它匹配了所有尚未指定的状态。每一个分组都有 order、query_args、overall_completion、label 和 css_class 五个属性供你设定,它们的意义如下:update report set id=5 where id=3;执行以后就可以把原来排得较后的报表排到前面(不过 ID 是 PRIMARY KEY,所以需要注意它的唯一性)。
Trac 的报表定制性很强,而且提供了图形界面的定制查询和基于 SQL Query 语句的新建报表,在这里我们先来谈一下较基础的定制查询,然后再深入到 SQL Query 语句及其注意事项。
点击报表(report)页面上部左右侧的定制查询连接就可以进入定制查询页面,一般地,已经在过滤器中加了属主和状态两个字段,并且下方也显示了当前的过滤结果,如下图:
过滤器字样下方的减号(-)按钮可以用来删除这个过滤器,每一个过滤字段都可以通过选择或填写来方便地设定过滤条件。在过滤器下面的“和”及“或”两个下拉框可以用来添加新的过滤字段,如类型、报告人等。
列字样的多选框用来选择需要在报表中显示的列,还有比较关键的是“结果分组”参数,可以按不同的 ticket 字段来分组,一般选择属主或状态。
选好参数以后,可以点击“更新结果”按钮查看效果,如果觉得满意,那么可以点击页面下方的“保存查询”把这个报表添加到报表页面了。
SELECT id AS ticket, status, severity, priority, owner,
time AS created, summary FROM ticket
WHERE status IN ('new', 'assigned', 'reopened')
ORDER BY priority, time使用这种复杂的方式,是为了获得更丰富的能力,比如在查询中使用变量。这个规则解决,以$开头的单词将被看作变量,如:SELECT id AS ticket,summary FROM ticket WHERE priority=$PRIORITY这个 $PRIORITY 就是变量,它的值由报表页面的 URL 传进来:
http://trac.edgewall.org/reports/14?PRIORITY=high除了定量,还有一些默认的特殊变量(或称为常量),现在只有一个,$USER,使用这些特殊变量时需要改变 URL,Trac 自动地传递它的值,如查询属主为自己的任务单:
SELECT id AS ticket,summary FROM ticket WHERE owner=$USER除此之外,Trac 还有自己的黑魔法——对一些字段自动格式化,主要有:
[query:status=new|assigned|reopened&version=1.0 对应1.0版的活跃任务单]那么 wiki 引擎将把它渲染为一个指向 http://www.example.com/trac/query?status=new&status=assigned&status=reopened&version=1.0&order=priority 的超链接(锚文本是对应1.0版的活跃任务单),可以看到这个 URL 的参数正是 Query 语句的值。
[[TicketQuery(max=3,status=closed,order=id,desc=1,format=table,col=resolution|summary|owner|reporter,rows=description)]]以上宏表示显示按 ID 倒序排前 3 的已关闭的任务单,每条任务单显示处理结果(resolution)、概述(summary)、属主(owner)和报告人(report),然后再另起一行显示任务单的描述(description)。