OpenProject CRUD 技能 — 管理工作包、项目、群组、新闻、用户、关注者、关系、通知、工时记录、评论、附件、维基等...
由 @altf1be.
功能概述
由 @altf1be.是一项面向实际任务的技能,主要用于Manage OpenProject 工作套件,项目,组,新闻,用户,监视者,关系,通知,时间条目,评论,附件,维基页面,以及工作流程 tran。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
OpenProject(作者:@altf1be)
通过 OpenProject API v3 管理工作包(Work Packages)、项目(Projects)、用户组(Groups)、新闻(News)、用户(Users)、关注者(Watchers)、关联关系(Relations)、通知(Notifications)、工时记录(Time Entries)、评论(Comments)、附件(Attachments)、Wiki 页面(Wiki Pages)以及工作流状态转换(Workflow Transitions)。支持 OpenProject 云版与自托管实例。
配置步骤
- 登录您的 OpenProject 实例
- 进入 我的账户 → 访问令牌 → + 添加
- 创建一个 API 令牌并复制该令牌
- 设置环境变量(或在
{baseDir}目录下创建.env文件):
OP_HOST=https://projects.xflowdata.com OP_API_TOKEN=your-api-token OP_DEFAULT_PROJECT=my-project
- 安装依赖项:
cd {baseDir} && npm install
命令列表
工作包(Work Packages)
# 列出工作包(支持可选过滤器)
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
项目(Projects)
# 列出所有项目
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
评论(Activities)
# 列出某工作包下的所有评论
node {baseDir}/scripts/openproject.mjs comment-list --wp-id 42
# 添加评论
node {baseDir}/scripts/openproject.mjs comment-add --wp-id 42 --body "已就绪,待评审"
附件(Attachments)
# 列出某工作包下的所有附件
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
工时记录(Time Entries)
# 列出工时记录
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
状态(Statuses)与状态转换(Transitions)
# 列出所有状态
node {baseDir}/scripts/openproject.mjs status-list
# 更新工作包状态
node {baseDir}/scripts/openproject.mjs wp-update --id 42 --status "进行中"
用户(Users)
# 列出所有用户(支持可选过滤器)
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
通知(Notifications)
# 列出通知(全部或仅未读)
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
文档(Documents)
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 "已更新的标题"
修订版本(Revisions)
node {baseDir}/scripts/openproject.mjs revision-read --id 10
node {baseDir}/scripts/openproject.mjs revision-list-by-wp --wp-id 42
能力(Capabilities)与操作(Actions)
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
我的偏好设置(My Preferences)
node {baseDir}/scripts/openproject.mjs my-preferences-read
node {baseDir}/scripts/openproject.mjs my-preferences-update --time-zone "Europe/Brussels" --comment-order desc
渲染(Render)
node {baseDir}/scripts/openproject.mjs render-markdown --text "**粗体** 和 _斜体_"
node {baseDir}/scripts/openproject.mjs render-plain --text "纯文本"
帖子(Posts,论坛)
node {baseDir}/scripts/openproject.mjs post-read --id 5
node {baseDir}/scripts/openproject.mjs post-attachment-list --id 5
提醒(Reminders)
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
项目状态(Project Statuses)
node {baseDir}/scripts/openproject.mjs project-status-read --id on_track
项目阶段(Project Phases,企业版)
# 列出项目阶段定义
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
投资组合(Portfolios,企业版)
# 列出所有投资组合
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
项目集(Programs,企业版)
# 列出所有项目集
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
占位用户(Placeholder Users,企业版)
# 列出所有占位用户
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
预算(Budgets,企业版)
# 列出某项目的预算
node {baseDir}/scripts/openproject.mjs budget-list --project my-project
# 查看预算详情
node {baseDir}/scripts/openproject.mjs budget-read --id 3
会议(Meetings,企业版)
# 查看某会议
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
工作日/非工作日(Days)
# 检查某日期是否为工作日
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
配置(Configuration)
# 查看实例级配置
node {baseDir}/scripts/openproject.mjs config-read
# 查看项目级配置
node {baseDir}/scripts/openproject.mjs project-config-read --project my-project
OAuth
# 查看 OAuth 应用
node {baseDir}/scripts/openproject.mjs oauth-app-read --id 1
# 查看 OAuth 客户端凭据
node {baseDir}/scripts/openproject.mjs oauth-credentials-read --id 1
帮助文本(Help Texts)
# 列出所有属性的帮助文本
node {baseDir}/scripts/openproject.mjs help-text-list
# 查看某帮助文本
node {baseDir}/scripts/openproject.mjs help-text-read --id 1
自定义字段(Custom Fields)与选项(Options)
# 列出某层级式自定义字段的所有条目
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
自定义操作(Custom Actions)
# 查看某自定义操作
node {baseDir}/scripts/openproject.mjs custom-action-read --id 1
# 在工作包上执行某自定义操作
node {baseDir}/scripts/openproject.mjs custom-action-execute --id 1 --wp-id 42
用户组(Groups)
# 列出所有用户组
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
新闻(News)
# 列出所有新闻
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
关注者(Watchers)
# 列出某工作包的关注者
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
关联关系(Relations)
# 列出所有关联关系(可按工作包 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 页面(Wiki Pages)
# 查看 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
参考数据(Reference Data)
# 列出工作包类型
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
安全性
- 采用 API 令牌认证(使用
apikey作为用户名的 Basic Auth) - 不向 stdout 输出任何密钥或令牌
- 所有删除操作均需显式指定
--confirm参数 - 对文件上传路径进行遍历防护
- 内置速率限制,并支持指数退避重试机制
- 延迟配置校验(仅在命令实际运行时执行检查)
依赖项
commander— CLI 框架dotenv— 环境变量加载工具- Node.js 内置
fetch(要求 Node.js 版本 ≥ 18)
作者
Abdelkrim BOUJRAF — ALT-F1 SRL,布鲁塞尔 🇧🇪 🇲🇦
Twitter(X):@altf1be
热门AI工具
相关专题
本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。
0
2026.11.12
本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。
0
2026.11.12
本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。
0
2026.11.12
本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。
0
2026.11.06
围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。
0
2026.11.06
详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。
0
2026.11.06
DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。
0
2026.11.05
DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。
0
2026.11.05
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.8万人学习
共6课时 | 54.7万人学习