
OpenProject 15.4.2 补丁版本解析自动调度、PDF 导出与优先级管理的修复全景【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openprojectOpenProject 15.4.2 是 15.4 系列的一个维护补丁版本于 2025 年 3 月 26 日发布聚焦于修复 15.4.0 引入的**自动调度模式automatic scheduling**周边的一系列缺陷同时覆盖 PDF 导出、工作包优先级管理等模块的稳定性问题。本文以官方 Release Notes 为骨架结合仓库源码与测试用例逐条拆解这 7 项 Bugfix 的成因、修复逻辑与用户可感知的行为变化帮助你理解升级到 15.4.2 后应当验证哪些关键流程。版本背景为什么 15.4.2 值得关注15.4.02025-03-19 发布是一次功能密集的大版本其核心亮点是引入了自动调度模式用户可以选择手动调度或自动调度工作包自动调度模式下工作包尽可能早地开始日期由前置任务predecessor与子任务children关系自动推导详见 15.4.0 发布说明。新功能带来新问题。15.4.2 作为一个紧接其后的补丁版本7 项修复中有 4 项直接与自动调度相关#61960、#62190、#62479、#62487说明 15.4 系列在调度模式切换、里程碑类型转换、后台迁移任务重试、父任务日期联动等方面存在一批边角缺陷。官方在发布说明中明确建议尽快升级到最新版本。[!NOTE] 本次发布还公开感谢了社区成员 Robb E. 对缺陷报告与定位的贡献见 Release Notes 原文 的 Contributions 部分。修复清单总览缺陷编号影响模块问题描述#61960工作包创建表单在 WP 创建表单中切换到自动模式时行为不一致#62190自动调度 / 里程碑已自动调度的工作包无法转换为里程碑Milestone#62249工作包界面填充数据后大量 WP 字段视觉上错位#62316PDF 报表导出使用查询默认列时导出的 PDF 报表不含任何属性#62459工作包优先级更新优先级Priorities的名称、颜色标签或状态时返回 500 错误#62479数据迁移任务WorkPackages::AutomaticMode::MigrateValuesJob迁移任务未能正确重试#62487父子关系 / 调度从工作包列表创建子任务时父任务的日期未正确更新下面按主题分组深入解读。自动调度模式4 项关键修复修复一创建表单中切换自动模式的行为不一致#6196015.4 引入了schedule_manually这一数据库字段布尔型默认值为true即新建工作包默认手动调度见 db/migrate/tables/work_packages.rb 中的t.boolean :schedule_manually, default: true, null: false以及对应的部分索引。问题出现在工作包创建表单在创建流程中切换调度模式时界面行为与详情视图中的日期选择器不一致例如切换后日期字段的可用/禁用状态、工作天数复选框的显隐可能出现偏差。该修复统一了创建表单与日期选择器date picker的自动模式判定逻辑使新建即设置调度模式的体验与编辑已有工作包一致。从测试侧看仓库中的 automatic_scheduling_logic_spec.rb 覆盖了大量调度模式切换场景例如 Scenario 25 验证当工作包没有前置任务也没有子任务时无法切换到自动模式——日期选择器中的保存按钮会被禁用。这解释了自动模式的存在前提一个工作包只有在存在前置任务或子任务时才能进入自动调度。修复二自动调度的工作包无法转为里程碑#62190里程碑Milestone在 OpenProject 中是只有单一日期开始完成的工作包类型。在 15.4.2 之前如果一个工作包处于自动调度状态尝试将其类型转换为里程碑会失败或产生异常。根源在于调度逻辑的日期推导假设自动模式基于前置任务推导出最早开始日期soonest_start再结合工期duration计算完成日期而里程碑没有开始完成的区间概念其日期推导路径不同。从源码 app/models/work_package/scheduling_rules.rb 可以看到核心判定schedule_automatically?即!schedule_manually?以及soonest_start基于Relation.used_for_scheduling_of(self)计算不违反前置关系的最早日期。类型转换需要在此推导链路中正确处理里程碑的单日期语义。升级后的验证建议对一个处于自动调度、且存在前置任务的工作包执行更改类型为里程碑确认能够成功保存且日期推导符合预期。修复三迁移任务未正确重试#6247915.4 升级过程会运行数据迁移将既有工作包的调度模式按规则批量初始化。迁移任务WorkPackages::AutomaticMode::MigrateValuesJob在出现瞬时失败例如数据库锁竞争、连接超时时未能正确进入重试队列导致部分工作包在升级后调度模式未被正确设置。这类后台任务在 OpenProject 中由app/workers目录下的 ActiveJob 承载。此修复保证了迁移任务的可重试性避免升级过程中因一次性失败造成数据不一致。对于运维人员而言升级 15.4.2 时应关注后台任务队列日志确认MigrateValuesJob正常完成。修复四从列表创建子任务时父任务日期未联动#62487在自动调度体系中父任务的日期由所有子任务的日期区间覆盖取所有子任务的最早开始与最晚完成。修复前从工作包列表table view的行内操作直接创建子任务时父任务的开始/完成日期没有随之更新而通过详情页关系标签添加子任务时行为却正常——这正是 #62487 描述的未正确更新。底层负责联动的是 app/services/work_packages/update_ancestors_service.rb它在子任务变更后向上遍历祖先链用update_current_and_former_ancestors重算父级日期并写入 journal。修复后无论从哪个入口创建子任务都会触发祖先更新服务保证父任务日期与子任务区间一致。测试中对应场景如 Scenario 28/29验证了为手动调度的父任务添加子任务后父任务会自动切换到自动模式日期取子任务的并集。[!NOTE] 切换调度模式手动↔自动会在工作包的**活动Activity**中新增一条 journal 记录Scheduling mode set to: [...]。如果你在工作包列表中以updated at字段排序请注意 15.4 系列升级后最活跃记录的刷新行为详见 15.4.0 发布说明 中的说明。lib/open_project/journal_formatter/schedule_manually.rb 正是这一 journal 条目的格式化器。界面与导出修复PDF 报表导出默认列导致属性丢失#62316PDF 报表导出PDF Report Export为项目生成包含标题页、可点击目录、逐条工作包属性表与长文本字段的文档。修复前当导出使用查询query的默认列时生成报表的属性表为空——没有任何属性被导出。原因在于导出配置对默认列的处理路径存在缺陷默认列场景下属性列集合未能正确初始化。根据 PDF 报表导出文档 的说明属性表中的列对应导出时选定的列默认预选工作包表格查询中的列长文本字段描述与长文本自定义字段默认全部选中、可单独增删。修复后默认列场景同样能正确生成属性表。升级后的验证建议直接使用未保存的自定义查询即默认列导出一次 PDF 报表确认属性表完整包含各列再对保存过的视图重复验证。工作包优先级编辑触发 500 错误#62459自 15.4.0 起OpenProject 重构了管理后台将原枚举值enumerations页面拆分工作包优先级迁移至Administration → Work packages → Priorities详见 15.4.0 发布说明。修复前在该页面更新优先级的名称、颜色标签或状态时会抛出 HTTP 500 错误。从数据模型看IssuePriority继承自Enumeration并belongs_to :color见 app/models/issue_priority.rb其colored?返回true表明优先级支持颜色标签。管理入口由 app/controllers/admin/settings/work_package_priorities_controller.rb 提供它继承EnumerationsControllerBase并声明enumeration_class为IssuePriority。500 错误的根源在于颜色关联与枚举更新流程在重构后的控制器中处理不当。修复后名称、颜色、状态均可正常编辑。[!TIP] 若你的实例升级自旧版本且曾自定义过优先级颜色升级后请进入Administration → Work packages → Priorities逐一保存各优先级验证颜色标签持久化正常。工作包字段视觉错位#62249这是一项纯前端CSS/布局修复当工作包字段填充大量数据时多个字段在表单中出现视觉错位。此类问题不涉及数据逻辑但对日常录入体验影响直接。15.4.2 通过调整表单布局样式解决升级后建议抽查详情视图、分割视图中的字段排版。升级与验证清单综合本次 7 项修复建议在升级到 15.4.2 后按以下清单回归验证创建流程新建工作包时切换手动/自动模式确认日期字段状态与详情页一致#61960类型转换将自动调度的工作包转为里程碑确认可保存#62190子任务联动从工作包列表行内创建子任务确认父任务日期自动更新并切换为自动模式#62487PDF 导出用默认列与自定义列分别导出 PDF 报表确认属性表完整#62316优先级管理在Administration → Work packages → Priorities中编辑名称、颜色、状态确认不再出现 500#62459后台任务确认WorkPackages::AutomaticMode::MigrateValuesJob正常执行完毕、无卡死或失败重试堆积#62479。深入阅读自动调度模式的完整用户指南Set and change dates and duration of work packages含单日期模式、工作天数、工期推导等自动调度逻辑的端到端测试automatic_scheduling_logic_spec.rb覆盖 30 场景含前置任务、lag、子任务、模式切换最早开始日期推导实现app/models/work_package/scheduling_rules.rb父任务日期联动服务app/services/work_packages/update_ancestors_service.rbPDF 报表导出配置docs/user-guide/work-packages/exporting/pdf-report/README.md15.4.0 功能引入背景docs/release-notes/15/15-4-0/README.md【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考