SuperAPI AI 工具集

btp-diagram-generator

编程与开发

查看项目

更新于 10-16 18:29

技能介绍

用途

BTP Solution Diagram Generator 用于生成 SAP BTP(Business Technology Platform)解决方案架构图,产出符合 SAP BTP Solution Diagram 指南的 draw.io(.drawio)原生文件,并通过运行时已配置的 draw.io MCP 服务器打开。其校验与交付纪律参考 Archify:确定性产物、机器可读的修复回执、显式质量门、保留上一次良好产物,以及区分自动化审查与感知审查的结论。

触发场景包括:绘制 BTP 架构、生成展示 CAP + HANA Cloud + Build Workzone 的 BTP 解决方案图、创建 SAP BTP 集成全景的 draw.io、生成 L0/L1/L2 的 BTP 图。若请求是通用流程图、时序图或非 SAP 架构,则不应使用本技能,应改用 Mermaid 或普通 draw.io 流程。

主要能力

  • 快速路径(推荐):使用 btp_builder Python 包,自动负责图标查找、SAP 调色板、端口固定、标签 HTML、A4 尺寸、SVG 放大与校验。典型 L1 图约 20 行代码。
  • 确定性输出:同一作者图产出相同 XML 字节与稳定图 ID。save() 先校验,再原子替换目标文件;提交失败时保留原有产物。
  • 图标发现:提供 list_aliases、list_icons、lookup_icon 等接口,支持模糊匹配(如 "task center"、"cpi"、"hana cloud")。若 lookup_icon 抛出 IconNotFound,可回退到样式化图块(external(label, kind="sap"))并在最终回复中说明。
  • 手动 XML 路径(高级/小众场景):当快速路径无法覆盖需求(如特殊图例变体、自定义流程协议胶囊、构建器尚不支持的新布局)时使用,文档记录了构建器生成的底层 XML 原语。

使用方式

快速路径示例(可端到端运行):

# scripts/examples/task_center_arch.py
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from btp_builder import BtpDiagram

d = BtpDiagram(level="L1", title="Task Center Reference Architecture")

btp = d.btp_container(x=260, y=80, w=560, h=440)
sub = d.subaccount(parent=btp, label="Subaccount",
    x=btp.x + 24, y=btp.y + 110, w=520, h=170)

wz = d.service("work zone",   in_=sub, x=sub.x + 60, y=sub.y + 60)
tc = d.service("task center", right_of=wz)
ci = d.service("cloud identity", below=tc)

eu = d.user("End User", x=60, y=btp.y + 100)
ac = d.app_client("Application Clients\n(Mobile or Desktop)", below=eu)

s4    = d.external("SAP S/4HANA\nOn-Premise Solutions",
    x=btp.right_edge() + 40, y=btp.y + 70, kind="sap")
third = d.external("3rd Party\nApplications", below=s4, kind="non-sap")
cloud = d.external("SAP Cloud\nApplications", below=third, kind="sap")
idp   = d.idp("3rd-party Identity Provider",
    x=ci.center_x() - 140, y=btp.bottom_edge() + 60)

d.connect(eu, ac, direction="down")
d.connect(ac, wz, direction="right")
d.connect(wz, tc, kind="dblhd")
d.connect(tc, ci, kind="dblhd", direction="down")
d.connect(tc, s4); d.connect(tc, third); d.connect(tc, cloud)
d.connect(idp, ci, kind="dashed", direction="up")

d.save("btp-task-center-architecture.drawio")

从仓库根目录通过 uv run python <script>.py 运行。save() 先校验,若有问题抛出 ValueError 并附完整错误列表;警告会打印。

快速路径 API 摘要:

调用 返回 说明
BtpDiagram(level, title) builder level ∈ L0/L1/L2,决定图标尺寸与标签字重
.btp_container(x,y,w,h, sub_label, env_label, with_logo) NodeRef 浅蓝外框 + SAP 角标 + Subaccount/Multi-Cloud 标签
.subaccount(parent, label, ...) NodeRef BTP 容器内的白色卡片
.inner_card(parent, label, ...) NodeRef 通用白色子卡片(如 CIS 服务组)
.service(name, in_=, right_of=, left_of=, below=, above=) NodeRef name 通过 references/icon-aliases.json 模糊匹配
.user(label, kind="sap") NodeRef kind ∈ sap / non-sap / highlight
.app_client(label, ...) NodeRef 通用移动/桌面图块
.external(label, kind="sap"/"non-sap", ...) NodeRef 右侧外部系统图块
.idp(label, ...) NodeRef 第三方身份提供方图块
.connect(src, tgt, kind, direction) edge id kind ∈ std/dblhd/dashed/optional/auth/scim/trust/neutral;direction 自动固定端口
.save(path, validate=True) Path 校验后原子提交确定性 XML(出错抛出异常)

位置参数(right_of、left_of、below、above、in_)自动放置节点;每行/列仅首个锚点需显式设置 x,y。

图标名称发现:

from btp_builder import list_aliases, list_icons, lookup_icon
print(list(list_aliases())[:30])
print(lookup_icon("integration suite", "L1")["key"])

打开图:

uv run python skills/btp-diagram-generator/scripts/open_diagram.py btp-task-center-architecture.drawio

若无系统打开器,则回退打印 https://app.diagrams.net/?…#create=... URL。若运行时存在 draw.io MCP 工具,优先使用;仅调用工具列表中实际出现的 MCP 工具。

输入与默认值

生成前需确认缺失项,未指定时默认 L1。

输入 默认 说明
受众层级 L1 L0=业务概览(无图例、中性连接线);L1=技术(服务+主流程);L2=详细(数据流、协议、组件)
BTP 服务/SaaS 应用 (必须询问) 如 CAP、Build Code、Integration Suite、HANA Cloud、SAC、AI Core、Joule、Build Workzone、Identity Authentication、Destination、Connectivity
非 BTP 系统 (可选) 如 S/4HANA Cloud、SuccessFactors、Ariba、第三方 SaaS、本地系统、终端用户
环境/运行时 Cloud Foundry Cloud Foundry、Kyma、ABAP Environment
区域/多区域 single 影响分组容器
主流程 (必须询问) 什么连接什么、方向、目的
输出格式 .drawio + PNG 始终 .drawio;可选经 draw.io CLI 导出 PNG(-s 2)、SVG 或 PDF
输出文件名 btp-diagram.drawio 默认保存到工作区根目录

若用户给出的一行提示已含足够服务与清晰流程,可直接进行,并在最终回复中说明假设。

组件白名单纪律:布局前从请求中建立显式组件白名单;不要添加熟悉产品作为装饰;保留请求的顺序为有序边列表。

适用场景与限制

适用:SAP BTP 解决方案架构图、集成全景图、L0/L1/L2 分层图,需符合 SAP BTP Solution Diagram 指南的 draw.io 文件。

限制:不适用于通用流程图、时序图或非 SAP 架构;手动 XML 路径仅用于快速路径无法覆盖的小众场景;图标库缺失的服务需使用样式化回退图块并在回复中列出;SAP BTP 图标在 draw.io 中以 base64 内嵌 SVG 形式存在,不存在 mxgraph.sap.* 模板族,生成 shape=mxgraph.sap.foo 会得到空白方块;SVG 根元素固有尺寸为 16×16,需在重新编码前将根 svg 的 width/height 修补为目标单元格尺寸(如 L1 为 48),保持 viewBox 不变,否则图标会模糊。