用途
calculations-toolkit 是 SAP LeanIX AI 插件套件中的计算助手,面向 LeanIX Calculations(计算字段)。其核心用途是帮助用户创建、调试、设计和管理计算字段——这类字段会根据同一事实表上的其他字段或关系自动填充计算值。
主要能力
- 两类计算支持:fact-sheet 类型用于在事实表上根据其自身数据计算字段值;relation 类型用于在两个事实表之间的关系连线上,根据任一方的数据计算字段值。
- 数据模型发现:工具强调不应假设存在标准事实表类型、字段或关系,每个工作区都有自定义配置。事实表类型在 create_calculation 工具的 schema 中枚举;字段、关系与枚举值通过 GraphQL SDL 获取(先调用 list_graphql_types 查找类型名,再调用 get_graphql_type_definitions 获取定义)。
- 配置校验:在生成代码前校验目标字段是否存在、是否可写、类型是否已知,来源字段与关系是否存在,单一/多选字段的枚举值是否有效。返回无效枚举字符串会静默清空字段而不报错。
- 代码生成:提供事实表计算与关系计算的模板结构,要求使用 export function main(),同步执行,返回与目标字段类型匹配的单一值。
- 试运行测试:可在沙箱中对真实事实表执行代码,不创建或修改任何计算,用于验证逻辑与边界情况。
- 工作区管理:支持列出、分析、修复和整理已有计算。
使用方式
工具通过 LeanIX MCP 服务器运行。所有 LeanIX API 调用均通过 MCP 工具完成,不需要 shell 命令、令牌交换或 curl;认证由 MCP 服务器内部处理。
调用前需确认计算工具集可用:先调用 mcp__leanix__list_calculations() 做轻量检查。若工具不可用,计算工具集默认隐藏且为可选,需在 MCP 服务器 URL 中附加 ?toolsets=inventory,calculations,custom_reports。Claude Code(OAuth)可用如下命令重新添加:
claude mcp remove leanix claude mcp add --transport http leanix "https://mcp.leanix.net/services/mcp-server/v1/mcp?toolsets=inventory,calculations,custom_reports"
Claude Code(.mcp.json)需将 URL 改为:
https://{SUBDOMAIN}.leanix.net/services/mcp-server/v1/mcp?toolsets=inventory,calculations
更新后重启 Claude Code 并重新调用本技能。若完全没有 mcp__leanix__* 工具,说明未连接 LeanIX MCP,可用以下命令快速设置:
claude mcp add --transport http leanix "https://mcp.leanix.net/services/mcp-server/v1/mcp?toolsets=inventory,calculations,custom_reports"
若仅 mcp__leanix__authenticate 与 mcp__leanix__complete_authentication 可用,应提示用户运行 /mcp 并认证 leanix 服务器(浏览器会自动打开)。不要自行调用 authenticate,也不要建议使用 claude mcp add,因为前者只返回 URL 而不触发浏览器流程,后者会覆盖插件自带的服务器。
工作流程
- 确定意图:检查用户消息是否已表达明确意图。包含“what can”“capabilities”“help me”等归入理解能力;“create”“build”“new calculation”归入创建新计算;“debug”“fix”“error”“not working”归入调试失败计算;“list”“manage”“show”“audit”“analyze”“existing”归入管理工作区计算。若意图确实模糊,则询问用户,注意 AskUserQuestion 仅支持 2–4 个选项,超过 4 个时应以编号列表形式列出并让用户输入选择。
- 验证工具集:确定意图后立即调用 mcp__leanix__list_calculations()。
- 发现工作区数据模型:事实表类型从 create_calculation 工具 schema 枚举;字段键、关系名与枚举值通过 GraphQL SDL 发现。
- 识别目标字段:从数据模型呈现事实表类型与字段,不要要求用户自由输入字段名。若目标字段不存在,需先在 LeanIX UI 中创建:进入事实表配置页选择目标分区,点击 Add field,在右侧面板配置参数,检查并保存。
- 识别来源数据:从数据模型呈现实际字段与关系。
数据访问方式:
- 同事实表字段:fact-sheet 计算用 data.fieldName
- 相关事实表字段:relation 计算用 data.factSheet.fieldName
- 生命周期:data.lifecycle.currentPhase 或 data.factSheet.lifecycle.currentPhase
- 关系:data.{relationName}
- 经关系访问相关事实表字段:data.{relationName}[i].factsheet.{field}
- 关系属性:data.{relationName}[i].{attributeName}
- NA 字段:data.naFields(字段键字符串数组)或 data.factSheet.naFields
- 校验配置:在生成代码前确认所有名称存在。
- 定义计算逻辑:根据目标选择模式,如计数关系 data.rel.length、求和 reduce、平均、最小/最大、派生状态、日期差、字符串拼接、去重、条件判断、评分、完整性检查、默认值等,可加载 references/TEMPLATES.md 获取模板。
- 生成代码:遵守关键规则——无 import、无 async/await、无 fetch()、必须读取至少一个 data.* 字段(否则 API 拒绝)、使用 export function main()(绝不用 async)、返回与目标字段类型匹配的单一值、返回 null 清空字段、返回 undefined 表示不改变,并添加行内注释说明非显而易见的逻辑。
- 试运行:推荐在创建前用真实数据测试代码。事实表计算可用 mcp__leanix__text_to_fact_sheets 找到样本事实表,再用 mcp__leanix__test_run_calculation 传入 type、code、affected_field_key、affected_fact_sheet_type、affected_fact_sheet_id 运行。
与 Automations 的区别
- 用途:Calculations 填充计算字段;Automations 通过动作响应事件。
- 触发:Calculations 在来源字段变化时自动触发;Automations 有 12 种显式触发类型。
- API 调用:Calculations 不允许;Automations 允许(fetch、GraphQL)。
- 异步:Calculations 不支持;Automations 支持。
- 输出:Calculations 返回单一值(字符串/数字/数组);Automations 返回带字段名的对象。
- 创建:Calculations 单次 API 调用;Automations 需两次调用(脚本 + 模板)。
限制与反模式
以下模式会导致失败,应避免:async function main()(不支持异步)、await fetch(...)(不允许 API 调用)、import 语句(不允许导入)、return { field: value }(必须返回单一值)、在 fact-sheet 计算中使用 data.factSheet.field(应直接用 data.field)、在 relation 计算中使用 data.field(应使用 data.factSheet.field)、读取目标字段(会造成循环依赖错误)、使用技术用户令牌中的 principal.id 作为 owner_id(应使用 search_users 得到的真实人类用户 userId)。
其他约束:基础字段(内置)不能作为目标;每个字段只能有一个计算;不能将目标字段作为来源以避免循环。工作区若有自定义配置,使用错误名称会导致 configurationErrorCount 错误。
参考文件(按需加载)
- references/API-REFERENCE.md:创建计算时加载,含 API 端点与 CalculationDto
- references/TEMPLATES.md:生成代码时加载,含即用型计算模板
- references/LEANIX-MODEL.md:理解字段类型时加载,含事实表类型、关系、字段访问
- references/NAMING-CONVENTION.md:标准化命名时加载
- references/ANALYSIS-RULES.md:分析计算时加载,含代码分析规则与工作区检查
注:具体收费、价格及平台支持范围资料中暂未提供。