OpenProject 16.6.1 补丁版本深度解析:9 项缺陷修复背后的自定义字段、项目阶段与复制机制实现 📅 发布时间:2026/9/17 12:01:45 👁 浏览次数: OpenProject 16.6.1 补丁版本深度解析9 项缺陷修复背后的自定义字段、项目阶段与复制机制实现【免费下载链接】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本文基于 OpenProject 官方 16.6.1 版本发布说明系统梳理该补丁版本修复的 9 项缺陷并结合当前仓库源码逐一解析其涉及的底层模块——自定义字段层级、加权列表、计算字段、项目阶段Project Phase、项目复制服务与仪表盘权限等。读完本文你将掌握 16.6.1 的升级影响面、每项修复的功能背景以及这些模块在 OpenProject 源码中的真实实现路径便于在升级后针对性地回归验证。版本概览一次以稳定性为核心的补丁发布OpenProject 16.6.1 是 16.6 系列的一个补丁版本发布于 2025-11-13见 docs/release-notes/16/16-6-1/README.md。官方发布说明明确指出该版本包含若干缺陷修复bug fixes并建议所有用户升级到最新版本。从修复清单分布看本次补丁高度集中在两大领域自定义字段体系多选/单选列表切换、层级列表与加权项目列表Weighted Item List的筛选与展示、计算字段公式保存后的性能项目管理与工作包生命周期项目复制时必填自定义字段的丢失、项目阶段名称在表单中的显示、仪表盘 403 权限错误、工作包保存时的 URL 构造异常。下文按功能域分组展开每项修复均给出问题表象与对应的源码实现证据。修复清单总览编号缺陷描述涉及模块#68040将项目多选列表自定义字段切换为单选后项目概览页的编辑弹窗无法打开自定义字段 / 概览页#68346在较大实例上点击“保存”后公式计算字段更新耗时过长计算字段 / 异步任务#68705复制项目时必填自定义字段为空的 工作包 未被复制项目复制服务#68726项目阶段名称含拉丁扩展字符或西里尔字母时不显示在工作包表单中项目阶段#68789编辑加权项目列表条目后点击“详情”标签页报错加权项目列表#68794层级与加权项目列表自定义字段无法用于项目列表筛选项目列表筛选#68802项目概览页“编辑属性”弹窗中不显示“短名称/权重”项目概览页#68850带新闻news小组件的项目仪表盘访问返回 403仪表盘权限#68935保存工作包时报错无法构造“URL”无效的 URL工作包保存自定义字段体系本次修复的绝对重点自定义字段Custom Field是 OpenProject 中高度可扩展的元数据体系本版本多达 5 项修复与其相关#68040、#68789、#68794、#68802以及性能类的 #68346。多选列表切换单选后概览页编辑弹窗无法打开#68040症状管理员将某项目自定义字段从“多选列表Multi Select List”切换为“单选列表Single Select List”后项目概览页的编辑弹窗无法打开。源码背景两类列表字段在表单渲染上共用一套输入组件分别位于 app/forms/custom_fields/inputs/multi_select_list.rb 与 app/forms/custom_fields/inputs/single_select_list.rb。当字段格式在切换后既有数据值的序列化结构仍保留多选形态如数组而单选输入组件按标量值解析便会破坏编辑弹窗的渲染链路。此修复的价值在于字段格式切换必须兼顾存量数据的兼容升级后建议对发生过格式切换的项目自定义字段做一次概览页编辑弹窗的回归验证。层级与加权项目列表无法用于项目列表筛选#68794症状层级Hierarchy与加权项目列表Weighted Item List类型的项目自定义字段无法作为筛选条件用于项目列表。源码背景这两种字段均属于“层级化项目hierarchical item”体系其值通过CustomValue的策略类解析层级列表由 app/models/custom_value/hierarchy_strategy.rb 实现内部通过CustomField::Hierarchy::Item关联到具体条目并用CustomFields::Hierarchy::HierarchicalItemService校验条目是否属于当前字段的层级树根加权列表在 app/models/custom_value/weighted_item_list_strategy.rb 中实现其typed_value直接返回缓存条目对象的weight权重。由于这两类字段的值并非普通标量而是层级条目的引用项目列表筛选器位于 app/models/queries/filters/shared/custom_field_filter.rb 及 app/models/queries/filters/shared/custom_fields/base.rb过去并未把这两种格式纳入可筛选范围。16.6.1 修复后管理员可在项目列表中按层级/加权条目进行过滤升级后可在“项目列表 → 筛选器”中验证这两类字段已可选。加权项目列表编辑后“详情”标签页报错#68789与概览页属性弹窗缺项#68802两处问题都围绕加权项目列表的编辑/展示一致性#68789编辑加权项目列表条目后点击“详情Details”标签页报错与 app/components/custom_fields/details_component.rb 以及详情表单 app/forms/custom_fields/details_form.rb 对加权字段值结构的解析有关#68802项目概览页“编辑属性Edit attribute”弹窗中“短名称Short name/权重Weight”两列不可见与概览页内联编辑字段的渲染组件 app/controllers/inplace_edit_fields_controller.rb 所支持的字段类型白名单相关。建议升级后针对加权项目列表执行一次“编辑条目 → 保存 → 查看详情/概览页编辑属性”的完整链路回归。计算字段性能修复Save 后公式重算不再拖垮大实例#68346症状在数据量较大的实例上保存计算字段公式后耗时过长。源码背景计算字段Calculated Value在 OpenProject 中通过公式动态求值。公式语法由 app/models/custom_field/calculated_value.rb 中的常量严格约束运算符 - * / % ^、比较运算符 ! 与逻辑运算符AND OR ||函数IF AND OR XOR NOT SWITCH、MIN MAX SUM AVG ROUND ROUNDDOWN ROUNDUP ABS关键字CASE WHEN THEN ELSE END常量TRUE FALSE字段引用以{{cf_id}}形式引用其他字段可引用的字段格式限定为int float bool calculated_value weighted_item_list。公式的合法性校验分两步先做 token 级基础校验formula_contains_only_allowed_tokens?再由Dentaku::Calculator解析为 AST 做语法校验valid_formula_syntax?并递归检查是否存在循环引用can_be_referenced_by?。保存后的重算由 app/services/custom_fields/update_service.rb 触发当公式内容变化formula_previously_changed?或必填状态从否变为是时会调用CustomFields::RecalculateValuesJob.perform_later异步入队重算避免同步阻塞保存请求。16.6.1 针对较大实例的优化点即在于此链路——重算任务的调度与执行方式得到改进减少了保存公式时的等待时间。升级建议若你的实例存在大量引用链较深的计算字段A 引用 B、B 引用 C升级后首次保存公式时应留意异步任务队列的负载可观察后台任务执行状态确认重算完成。项目复制修复空必填自定义字段的工作包不再被静默丢弃#68705症状复制项目时必填自定义字段为空的 工作包 不会被复制到目标项目。源码背景项目复制时工作包的拷贝由 app/services/projects/copy/work_packages_dependent_service.rb 负责。其核心流程为source_work_packages按层级深度排序order_by_ancestors保证父工作包先于子工作包复制逐个调用WorkPackages::CopyService契约类为WorkPackages::CopyProjectContract执行复制复制完成后再根据源/目标工作包 ID 映射work_packages_map重建工作包间关系。在copy_work_package_attribute_overrides中自定义字段值通过custom_value_attributes整体透传源码会将源工作包的custom_value_attributesid → value 哈希原样映射给目标仅对 user 类型字段做目标项目成员校验不在目标项目成员中的用户会被置空。修复前若源工作包的必填自定义字段为空复制契约在校验必填约束时失败导致该工作包整体被跳过16.6.1 调整了复制场景下的必填字段处理使这类工作包也能被正常复制。升级验证复制一个包含“必填自定义字段为空的工作包”的项目确认该工作包出现在目标项目中且无错误日志对应 app/services/projects/copy_service.rb 的错误收集逻辑。项目阶段修复拉丁扩展字符与西里尔字母名称的显示问题#68726症状项目阶段Project Phase名称若包含拉丁扩展字符集Latin Extended或西里尔字母Cyrillic在工作包表单中不会显示已选中的阶段。源码背景项目阶段是 OpenProject 16.x 引入的生命周期管理能力其数据模型为 app/models/project/phase.rbProject::Phase属于某个Project与某个Project::PhaseDefinition并委托delegatename、position、start_gate_name、finish_gate_name等属性给定义对象阶段支持起始门start gate与结束门finish gate概念并校验日期区间start_date不得晚于finish_date阶段定义Phase Definition由种子数据预置见 app/seeders/basic_data/project_phase_definition_seeder.rb其名称、颜色、起始门名称均可自定义。本缺陷的根因与工作包表单中阶段名称的匹配/规范化逻辑有关当名称包含非 ASCII 字符拉丁扩展、西里尔字母时前端匹配或后端解析未能正确命中导致已选阶段不回显。16.6.1 修复后任意 Unicode 字符集的阶段名称都能在工作包表单中正常显示。升级后建议创建名称含非拉丁字符的阶段定义管理后台 → 项目阶段定义并在工作包中引用验证。仪表盘与工作包保存两处稳定性修复带新闻小组件的项目仪表盘返回 403#68850症状当项目仪表盘Dashboard包含“新闻News”小组件时访问返回 403 权限错误。源码背景仪表盘小组件的权限模型位于 app/components/homescreen 与项目概览相关组件中。403 通常意味着当前用户缺少小组件渲染所需的某个查看权限例如view_news而 16.6.1 修复了新闻小组件在特定权限组合下的误判。升级验证以普通成员角色访问配置了新闻小组件的项目仪表盘确认不再出现 403。保存工作包报错“无法构造 URL”#68935症状保存工作包时报Failed to construct URL: Invalid URL。源码背景该错误是浏览器端new URL(...)抛出的原生异常通常出现在前端对工作包跳转链接或回调地址的构造逻辑中——当某字段如自定义字段、关联文件地址包含非法 URL 片段时前端 URL 拼接失败导致保存流程中断。此修复位于前端保存链路的 URL 构造处升级后建议重点回归含链接类自定义字段的工作包保存场景。升级建议与验证要点16.6.1 为补丁版本升级路径与常规 OpenProject 维护版本一致包管理器 / Docker 镜像 / 云实例由服务商自动滚动。结合本次修复清单升级后的回归测试建议按以下优先级执行自定义字段多选↔单选格式切换后打开项目概览页编辑弹窗#68040层级/加权列表字段加入项目列表筛选#68794加权列表编辑后查看详情页#68789与概览页编辑属性#68802计算字段保存含多层引用链的公式观察保存响应时间与异步重算队列#68346项目复制复制含“必填自定义字段为空的工作包”的项目#68705项目阶段使用非 ASCII 名称的阶段定义#68726稳定性新闻小组件仪表盘访问#68850与含链接字段的工作包保存#68935。若需进一步核对版本信息可参考仓库根目录的 CHANGELOG.md 及 docs/release-notes/16/16-6-1/README.md涉及的具体实现与测试可继续深入 app/models/custom_value、app/models/custom_field/calculated_value.rb、app/models/project/phase.rb 与 app/services/projects/copy 等路径阅读。【免费下载链接】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),仅供参考