290.14. SAP 示例
290.14.1. 示例 1:从 SAP 读取数据 复制链接链接已复制到粘贴板!
概述 复制链接链接已复制到粘贴板!
本例演示了一个从 SAP 读取 FlightCustomer
业务对象数据的路由。该路由调用 FlightCustomer
BAPI 方法,即 BAPI_FLCUST_GETLIST
,使用 SAP 同步 RFC 目标端点来检索数据。
用于路由的 Java DSL 复制链接链接已复制到粘贴板!
示例路由的 Java DSL 如下:
from("direct:getFlightCustomerInfo") .to("bean:createFlightCustomerGetListRequest") .to("sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST") .to("bean:returnFlightCustomerInfo");
from("direct:getFlightCustomerInfo")
.to("bean:createFlightCustomerGetListRequest")
.to("sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST")
.to("bean:returnFlightCustomerInfo");
用于路由的 XML DSL 复制链接链接已复制到粘贴板!
同一路由的 Spring DSL 如下所示:
createFlightCustomerGetListRequest bean 复制链接链接已复制到粘贴板!
createFlightCustomerGetListRequest
bean 负责在后续 SAP 端点的 RFC 调用中使用的交换方法中构建 SAP 请求对象。以下代码片段演示了构建请求对象的操作序列:
returnFlightCustomerInfo bean 复制链接链接已复制到粘贴板!
returnFlightCustomerInfo
bean 负责从 SAP 响应对象中提取数据,在其从之前的 SAP 端点接收的 Exchange 方法中提取数据。以下代码片段演示了从响应对象中提取数据的操作序列:
290.14.2. 示例 2:将数据写入 SAP 复制链接链接已复制到粘贴板!
概述 复制链接链接已复制到粘贴板!
本例演示了一个路由,它在 SAP 中创建 FlightTrip
business object 实例。路由调用 FlightTrip
BAPI 方法 BAPI_FLTRIP_CREATE
,使用目标端点来创建对象。
用于路由的 Java DSL 复制链接链接已复制到粘贴板!
示例路由的 Java DSL 如下:
from("direct:createFlightTrip") .to("bean:createFlightTripRequest") .to("sap-srfc-destination:nplDest:BAPI_FLTRIP_CREATE?transacted=true") .to("bean:returnFlightTripResponse");
from("direct:createFlightTrip")
.to("bean:createFlightTripRequest")
.to("sap-srfc-destination:nplDest:BAPI_FLTRIP_CREATE?transacted=true")
.to("bean:returnFlightTripResponse");
用于路由的 XML DSL 复制链接链接已复制到粘贴板!
同一路由的 Spring DSL 如下所示:
事务支持 复制链接链接已复制到粘贴板!
SAP 端点的 URL 将 transacted
选项设置为 true
。如 第 290.11 节 “事务支持” 所述,当启用这个选项时,端点可确保在调用 RFC 调用前启动 SAP 事务会话。由于此端点的 RFC 在 SAP 中创建新数据,因此需要此选项才能在 SAP 中进行路由的更改。
填充请求参数 复制链接链接已复制到粘贴板!
createFlightTripRequest
和 returnFlightTripResponse
Bean 负责将请求参数填充到 SAP 请求中,再从 SAP 响应中提取响应参数,其遵循上例中所示的操作序列。
290.14.3. 示例 3:从 SAP 处理请求 复制链接链接已复制到粘贴板!
概述 复制链接链接已复制到粘贴板!
本例演示了一个路由,它处理从 SAP 到 BOOK_FLIGHT
RFC 的请求,该请求由路由实现。此外,它还演示了组件的 XML 序列化支持,使用 JAXB 到 unmarshal 和 marshal SAP 请求对象,并将对象响应到自定义 Bean。
此路由代表旅行代理 FlightTrip
业务对象 FlightCustomer
。路由首先由 SAP 服务器端点接收的 SAP 请求对象到自定义 JAXB bean 中。然后,这个自定义 Bean 在交换到三个子路由中多播,它会收集创建旅行行程所需的旅行代理、flight 连接和乘客信息。最后的子路由会在 SAP 中创建 flight trip 对象,如上例中所示。最后的子路由也创建并返回自定义 JAXB bean,它被放入 SAP 响应对象中,并由服务器端点返回。
用于路由的 Java DSL 复制链接链接已复制到粘贴板!
示例路由的 Java DSL 如下:
用于路由的 XML DSL 复制链接链接已复制到粘贴板!
同一路由的 XML DSL 如下:
BookFlightRequest bean 复制链接链接已复制到粘贴板!
以下列表演示了一个 JAXB bean,它来自 SAP BOOK_FLIGHT
请求对象的序列化形式:
BookFlightResponse bean 复制链接链接已复制到粘贴板!
以下列表演示了一个 JAXB bean,它类似于 SAP BOOK_FLIGHT
响应对象的序列化形式:
响应对象的复杂参数字段被序列化为响应的子元素。
FlightInfo bean 复制链接链接已复制到粘贴板!
以下列表演示了一个 JAXB bean,它类似于复杂结构参数的序列化形式 FLTINFO
:
ConnectionInfoTable bean 复制链接链接已复制到粘贴板!
以下列表演示了一个 JAXB bean,它类似于复杂 table 参数的序列化形式 CONNINFO
。
JAXB bean 的根元素类型的名称对应于后缀为 _TABLE
的行结构类型的名称,而 bean 包含行元素的列表。
ConnectionInfo bean 复制链接链接已复制到粘贴板!
以下列表演示了一个 JAXB bean,它类似于上述表行元素的序列化格式: