SCSAI Project 创建真实可用配方(实测通过)
日期:2026-07-08
实例:https://ylxt.chat/scplm,凭据 root/gyc123456,DATABASE SCPLM
结论:WBS_ID 必须先建 WBS Element 再回填引用——不是底层缺失,之前判断错误。
关键约束(一个都没少,否则报错)
project_number必须唯一 + 非空(数值型)
- C91 唯一约束卡的就是这一列(不是 wbs_id)。
- 报错示例:
→Violation of UNIQUE KEY constraint "C91"。 - 格式必须是纯数字(如
472869),PRJ-xxxx这种字符串会被PropertyValueFormatException拒绝。 - 真实已存在 Project 的 project_number 是有值的(如
1313、1365),查询时显示 NULL 是 Sciot 客户端隐藏了它。
wbs_id必须引用一个「已在 SCSAI 建好的真实 WBS Element」
- 写法:
- 不能用嵌套
(SCSAI 不认,WBS 不会被创建)。 - 不能传裸 GUID 文本(SCSAI 忽略,wbs_id 变 NULL)。
- SCSAI 的 server Method
server_update_schedule会校验:FAILURE: WBS_ID is null即源于此。
scheduling_type必须填Forward或Backward
- Method
UPDATE_SCHEDULE需要它,否则:scheduling_type=(null) is unknown in SQL: exec [UPDATE_SCHEDULE]...
正确顺序(必须分步)
- 先
action="add"建 WBS Element(独立 Item),拿到真实 id(r.items[0].id,字符串)。 - 再建 Project,同时传:
- 唯一数值
project_number scheduling_type=Forward
- 然后建 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>
BossAgents