如何在Trac工单关闭时强制要求填写指定字段?
实现Trac工单关闭时强制填写指定字段
当然可以做到!你提到的TracTicketValidatorPlugin确实默认是全局验证,但其实有两种更精准的方式来实现仅在工单切换到closed状态时强制填写特定字段:
方法一:利用Trac内置Workflow添加状态转换验证
Trac的Workflow系统支持在状态转换时触发自定义检查,不需要额外插件就能实现需求:
- 编辑
trac.ini配置文件,找到[ticket-workflow]区块,定位到从其他状态转到closed的转换规则(比如默认的resolve动作,对应从new/assigned/reopened到closed的转换) - 给这个动作添加
validate参数,指向自定义验证函数,示例配置如下:
[ticket-workflow] resolve = new,assigned,reopened -> closed resolve.name = Resolve ticket resolve.operations = set_resolution resolve.validate = validate_closed_fields
- 编写自定义验证脚本:在Trac的插件目录(比如
plugins/)创建custom_validator.py,内容如下(替换成你需要强制填写的字段名):
from trac.core import Component, implements from trac.ticket.api import ITicketActionController class CustomClosedFieldValidator(Component): implements(ITicketActionController) def get_ticket_actions(self, req, ticket): return [] def get_all_status(self): return [] def render_ticket_action_control(self, req, ticket, action): return None def get_action_templates(self): return [] def validate_ticket_action(self, req, ticket, action): # 仅在执行resolve动作(转closed状态)时验证 if action == 'resolve': required_field = 'closing_notes' # 替换为你的目标字段 if not ticket.get(required_field): req.session.flash(f"字段 '{required_field}' 必须填写才能关闭工单!", 'error') return False return True def apply_action_side_effects(self, req, ticket, action): pass
- 启用自定义插件:在
trac.ini的[components]区块添加:
[components] custom_validator.* = enabled
方法二:配置TracTicketValidatorPlugin实现状态特定验证
如果你偏好使用TracTicketValidatorPlugin,它其实支持条件验证,可以让规则仅在closed状态生效:
在trac.ini的[ticketvalidator]区块添加规则(替换字段名和提示信息):
[ticketvalidator] # 规则格式:字段名:条件:错误提示 closing_notes:status=closed:必须填写关闭说明才能完成工单关闭
这里的status=closed是条件判断,只有当工单状态切换为closed时,才会检查目标字段是否为空。
两种方法各有优势:方法一适合需要复杂验证逻辑的场景,灵活性更高;方法二更简洁,适合简单的必填检查,你可以根据自己的需求选择~
内容的提问来源于stack exchange,提问作者solstice333
相关产品推荐
相关产品推荐

