SCSAI 方法执行能力诊断报告 — 2026-07-21
诊断结论
SCPLM SCSAI 安装(http://114.113.153.234/scplm)的三个核心 API 能力如下:
| API | 能力 | 证据 |
|-----|------|------|
| ApplyAML / ApplyItem | ✅ 正常 | ItemType 创建、Allowed Permission 创建均成功 |
| ApplyMethod | ❌ 完全禁用 | 所有方法(C#/JS/标准)均无响应或报错 "method type not supported" |
| ApplySQL | ⚠️ 仅读权限 | SELECT 返回数据;UPDATE 返回成功但实际不写入(静默忽略) |
根因分析
applyMethod 禁用
applyMethod('Identity', 'GetServerTime')等标准 SCSAI JS 方法均无响应applyMethod('ItemType', 'SetBAItemTypePermission')→"method type (c#) not currently supported"applyMethod('ItemType', 'BA_CreateMinItemType')(改为 JS 后)→"method type (JavaScript) not currently supported"- 结论:SCSAI 的
ApplyMethodSOAP 端点被服务端配置禁用(不是单个方法问题)
applySQL 只读
applySQL("UPDATE ... SET label='UPDATED' WHERE id='...'")→success: true,- 但查询 label 值仍为原值 → UPDATE 被数据库层静默拒绝
- 原因:SCSAI IOM 连接使用的数据库用户(
SCPLM或Innovator)对[SCPLM].[innovator].[ITEMTYPE]只有 SELECT 权限 - INSERT/UPDATE/DELETE 被数据库触发器或用户权限静默忽略
default_permission_id 的特殊性
ITEMTYPE.default_permission_id是 SCSAI 核心受保护列- 唯一写入路径:
- C# Method
SetBAItemTypePermission:调用newIdApplySQL写列 → 被applyMethod禁用拦截 - 客户端
applySQL直接 UPDATE → 被数据库写权限拦截
Allowed Permission(is_default=1)可以正确创建,但 SCSAI 权限检查器不降级使用它,直接要求default_permission_id列有值
受影响的操作
- ❌
BA_CreateMinItemType(C#→改为JS后仍被封) - ❌
SetBAItemTypePermission(唯一能写 default_permission_id 的方法) - ❌
applySQL UPDATE(任何写操作均不生效) - ❌
applyMethod任何自定义/标准方法
不受影响的操作
- ✅
sendAML/applyItem:创建 ItemType、Allowed Permission(只读操作) - ✅
queryItems:select查询正常工作 - ✅
smartCreateItemType:创建 ItemType ✅,但实例创建 ❌
修复方案(需要服务端操作)
方案 A(推荐):恢复 applyMethod 端点
SCSAI 服务器配置中重新启用 ApplyMethod SOAP 端点:
- 检查 IIS 或 SCSAI 配置,确认
ApplyMethod是否被显式禁用 - 如是,取消禁用
- 或授予 SCSAI 应用池标识对
[SCPLM].[innovator]架构的写权限
方案 B:授予数据库写权限
给 SCSAI 连接数据库用户(SQL Server Login)授予:
GRANT UPDATE ON [SCPLM].[innovator].[ITEMTYPE] TO [SCPLM_USER];
这样客户端 applySQL 就能真正 UPDATE default_permission_id 列。
方案 C(临时绕过):使用 Part 类型作为模板
当需要创建自定义对象类时:
- 使用标准
Part类型(已有正确default_permission_id) - 通过 Part + 分类/属性扩展来模拟对象类
- 不依赖
default_permission_id
关键文件修改历史
server/utils/SCSAI-client.js:已添加applyMethod、applySQL、ApplyItem实现server/routes/unified-create.js:ensureItemType依赖BA_CreateMinItemType+applySQLserver/utils/SCSAI-tools.js:smartCreateItemType使用applyItem(=sendAML)
测试脚本
_final_diag.js:最终诊断(applyMethod/applySQL/applyItem 三路验证)_deep_diff.js:Part vs ZFix90811 字段对比_check_ap.js:Allowed Permission 关系验证
SCSAI 凭据
- 服务器:http://114.113.153.234/scplm
- 用户名:root
- 密码:gyc123456;(config.yaml 中)
- 数据库:SCPLM
default_permission_id参考 Permission ID:5C07EB829D4241F6BB884952960FAF58(New Part)
BossAgents