【问题标题】:How to create a Trac report containing all tickets a user has touched or is responsible for?如何创建包含用户接触或负责的所有工单的 Trac 报告?
【发布时间】:2012-08-30 07:26:51
【问题描述】:

创建TracReports 的例子很多。 This 仍然是一个棘手的问题,没有包含在任何现有的配方中,我知道:

...设计一个报告以显示用户所在的所有工单 所有者、记者或他们尚未创建的票证,但他们创建的票证 留下了评论。棘手的是最后一部分。

任何建议,将有效性视为额外奖励?

【问题讨论】:

  • 您使用的是什么 SQL 风格? SQLite?
  • 这里是 SQLite,是的。但我尝试遵循 Trac 的理念,即使用最便携、最少 db 后端特定的 SQL 语句。你觉得这有什么具体问题吗?
  • 在我的系统(基于 MySQL)上进行测试时,我在最后的“ORDER BY”子句中遇到了错误,所以我想我会仔细检查以确定。我必须用它们的别名替换列名(例如:t.milestone --> __group__)才能使其工作。我正在直接测试数据库的命令,而不是通过 Trac 报告 UI,所以这可能是不同的。

标签: sql report trac


【解决方案1】:

这是我自己的第一个工作解决方案:

“(当前)用户是所有者或记者或(其中一个)评论作者”

SELECT
  p.value AS __color__,
  t.milestone AS __group__,
  id AS ticket, t.type AS type,
  reporter, t.time as created,
  owner, changetime AS modified,
  author as commenter, tcg.time as date
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
LEFT JOIN ticket_change tcg ON t.id = tcg.ticket
WHERE owner = $USER OR reporter = $USER
GROUP BY id

UNION

SELECT
  p.value AS __color__,
  t.milestone AS __group__,
  id AS ticket, t.type AS type,
  reporter, t.time as created,
  owner, changetime AS modified,
  author as commenter, tcg.time as date
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
LEFT JOIN ticket_change tcg ON t.id = tcg.ticket
WHERE author = $USER
  AND id NOT IN (
  SELECT id
  FROM ticket
  WHERE owner = $USER OR reporter = $USER
)
GROUP BY id
ORDER BY t.milestone, p.value, t.type, t.time

我绝不是 SQL 专家,所以可能有一个更有效的解决方案,但这个解决方案至少可以显示评论的票证,而且每张票证不超过一次。

【讨论】:

  • 一个潜在的问题是此查询返回用户已修改的所有工单,而不仅仅是他们留下评论的工单。例如,在我的系统上,这获取了一张票,用户所做的只是将自己添加到“CC”列表中。要解决此问题,您需要从 Trac 的自动生成的评论文本中过滤掉用户 cmets,但我不知道单独使用 SQL 是否可行。
  • Trac 1.0 看起来在工单视图上有一个“仅评论”选项,可以过滤工单属性更改,只显示真实的 cmets。这个特性这里或许可以使用,但不知道是不是只用SQL就可以做到(可能要封装在插件中)。
猜你喜欢
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2018-08-16
相关资源
最近更新 更多