SAP CPI 教程001 Content Modifier的作用
2026/4/23 15:53:05 网站建设 项目流程

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 请求的认证头 (Authorization)、内容类型 (Content-Type) 或目标系统需要的特定业务标识。

设置/修改 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; }

    需要专业的网站建设服务?

    联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

    立即咨询