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 端点接收的交换方法中提取数据。以下代码片段演示了从响应对象中提取数据的操作序列:
290.14.2. 示例 2:将数据写入 SAP 复制链接链接已复制到粘贴板!
概述 复制链接链接已复制到粘贴板!
本例演示了在 SAP 中创建 FlightTrip
业务对象实例的路由。路由调用 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
beans 负责将请求参数填充到 SAP 请求中,并根据上例中所示的相同操作序列来提取响应参数。
290.14.3. 示例 3:处理 SAP 的请求 复制链接链接已复制到粘贴板!
概述 复制链接链接已复制到粘贴板!
本例演示了处理从 SAP 请求到 BOOK_FLIGHT
RFC (由路由实施)的路由。此外,它演示了组件的 XML 序列化支持,使用 JAXB 到 unmarshal 和 marshal SAP 请求对象,并将对象响应到自定义 Bean。
此路由代表旅行代理 FlightCustomer
创建 FlightTrip
业务对象。路由首先将 SAP 服务器端点收到的 SAP 请求对象加载到自定义 JAXB bean 中。然后,这个自定义 Bean 在交换中被多播到三个子路由,它会收集创建动态行程所需的旅行代理、flight 连接和乘客信息。最后的子路由会在 SAP 中创建 flight trip 对象,如上例中所示。最终的子路由还会创建并返回自定义 JAXB bean,该 Bean 会被 marshaled 到 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,它将对复杂表参数 CONNINFO
的序列化形式 marshals。
JAXB bean 的 root 元素类型的名称对应于带有 _TABLE
后缀的行结构类型的名称,bean 包含行元素列表。
ConnectionInfo bean 复制链接链接已复制到粘贴板!
以下列表演示了一个 JAXB bean,它被处理到上述表行元素的序列化形式: