01CPI
SAP Cloud Platform Integration (CPI) 是 SAP 新一代的云端集成平台,核心功能是帮助企业快速、安全地连接各种云端和本地系统,打破数据孤岛,实现业务流程自动化。它既提供了低代码的开发环境,也内置了丰富的预置连接器和模板,能显著降低集成的门槛和工作量。
1.1核心功能速览
下表汇总了 SAP CPI 的主要功能模块,方便你快速了解:
功能类别 | 具体功能 | 主要作用 |
|---|---|---|
| 🔌 连接与集成 | 预置集成包与连接器 | 提供2600+预置场景和170+第三方应用连接器,实现快速开箱即用。 |
| 协议与系统支持 | 支持HTTP、SFTP、IDoc、OData、SOAP等多种协议,打通SAP与非SAP系统。 | |
| 🛠️ 消息处理与编排 | 图形化集成流设计 | 提供可视化工具,通过拖拽方式构建数据转换、路由、增强等集成逻辑。 |
| 数据映射与转换 | 内置图形化映射工具和脚本支持,解决不同系统间的数据格式差异问题。 | |
| 📊 设计与开发 | API 全生命周期管理 | 提供从设计、发布、保护到监控API的完整工具,支持API货币化和生态构建。 |
| AI 辅助设计 | 集成Integration Advisor,利用机器学习自动推荐接口和映射,加速项目启动。 | |
| 🔎 监控与运维 | 端到端消息监控 | 提供集中监控仪表盘,实时追踪消息处理状态,快速定位并处理错误。 |
| 预置错误处理机制 | 支持自动重试、错误日志和告警等机制,保证集成流程的稳定与可靠性。 | |
| ✨ 高级与创新组件 | 边缘集成单元 | 支持在本地或边缘侧部署集成流,满足低延迟、本地数据处理需求。 |
| 交易伙伴管理 | 支持B2B场景,简化EDI交易伙伴的管理和配置。 | |
| 🏗️ 部署与安全 | 多云/混合部署 | 支持纯云端、本地及混合部署模式,灵活适应不同企业架构。 |
| 企业级安全 | 提供数据加密、角色权限控制、OAuth2.0/SAML等多种认证授权机制。 |
02Content Modifier
简单来说,它就像是一个“变量处理器”,专门用来管理消息在流转过程中携带的各种属性。我们可以从以下几个方面来理解它的具体作用:
1. 三大核心操作
Content Modifier 主要针对消息的三种元数据进行操作:
操作类型 | 作用 | 使用场景举例 |
|---|---|---|
| 设置/修改 Header | 操作消息的头部信息。这些信息会随消息一起发送给目标系统。 | 设置 HTTP 请求的认证头 ( |
| 设置/修改 Property | 操作只在 CPI 集成流内部有效的属性。这些属性不会发送给外部系统,仅用于流程内的逻辑判断。 | 存储从消息体中提取的订单号,用于后续的路由判断;存储临时计算结果,用于数据映射。 |
| 设置 Exchange Property | 操作整个消息交换上下文(即一个消息处理实例)的全局属性。 | 在流程的不同步骤(如多个集成流之间)传递共享信息,比如租户 ID 或错误处理状态。 |
2. 动态内容生成
Content Modifier 支持两种内容赋值方式:
静态值:直接写固定的字符串,例如设置
Content-Type = application/xml。动态表达式:支持使用Groovy 脚本或XPath从消息体中提取值,或者使用CPI 内置的变量占位符(如
${property.propertyName})。
动态表达式的典型场景:
例如,你从数据库中查出了一个订单号OrderID存储在 Property 中。你可以在 Content Modifier 中设置 HeaderOrderNumber,其值为${property.OrderID},这样在调用下游系统时,就可以将这个动态的订单号放入 HTTP Header 中传递。
3. 数据赋值与覆盖
Content Modifier 可以对变量进行赋值。如果同一个 Header 或 Property 在后续的流程中被再次设置,Content Modifier 会执行覆盖操作。
初始设置:在流程开始时定义必要的变量。
中间修改:根据业务逻辑(如条件分支)更新变量的值。
03实例
发送XML的样式,我需要通过xpath获取一个xml文件中截取出几个属性节点。
我现在取一个变量名字是sec,然后通过xpath语法获取xml中节点是sec的值。
同理我定义两个变量去接受XML文件中的节点值。
现在我希望把属性节点获取到的数据添加到整个XML文件中。如果我想看到效果,我们还需要写一段groovy的代码,代码的样式是固定的
import com.sap.gateway.ip.core.customdev.util.Message; def Message processData(Message message) { def body = message.getBody(java.lang.String) as String; def messageLog = messageLogFactory.getMessageLog(message); if(messageLog != null) { messageLog.setStringProperty("log1","Printing Payload As Attachment") messageLog.addAttachmentAsString("log1",body,"text/plain"); } return message; }