SCSAI Project 创建真实可用配方(实测通过)

SCSAI Project 创建真实可用配方(实测通过)

日期:2026-07-08

实例:https://ylxt.chat/scplm,凭据 root/gyc123456,DATABASE SCPLM

结论:WBS_ID 必须先建 WBS Element 再回填引用——不是底层缺失,之前判断错误。

关键约束(一个都没少,否则报错)

  1. project_number 必须唯一 + 非空(数值型)
  • C91 唯一约束卡的就是这一列(不是 wbs_id)。
  • 报错示例:Violation of UNIQUE KEY constraint "C91"
  • 格式必须是纯数字(如 472869),PRJ-xxxx 这种字符串会被 PropertyValueFormatException 拒绝。
  • 真实已存在 Project 的 project_number 是有值的(如 13131365),查询时显示 NULL 是 Sciot 客户端隐藏了它。
  1. wbs_id 必须引用一个「已在 SCSAI 建好的真实 WBS Element」
  • 写法:
  • 不能用嵌套 (SCSAI 不认,WBS 不会被创建)。
  • 不能传裸 GUID 文本(SCSAI 忽略,wbs_id 变 NULL)。
  • SCSAI 的 server Method server_update_schedule 会校验:FAILURE: WBS_ID is null 即源于此。
  1. scheduling_type 必须填 ForwardBackward
  • Method UPDATE_SCHEDULE 需要它,否则:scheduling_type=(null) is unknown in SQL: exec [UPDATE_SCHEDULE]...

正确顺序(必须分步)

  1. action="add"WBS Element(独立 Item),拿到真实 id(r.items[0].id,字符串)。
  2. 再建 Project,同时传:
  • 唯一数值 project_number
  • scheduling_type=Forward
  1. 然后建 Part / Activity2 / Milestone 等其余对象。

易错点

  • owned_by_id 是引用 Identity,必须传真实 id,不能传字符串名(如 'Stamping'is not a valid id)。不需要就留空/不传。
  • 客户端返回结构:成功时 r.items[0].id字符串(但保险起见用 id.then 判断 await 一次)。

已验证脚本

D:\openclaw\bossagents\import_car_plan_final.mjs(实测 exit 0,落库 10 对象:

1 WBS Element + 1 Project + 1 Part + 5 Activity2 任务 + 2 Activity2 里程碑)。

关于仓库 rule-engine 的 create_pre-004

builtin-project-create-pre-004 意图是自动建 WBS Element 并回填 wbs_id,但经探针验证:

execute('create_pre') 跑完后 context.item_properties 仍为空(vm 沙箱里的修改未回写外层 context)。

因此当前不要依赖 rule-engine.createItem 建 Project,直接用上面分步裸 AML 方案最稳。

一键验证(最小 Project)

<AML><Item type="WBS Element" action="add"><name>TEST WBS</name></Item></AML>
<!-- 取 id=X -->
<AML><Item type="Project" action="add">
  <name>TEST</name>
  <project_number>472869</project_number>
  <scheduling_type>Forward</scheduling_type>
  <wbs_id><Item type="WBS Element" action="get" id="X"/></wbs_id>
</Item></AML>
← 返回案例列表
分享:
🤖 Try Now →
🤖
🎁