SCSAI 方法执行能力诊断报告 — 2026-07-21

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 的 ApplyMethod SOAP 端点被服务端配置禁用(不是单个方法问题)

applySQL 只读

  • applySQL("UPDATE ... SET label='UPDATED' WHERE id='...'")success: true,
  • 但查询 label 值仍为原值 → UPDATE 被数据库层静默拒绝
  • 原因:SCSAI IOM 连接使用的数据库用户(SCPLMInnovator)对 [SCPLM].[innovator].[ITEMTYPE] 只有 SELECT 权限
  • INSERT/UPDATE/DELETE 被数据库触发器或用户权限静默忽略

default_permission_id 的特殊性

  • ITEMTYPE.default_permission_id 是 SCSAI 核心受保护列
  • 唯一写入路径:
  1. C# Method SetBAItemTypePermission:调用 newIdApplySQL 写列 → 被 applyMethod 禁用拦截
  2. 客户端 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(只读操作)
  • queryItemsselect 查询正常工作
  • 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:已添加 applyMethodapplySQLApplyItem 实现
  • server/routes/unified-create.jsensureItemType 依赖 BA_CreateMinItemType + applySQL
  • server/utils/SCSAI-tools.jssmartCreateItemType 使用 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)
← 返回案例列表
分享:
🤖 Try Now →
🤖
🎁