osTicket工单系统父工单自动创建子任务实现方案咨询
osTicket 自动创建关联子任务实现方案
你找到的两个核心文件方向完全正确,不需要从零开发功能,直接复用系统已有的手动建任务逻辑做自动触发即可,无复杂编程要求,按以下步骤操作即可。
核心实现逻辑
不要修改系统原生的任务创建核心代码,挂钩工单创建完成的后置节点,匹配到软件申请类工单时,复用现有任务创建方法自动生成对应子项即可,改动量极小,不会影响系统原有功能。
分步操作指引
- 前置准备
- 提前在后台建好对应配置:记录「软件申请」对应的帮助主题ID、支持团队所属部门ID、管理层审批岗对应的用户/角色ID,所有ID可以在后台对应列表页的URL参数里直接看到
- 全量备份
class.ticket.php、class.thread_actions.php两个文件,操作出错直接覆盖备份即可恢复
- 定位触发点
打开class.ticket.php,找到public static function create()方法,拉到方法最末尾,也就是工单数据成功写入数据库、返回工单ID的位置,插入触发判断逻辑:只对匹配「软件申请」帮助主题ID的工单执行自动创建逻辑,其余工单直接跳过,不影响原有流程
- 复用现有任务创建逻辑
打开class.thread_actions.php拉到末尾的TEA_CreateTask类,找到它调用任务创建的核心代码段,把参数组装逻辑抄到刚才的触发点位置,不需要自己重写任务创建逻辑:// 核心参数和手动创建任务的参数保持一致即可 $parentTaskData = array( 'title' => '软件申请处理工单', 'dept_id' => 提前记录的支持团队部门ID, 'assign_id' => 支持团队值班岗ID, 'object_type' => 'T', 'object_id' => $ticket->getId(), // 绑定用户提交的原始申请单 'status' => 1 ); $parentTask = Task::create($parentTaskData); // 创建审批子任务,关联到上面的父任务 $approveTaskData = array( 'title' => '软件申请资质审批', 'dept_id' => 提前记录的管理层部门ID, 'assign_id' => 审批岗用户ID, 'object_type' => 'P', // 固定值,代表关联父任务 'object_id' => $parentTask->getId(), 'status' => 1 ); Task::create($approveTaskData); - 加防重复判断
给工单加一个值为「是/否」的自定义字段,字段名设为「自动任务已生成」,在触发逻辑最前面加判断:如果当前工单这个字段的值为「是」,直接跳过创建逻辑,避免工单更新、回复时重复生成任务。
注意事项
- 不要修改
TEA_CreateTask类的原有代码,只需要复用它的参数组装和调用逻辑,否则会导致系统手动创建任务的功能失效 - 先在测试环境提交多笔不同类型的工单验证:确认非软件申请类工单不会生成额外任务、软件申请类工单生成的父任务/审批子任务归属和分配关系正确、关联关系正常,验证无误再上线到生产环境
- 后续如果需要扩展其他自动化场景,比如硬件申请、权限申请的自动子任务,只需要增加对应的帮助主题ID判断、修改对应任务的分配参数即可,不需要调整核心逻辑
内容的提问来源于stack exchange,提问作者chilladelphia24
相关产品推荐
相关产品推荐

