OpenProject CRUD 技能 — 管理工作包、项目、群组、新闻、用户、关注者、关系、通知、工时记录、评论、附件、维基等...
由 @altf1be.是一项面向实际任务的技能,主要用于Manage OpenProject 工作套件,项目,组,新闻,用户,监视者,关系,通知,时间条目,评论,附件,维基页面,以及工作流程 tran。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
通过 OpenProject API v3 管理工作包(Work Packages)、项目(Projects)、用户组(Groups)、新闻(News)、用户(Users)、关注者(Watchers)、关联关系(Relations)、通知(Notifications)、工时记录(Time Entries)、评论(Comments)、附件(Attachments)、Wiki 页面(Wiki Pages)以及工作流状态转换(Workflow Transitions)。支持 OpenProject 云版与自托管实例。
{baseDir} 目录下创建 .env 文件):OP_HOST=https://projects.xflowdata.com OP_API_TOKEN=your-api-token OP_DEFAULT_PROJECT=my-project
cd {baseDir} && npm install# 列出工作包(支持可选过滤器)
node {baseDir}/scripts/openproject.mjs wp-list --project my-project --status open --assignee me
# 创建工作包
node {baseDir}/scripts/openproject.mjs wp-create --project my-project --type Task --subject "修复登录 Bug" --description "用户无法登录"
# 查看工作包详情
node {baseDir}/scripts/openproject.mjs wp-read --id 42
# 更新工作包
node {baseDir}/scripts/openproject.mjs wp-update --id 42 --subject "新标题" --priority High
# 删除工作包(需指定 --confirm 参数)
node {baseDir}/scripts/openproject.mjs wp-delete --id 42 --confirm
# 列出所有项目
node {baseDir}/scripts/openproject.mjs project-list
# 查看项目详情
node {baseDir}/scripts/openproject.mjs project-read --id my-project
# 创建项目
node {baseDir}/scripts/openproject.mjs project-create --name "我的项目" --identifier my-project
# 列出某工作包下的所有评论
node {baseDir}/scripts/openproject.mjs comment-list --wp-id 42
# 添加评论
node {baseDir}/scripts/openproject.mjs comment-add --wp-id 42 --body "已就绪,待评审"
# 列出某工作包下的所有附件
node {baseDir}/scripts/openproject.mjs attachment-list --wp-id 42
# 上传附件
node {baseDir}/scripts/openproject.mjs attachment-add --wp-id 42 --file ./screenshot.png
# 删除附件(需指定 --confirm 参数)
node {baseDir}/scripts/openproject.mjs attachment-delete --id 10 --confirm
# 列出工时记录
node {baseDir}/scripts/openproject.mjs time-list --project my-project
# 记录工时
node {baseDir}/scripts/openproject.mjs time-create --wp-id 42 --hours 2.5 --comment "代码评审" --activity-id 1
# 更新工时记录
node {baseDir}/scripts/openproject.mjs time-update --id 5 --hours 3 --comment "已更新"
# 删除工时记录(需指定 --confirm 参数)
node {baseDir}/scripts/openproject.mjs time-delete --id 5 --confirm
# 列出所有状态
node {baseDir}/scripts/openproject.mjs status-list
# 更新工作包状态
node {baseDir}/scripts/openproject.mjs wp-update --id 42 --status "进行中"
# 列出所有用户(支持可选过滤器)
node {baseDir}/scripts/openproject.mjs user-list
node {baseDir}/scripts/openproject.mjs user-list --status active --name "John"
# 查看用户详情
node {baseDir}/scripts/openproject.mjs user-read --id 5
# 查看当前认证用户信息
node {baseDir}/scripts/openproject.mjs user-me
# 列出通知(全部或仅未读)
node {baseDir}/scripts/openproject.mjs notification-list
node {baseDir}/scripts/openproject.mjs notification-list --unread
node {baseDir}/scripts/openproject.mjs notification-list --reason mentioned --project 5
# 查看通知详情
node {baseDir}/scripts/openproject.mjs notification-read --id 100
# 标记为已读(单条或全部)
node {baseDir}/scripts/openproject.mjs notification-mark-read --id 100
node {baseDir}/scripts/openproject.mjs notification-mark-read --all
node {baseDir}/scripts/openproject.mjs notification-mark-read --all --project 5
# 标记为未读
node {baseDir}/scripts/openproject.mjs notification-mark-unread --id 100
node {baseDir}/scripts/openproject.mjs notification-mark-unread --all
node {baseDir}/scripts/openproject.mjs document-list
node {baseDir}/scripts/openproject.mjs document-read --id 5
node {baseDir}/scripts/openproject.mjs document-update --id 5 --title "已更新的标题"
node {baseDir}/scripts/openproject.mjs revision-read --id 10
node {baseDir}/scripts/openproject.mjs revision-list-by-wp --wp-id 42
node {baseDir}/scripts/openproject.mjs capability-list --principal me
node {baseDir}/scripts/openproject.mjs capability-global
node {baseDir}/scripts/openproject.mjs action-list
node {baseDir}/scripts/openproject.mjs action-read --id work_packages/create
node {baseDir}/scripts/openproject.mjs my-preferences-read
node {baseDir}/scripts/openproject.mjs my-preferences-update --time-zone "Europe/Brussels" --comment-order desc
node {baseDir}/scripts/openproject.mjs render-markdown --text "**粗体** 和 _斜体_"
node {baseDir}/scripts/openproject.mjs render-plain --text "纯文本"
node {baseDir}/scripts/openproject.mjs post-read --id 5
node {baseDir}/scripts/openproject.mjs post-attachment-list --id 5
node {baseDir}/scripts/openproject.mjs reminder-list
node {baseDir}/scripts/openproject.mjs reminder-create --wp-id 42 --remind-at "2026-03-20T09:00:00Z" --note "检查状态"
node {baseDir}/scripts/openproject.mjs reminder-update --id 3 --remind-at "2026-03-21T09:00:00Z"
node {baseDir}/scripts/openproject.mjs reminder-delete --id 3 --confirm
node {baseDir}/scripts/openproject.mjs project-status-read --id on_track
# 列出项目阶段定义
node {baseDir}/scripts/openproject.mjs project-phase-definition-list
# 查看某阶段定义
node {baseDir}/scripts/openproject.mjs project-phase-definition-read --id 1
# 查看某项目阶段
node {baseDir}/scripts/openproject.mjs project-phase-read --id 5
# 列出所有投资组合
node {baseDir}/scripts/openproject.mjs portfolio-list
# 查看某投资组合
node {baseDir}/scripts/openproject.mjs portfolio-read --id 1
# 更新某投资组合
node {baseDir}/scripts/openproject.mjs portfolio-update --id 1 --name "Q1 投资组合"
# 删除某投资组合(需指定 --confirm 参数)
node {baseDir}/scripts/openproject.mjs portfolio-delete --id 1 --confirm
# 列出所有项目集
node {baseDir}/scripts/openproject.mjs program-list
# 查看某项目集
node {baseDir}/scripts/openproject.mjs program-read --id 1
# 更新某项目集
node {baseDir}/scripts/openproject.mjs program-update --id 1 --name "平台项目集"
# 删除某项目集(需指定 --confirm 参数)
node {baseDir}/scripts/openproject.mjs program-delete --id 1 --confirm
# 列出所有占位用户
node {baseDir}/scripts/openproject.mjs placeholder-user-list
# 查看某占位用户
node {baseDir}/scripts/openproject.mjs placeholder-user-read --id 10
# 创建占位用户
node {baseDir}/scripts/openproject.mjs placeholder-user-create --name "未来开发者"
# 更新占位用户
node {baseDir}/scripts/openproject.mjs placeholder-user-update --id 10 --name "高级开发者"
# 删除占位用户(需指定 --confirm 参数)
node {baseDir}/scripts/openproject.mjs placeholder-user-delete --id 10 --confirm
# 列出某项目的预算
node {baseDir}/scripts/openproject.mjs budget-list --project my-project
# 查看预算详情
node {baseDir}/scripts/openproject.mjs budget-read --id 3
# 查看某会议
node {baseDir}/scripts/openproject.mjs meeting-read --id 10
# 列出某会议的附件
node {baseDir}/scripts/openproject.mjs meeting-attachment-list --id 10
# 向会议上传附件
node {baseDir}/scripts/openproject.mjs meeting-attachment-add --id 10 --file ./agenda.pdf
# 检查某日期是否为工作日
node {baseDir}/scripts/openproject.mjs day-read --date 2026-03-18
# 列出某时间段内的所有日期
node {baseDir}/scripts/openproject.mjs days-list --from 2026-03-01 --to 2026-03-31
# 列出所有非工作日(节假日)
node {baseDir}/scripts/openproject.mjs non-working-days-list
# 查看某非工作日详情
node {baseDir}/scripts/openproject.mjs non-working-day-read --date 2026-12-25
# 查看周工作日安排(哪些天为工作日)
node {baseDir}/scripts/openproject.mjs week-days-list
# 查看某特定星期几的配置
node {baseDir}/scripts/openproject.mjs week-day-read --day 6
# 查看实例级配置
node {baseDir}/scripts/openproject.mjs config-read
# 查看项目级配置
node {baseDir}/scripts/openproject.mjs project-config-read --project my-project
# 查看 OAuth 应用
node {baseDir}/scripts/openproject.mjs oauth-app-read --id 1
# 查看 OAuth 客户端凭据
node {baseDir}/scripts/openproject.mjs oauth-credentials-read --id 1
# 列出所有属性的帮助文本
node {baseDir}/scripts/openproject.mjs help-text-list
# 查看某帮助文本
node {baseDir}/scripts/openproject.mjs help-text-read --id 1
# 列出某层级式自定义字段的所有条目
node {baseDir}/scripts/openproject.mjs custom-field-items --id 10
# 查看某自定义字段条目
node {baseDir}/scripts/openproject.mjs custom-field-item-read --id 25
# 获取某自定义字段条目的分支(祖先节点)
node {baseDir}/scripts/openproject.mjs custom-field-item-branch --id 25
# 查看某自定义选项值
node {baseDir}/scripts/openproject.mjs custom-option-read --id 3
# 查看某自定义操作
node {baseDir}/scripts/openproject.mjs custom-action-read --id 1
# 在工作包上执行某自定义操作
node {baseDir}/scripts/openproject.mjs custom-action-execute --id 1 --wp-id 42
# 列出所有用户组
node {baseDir}/scripts/openproject.mjs group-list
# 查看用户组详情(含成员列表)
node {baseDir}/scripts/openproject.mjs group-read --id 3
# 创建带成员的用户组
node {baseDir}/scripts/openproject.mjs group-create --name "开发团队" --members 5,6,7
# 更新用户组(将完全替换现有成员列表)
node {baseDir}/scripts/openproject.mjs group-update --id 3 --name "工程部" --members 5,6,7,8
# 删除用户组(需指定 --confirm 参数)
node {baseDir}/scripts/openproject.mjs group-delete --id 3 --confirm
# 列出所有新闻
node {baseDir}/scripts/openproject.mjs news-list
# 查看新闻详情
node {baseDir}/scripts/openproject.mjs news-read --id 5
# 创建新闻条目
node {baseDir}/scripts/openproject.mjs news-create --project my-project --title "Sprint 12 已发布" --summary "Bug 修复与性能优化" --description "完整详情见此处..."
# 更新新闻条目
node {baseDir}/scripts/openproject.mjs news-update --id 5 --title "已更新的标题"
# 删除新闻条目(需指定 --confirm 参数)
node {baseDir}/scripts/openproject.mjs news-delete --id 5 --confirm
# 列出某工作包的关注者
node {baseDir}/scripts/openproject.mjs watcher-list --wp-id 42
# 添加关注者
node {baseDir}/scripts/openproject.mjs watcher-add --wp-id 42 --user-id 5
# 移除关注者
node {baseDir}/scripts/openproject.mjs watcher-remove --wp-id 42 --user-id 5
# 列出可作为关注者的用户
node {baseDir}/scripts/openproject.mjs watcher-available --wp-id 42
# 列出所有关联关系(可按工作包 ID 或类型筛选)
node {baseDir}/scripts/openproject.mjs relation-list --wp-id 42
node {baseDir}/scripts/openproject.mjs relation-list --type blocks
# 查看关联关系详情
node {baseDir}/scripts/openproject.mjs relation-read --id 5
# 创建关联关系(支持类型:relates、duplicates、blocks、precedes、follows、includes、partof、requires)
node {baseDir}/scripts/openproject.mjs relation-create --wp-id 42 --to-wp-id 43 --type blocks
node {baseDir}/scripts/openproject.mjs relation-create --wp-id 42 --to-wp-id 43 --type precedes --lag 2
# 更新关联关系
node {baseDir}/scripts/openproject.mjs relation-update --id 5 --type follows --lag 1
# 删除关联关系(需指定 --confirm 参数)
node {baseDir}/scripts/openproject.mjs relation-delete --id 5 --confirm
# 查看 Wiki 页面
node {baseDir}/scripts/openproject.mjs wiki-read --id 72
# 列出 Wiki 页面的附件
node {baseDir}/scripts/openproject.mjs wiki-attachment-list --id 72
# 向 Wiki 页面上传附件
node {baseDir}/scripts/openproject.mjs wiki-attachment-add --id 72 --file ./diagram.png
# 列出工作包类型
node {baseDir}/scripts/openproject.mjs type-list
# 列出优先级
node {baseDir}/scripts/openproject.mjs priority-list
# 列出项目成员
node {baseDir}/scripts/openproject.mjs member-list --project my-project
# 列出版本/里程碑
node {baseDir}/scripts/openproject.mjs version-list --project my-project
# 列出分类
node {baseDir}/scripts/openproject.mjs category-list --project my-project
apikey 作为用户名的 Basic Auth)--confirm 参数commander — CLI 框架dotenv — 环境变量加载工具fetch(要求 Node.js 版本 ≥ 18)Abdelkrim BOUJRAF — ALT-F1 SRL,布鲁塞尔 🇧🇪 🇲🇦
Twitter(X):@altf1be
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.3万人学习
共49课时 | 82.7万人学习
最新文章