55.3. Configuration
SAP 组件维护三个映射来存储目标数据、服务器数据和存储库数据。目标 数据存储和 服务器数据存储在 特殊的配置对象 SapConnectionConfiguration
上配置,它会自动注入到 SAP 组件(在蓝图 XML 配置或 Spring XML 配置文件的上下文)。存储库数据存储 必须直接在相关的 SAP 组件上配置。
55.3.1. 配置概述
SAP 组件维护三个映射来存储目标数据、服务器数据和存储库数据。组件的属性 destinationDataStore
来存储目标名称的密钥,属性 serverDataStore
,存储由服务器名称密钥的服务器数据,以及属性 repositoryDataStore
,存储由存储库名称密钥的存储库数据。这些配置必须在初始化过程中传递给组件。
示例
以下示例演示了如何在蓝图 XML 文件中配置目标数据存储和示例服务器数据存储。sap-configuration
bean (类型为 SapConnectionConfiguration
)将自动注入到此 XML 文件中使用的任何 SAP 组件中。
<?xml version="1.0" encoding="UTF-8"?> <blueprint ... > ... <!-- Configures the Inbound and Outbound SAP Connections --> <bean id="sap-configuration" class="org.fusesource.camel.component.sap.SapConnectionConfiguration"> <property name="destinationDataStore"> <map> <entry key="quickstartDest" value-ref="quickstartDestinationData" /> </map> </property> <property name="serverDataStore"> <map> <entry key="quickstartServer" value-ref="quickstartServerData" /> </map> </property> </bean> <!-- Configures an Outbound SAP Connection --> <!-- *** Please enter the connection property values for your environment *** --> <bean id="quickstartDestinationData" class="org.fusesource.camel.component.sap.model.rfc.impl.DestinationDataImpl"> <property name="ashost" value="example.com" /> <property name="sysnr" value="00" /> <property name="client" value="000" /> <property name="user" value="username" /> <property name="passwd" value="passowrd" /> <property name="lang" value="en" /> </bean> <!-- Configures an Inbound SAP Connection --> <!-- *** Please enter the connection property values for your environment ** --> <bean id="quickstartServerData" class="org.fusesource.camel.component.sap.model.rfc.impl.ServerDataImpl"> <property name="gwhost" value="example.com" /> <property name="gwserv" value="3300" /> <!-- The following property values should not be changed --> <property name="progid" value="QUICKSTART" /> <property name="repositoryDestination" value="quickstartDest" /> <property name="connectionCount" value="2" /> </bean> </blueprint>
55.3.2. 目标配置
目的地的配置在 SAP 组件的 destinationDataStore
属性中维护。此映射中的每个条目配置与 SAP 实例的唯一出站连接。每个条目的 key 是出站连接的名称,用于目的地端点 URI 的 destinationName 组件,如 URI 格式部分所述。
每个条目的值是目标数据配置对象 - org.fusesource.camel.component.sap.model.rfc.impl.DestinationDataImpl
- 指定出站 SAP 连接的配置。
目标配置示例
以下蓝图 XML 代码演示了如何使用名称 quickstartDest
配置示例目的地。
<?xml version="1.0" encoding="UTF-8"?> <blueprint ... > ... <!-- Create interceptor to support tRFC processing --> <bean id="currentProcessorDefinitionInterceptor" class="org.fusesource.camel.component.sap.CurrentProcessorDefinitionInterceptStrategy" /> <!-- Configures the Inbound and Outbound SAP Connections --> <bean id="sap-configuration" class="org.fusesource.camel.component.sap.SapConnectionConfiguration"> <property name="destinationDataStore"> <map> <entry key="quickstartDest" value-ref="quickstartDestinationData" /> </map> </property> </bean> <!-- Configures an Outbound SAP Connection --> <!-- *** Please enter the connection property values for your environment *** --> <bean id="quickstartDestinationData" class="org.fusesource.camel.component.sap.model.rfc.impl.DestinationDataImpl"> <property name="ashost" value="example.com" /> <property name="sysnr" value="00" /> <property name="client" value="000" /> <property name="user" value="username" /> <property name="passwd" value="password" /> <property name="lang" value="en" /> </bean> </blueprint>
例如,在按照上述蓝图 XML 文件配置目的地后,您可以使用以下 URI 在 quickstartDest
目的地上调用 BAPI_FLCUST_GETLIST
远程功能调用:
sap-srfc-destination:quickstartDest:BAPI_FLCUST_GETLIST
55.3.2.1. tRFC 和 qRFC 目的地的拦截器
前面的目的地配置示例显示 CurrentProcessorDefinitionInterceptStrategy
对象的实例化。此对象在 Camel 运行时安装拦截器,它允许 Camel SAP 组件在处理 RFC 事务时跟踪 Camel 路由中的位置。
对于事务的 RFC 目标端点(如 sap-trfc-destination
和 sap-qrfc-destination
),且必须在 Camel 运行时中安装,以便正确管理出站 RFC 通信。如果在运行时找不到策略,则 Destination RFC Transaction Handlers 会在 Camel 日志中发出警告。在这种情况下,需要重新置备并重启 Camel 运行时来正确地管理出站事务的 RFC 通信。
55.3.2.2. 登录和验证选项
下表列出了用于在 SAP 目标数据存储中配置目的地的 日志和身份验证选项 :
Name | 默认值 | 描述 |
| SAP 客户端,在参数上强制的日志。 | |
| 登录 user,在 参数上登录基于密码的身份验证。 | |
| 可以使用登录用户别名,而不是登录用户。 | |
| 用于登录到 ABAP AS 的用户身份。JCo 运行时使用,如果目标配置使用 SSO/assertion ticket、证书、当前用户 , 或 SNC 环境进行身份验证。如果未设置用户和用户别名,则用户 ID 是必须的。此 ID 永远不会发送到 SAP 后端,它将在本地由 JCo 运行时使用。 | |
| 登录 password,在 参数上登录基于密码的身份验证。 | |
| 如果未定义,在语言中登录,则使用默认用户语言。 | |
| 使用指定的 SAP Cookie Version 2 作为基于 SSO 的身份验证的票据上的日志。 | |
| 使用指定的 X509 证书进行基于证书的身份验证。 | |
| 向第一次调用 - 1 (启用)发布身份验证。只用于特殊情况。 | |
| 使用可见、隐藏或者不使用 SAP GUI | |
| 参数上的其他日志,以定义用于转换参数日志的代码页面。只用于特殊情况。 | |
| 在登录后对 SSO 票据进行排序,目标属性中提供了获取的票据。 | |
|
如果设置为 |
55.3.2.3. 连接选项
下表列出了用于在 SAP 目标数据存储中配置目的地的连接选项:
Name | 默认值 | 描述 |
|
用于连接到 SAP 路由器后面的系统的 SAP 路由器字符串。SAP 路由器字符串包含 SAP 路由器的链及其端口号,并具有以下形式: | |
| SAP ABAP 应用服务器的系统号,对于直接连接是必需的。 | |
| SAP ABAP 应用服务器,用于直接连接。 | |
| SAP 消息服务器,用于负载平衡连接的必要属性。 | |
|
SAP 消息服务器端口,用于负载平衡连接的可选属性。为了解析服务名称 sapmsXXX,可在 | |
| 允许指定协调网关,该网关应用于建立到应用服务器的连接。如果没有指定,则使用应用服务器上的网关。 | |
| 应在使用 gwhost 时设置。允许指定该网关中使用的端口。如果没有指定,则使用应用服务器上的网关端口。为了解析服务名称 sapgwXXX 中,通过操作系统的网络层执行 etc/services 的查找。如果使用端口号而不是符号服务名称,则不会执行查找,且不需要额外的条目。 | |
| SAP 系统的系统 ID,用于负载平衡连接的必要属性。 | |
| SAP 应用服务器组,用于负载平衡连接的必要属性。 | |
|
|
根据 JCo 和目标系统之间的网络质量来设置这个值,以优化性能。有效值为 |
|
|
有效值为 line |
55.3.2.4. 连接池选项
下表列出了用于在 SAP 目标数据存储中配置目的地的 连接池 选项:
Name | 默认值 | 描述 |
|
|
可以为目标同时创建的活跃出站连接的最大数量。值 |
|
|
目的地保持打开的最大空闲出站连接数。值 |
| 在经过目标内部保存的空闲连接后,可以关闭的时间(毫秒)。 | |
| 目标检查发布的连接过期的时间(毫秒)。 | |
| 如果应用程序已经分配了最大允许的连接数,等待连接的最大时间(毫秒)。 |
55.3.2.5. 安全网络连接选项
下表列出了用于在 SAP 目标数据存储中配置目的地 的安全网络选项 :
Name | 默认值 | 描述 |
|
安全网络连接(SNC)模式、 | |
|
SNC 合作伙伴,例如: | |
|
SNC 安全级别: | |
| 本身 SNC 名称。覆盖环境设置。 | |
| 提供 SNC 服务的库路径。 |
55.3.2.6. 仓库选项
下表列出了用于在 SAP 目标数据存储中配置目的地 的存储库 选项:
Name | 默认值 | 描述 |
| 指定用作存储库的目的地。 | |
| 如果没有设置存储库目的地,并且设置了此属性,它将用作存储库调用的用户。这可让您使用其他用户进行存储库查找。 | |
| 存储库用户的密码。必需,如果使用存储库用户。 | |
|
(可选) 如果将 SNC 用于此目的地,则可以为存储库连接关闭它(如果此属性设为 | |
|
启用
如果没有设置属性,则目的地最初执行远程调用来检查 注: 如果存储库已经初始化(例如,由于某些其他目的地使用),此属性没有任何效果。通常,此属性与 ABAP 系统相关,在所有目的地上应具有相同的值,指向同一 ABAP 系统。有关后端先决条件,请参阅备注 1456826。 |
55.3.2.7. 跟踪配置选项
下表列出了用于在 SAP 目标数据存储中配置目的地的 trace 配置选项 :
Name | 默认值 | 描述 |
|
启用/禁用 RFC 跟踪( | |
|
启用/禁用 CPIC trace |
55.3.3. 服务器配置
服务器配置在 SAP 组件的 serverDataStore
属性中维护。此映射中的每个条目配置与 SAP 实例不同的入站连接。每个条目的 key 是出站连接的名称,用于服务器端点 URI 的 serverName
组件,如 URI 格式部分所述。
每个条目的值是 服务器数据 配置对象org.fusesource.camel.component.sap.model.rfc.impl.ServerDataImpl
,它定义入站 SAP 连接的配置。
服务器配置示例
以下蓝图 XML 代码演示了如何使用名称 quickstartServer
创建示例服务器配置。
<?xml version="1.0" encoding="UTF-8"?> <blueprint ... > ... <!-- Configures the Inbound and Outbound SAP Connections --> <bean id="sap-configuration" class="org.fusesource.camel.component.sap.SapConnectionConfiguration"> <property name="destinationDataStore"> <map> <entry key="quickstartDest" value-ref="quickstartDestinationData" /> </map> </property> <property name="serverDataStore"> <map> <entry key="quickstartServer" value-ref="quickstartServerData" /> </map> </property> </bean> <!-- Configures an Outbound SAP Connection --> <!-- *** Please enter the connection property values for your environment *** --> <bean id="quickstartDestinationData" class="org.fusesource.camel.component.sap.model.rfc.impl.DestinationDataImpl"> <property name="ashost" value="example.com" /> <property name="sysnr" value="00" /> <property name="client" value="000" /> <property name="user" value="username" /> <property name="passwd" value="passowrd" /> <property name="lang" value="en" /> </bean> <!-- Configures an Inbound SAP Connection --> <!-- *** Please enter the connection property values for your environment ** --> <bean id="quickstartServerData" class="org.fusesource.camel.component.sap.model.rfc.impl.ServerDataImpl"> <property name="gwhost" value="example.com" /> <property name="gwserv" value="3300" /> <!-- The following property values should not be changed --> <property name="progid" value="QUICKSTART" /> <property name="repositoryDestination" value="quickstartDest" /> <property name="connectionCount" value="2" /> </bean> </blueprint>
请注意,本例如何配置目标连接 quickstartDest
,服务器用来从远程 SAP 实例检索元数据。此目的地通过 repositoryDestination
选项在服务器数据中配置。如果没有配置这个选项,您必须创建一个本地元数据存储库。
例如,在按照上述蓝图 XML 文件配置目的地后,您可以使用以下 URI 处理来自调用客户端的 BAPI_FLCUST_GETLIST
远程功能调用:
sap-srfc-server:quickstartServer:BAPI_FLCUST_GETLIST
55.3.3.1. 所需选项
服务器数据配置对象所需的选项如下:
Name | 默认值 | 描述 |
| 应该在其上注册服务器的网关主机。 | |
|
网关服务,这是可以在其上进行注册的端口。为了解析服务名称 | |
| 注册的程序 ID。作为网关和 ABAP 系统中目的地上的标识符。 | |
| 指定服务器可以使用的目的地名称,以便从托管在远程 SAP 服务器中的元数据存储库检索元数据。 | |
| 应该在网关上注册的连接数。 |
55.3.3.2. 安全网络连接选项
服务器数据配置对象的安全连接选项如下:
Name | 默认值 | 描述 |
|
安全网络连接(SNC)模式、 | |
|
SNC 安全性级别, | |
|
服务器的 SNC 名称。覆盖默认 SNC 名称。通常,类似 | |
|
提供 SNC 服务的库路径。如果没有提供此属性,则使用 |
55.3.3.3. 其他选项
服务器数据配置对象的其他选项如下:
Name | 默认值 | 描述 |
|
用于受防火墙保护的系统的 SAP 路由器字符串,因此只能在 ABAP 系统的网关上注册服务器时,它才可以通过 SAProuter 访问。典型的路由器字符串为 | |
| 失败时两次启动尝试之间的最长时间(以秒为单位)。在每次启动失败后,等待时间从最初 1 秒加倍,直到达到最大值,或者可以成功启动服务器。 | |
|
启用/禁用 RFC 跟踪( | |
|
服务器连接使用的最大线程数量。如果没有设置,则 | |
|
服务器连接使用的最小线程数量。如果没有设置,则 |
55.3.4. 仓库配置
存储库的配置在 SAP 组件的 repositoryDataStore
属性中维护。此映射中的每个条目都配置不同的存储库。每个条目的 key 是存储库的名称,此密钥也对应于附加此存储库的服务器的名称。
每个条目的值是存储库数据配置对象 org.fusesource.camel.component.sap.model.rfc.impl.RepositoryDataImpl
,用于定义元数据存储库的内容。存储库数据对象是功能模板配置对象 org.fuesource.camel.component.sap.model.rfc.impl.FunctionTemplateImpl
的映射。此映射中的每个条目都指定 function 模块的接口,每个条目的键则是指定的 function 模块的名称。
仓库数据示例
以下代码演示了配置元数据存储库的简单示例:
<?xml version="1.0" encoding="UTF-8"?> <blueprint ... > ... <!-- Configures the sap-srfc-server component --> <bean id="sap-configuration" class="org.fusesource.camel.component.sap.SapConnectionConfiguration"> <property name="repositoryDataStore"> <map> <entry key="nplServer" value-ref="nplRepositoryData" /> </map> </property> </bean> <!-- Configures a Metadata Repository --> <bean id="nplRepositoryData" class="org.fusesource.camel.component.sap.model.rfc.impl.RepositoryDataImpl"> <property name="functionTemplates"> <map> <entry key="BOOK_FLIGHT" value-ref="bookFlightFunctionTemplate" /> </map> </property> </bean> ... </blueprint>
55.3.4.1. 功能模板属性
功能模块的接口由四个参数列表组成,这些列表将数据传输回 RFC 调用中的 function 模块。每个参数列表由一个或多个字段组成,每个字段都是 RFC 调用中传输的命名参数。支持以下参数列表和异常列表:
- import 参数列表包含发送到 RFC 调用中功能模块的参数值 ;
- export 参数列表包含 RFC 调用中 function 模块返回的参数值 ;
- change 参数列表包含 RFC 调用中函数模块发送和返回的参数值 ;
- table 参数列表 包含 RFC 调用中函数模块发送和返回的内部表值。
- 功能模块的接口也由 ABAP 异常列表组成,该异常列表 可在 RFC 调用中调用模块时引发。
功能模板描述了功能接口的每个参数列表中的参数的名称和类型,函数会抛出 ABAP 异常。功能模板对象维护五个元数据对象列表,如下表所述。
属性 | 描述 |
|
列表字段元数据对象 |
|
列表字段元数据对象 |
|
列表字段元数据对象 |
|
列表字段元数据对象 |
|
ABAP 异常元数据对象 |
功能模板示例
以下示例演示了如何配置功能模板:
<bean id="bookFlightFunctionTemplate" class="org.fusesource.camel.component.sap.model.rfc.impl.FunctionTemplateImpl"> <property name="importParameterList"> <list> ... </list> </property> <property name="changingParameterList"> <list> ... </list> </property> <property name="exportParameterList"> <list> ... </list> </property> <property name="tableParameterList"> <list> ... </list> </property> <property name="exceptionList"> <list> ... </list> </property> </bean>
55.3.4.2. 列出字段元数据属性
列表字段元数据对象 org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMeataDataImpl
,指定参数列表中字段的名称和类型。对于元素外参数字段(CHAR
、DATE
、DECF34、TIME
、BYTE
、NUM
、FLOAT
、INTP、
、INT
1INT2
、DECF16
、DECF34
、STRING
、XSTRING
),下表列出了可以在列表字段元数据对象上设置的配置属性:
Name | 默认值 | 描述 |
| - | 参数字段的名称。 |
| - | 字段的参数类型。 |
| - | 非统一代码布局的字段长度(以字节为单位)。这个值取决于参数类型。 |
| - | Unicode 布局的字段长度(以字节为单位)。这个值取决于参数类型。 |
|
| 字段值中的十进制数。参数类型 BCD 和 FLOAT 需要此项。 |
|
|
如果为 |
请注意,所有元素参数字段都需要在字段 metadata 对象中指定 name
,type
,byteLength
, 和 unicodeByteLength
属性。此外,BCD
、FLOAT
、DECF16
和 DECF34
字段要求在字段元数据对象中指定十进制属性。
对于类型为 TABLE
或 STRUCTURE
的复杂参数字段,下表列出了可以在列表字段元数据对象上设置的配置属性:
Name | 默认值 | 描述 |
| - | 参数字段的名称。 |
| - | 字段的参数类型。 |
| - |
结构或表的元数据。记录元数据对象 |
|
|
如果为 |
所有复杂的参数字段都需要在字段 metadata 对象中指定 名称
、type
和 recordMetaData
属性。recordMetaData
属性的值是一个记录字段元数据对象 org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl
,用于指定嵌套结构或表行的结构。
Elementary list 字段元数据示例
以下元数据配置指定了一个可选的 24 位打包的 BCD 号参数,其两个十进制位置名为 TICKET_PRICE
:
<bean class="org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMetaDataImpl"> <property name="name" value="TICKET_PRICE" /> <property name="type" value="BCD" /> <property name="byteLength" value="12" /> <property name="unicodeByteLength" value="24" /> <property name="decimals" value="2" /> <property name="optional" value="true" /> </bean>
复杂的列表字段元数据示例
以下元数据配置指定了名为 CONNINFO
所需的 TABLE
参数,并带有 connectionInfo
记录元数据对象指定的行结构:
<bean class="org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMetaDataImpl"> <property name="name" value="CONNINFO" /> <property name="type" value="TABLE" /> <property name="recordMetaData" ref="connectionInfo" /> </bean>
55.3.4.3. 记录元数据属性
记录元数据对象 org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl
,指定嵌套 STRUCTURE
或 TABLE
参数行的名称和内容。记录元数据对象维护记录字段元数据对象 org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl
的列表,用于指定嵌套结构或表行中的参数。
下表列出了可以在记录元数据对象上设置的配置属性:
Name | 默认值 | 描述 |
| - | 记录的名称。 |
| - |
记录字段元数据对象列表 |
需要记录元数据对象的所有属性。
记录元数据示例
以下示例演示了如何配置记录元数据对象:
<bean id="connectionInfo" class="org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl"> <property name="name" value="CONNECTION_INFO" /> <property name="recordFieldMetaData"> <list> ... </list> </property> </bean>
55.3.4.4. 记录字段元数据属性
记录字段元数据对象 org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl
,指定结构中参数字段的名称和类型。
记录字段元数据对象与参数字段元数据对象类似,但必须额外指定嵌套结构或表行中的单个字段位置的偏移。单个字段的非统一代码和 Unicode 偏移必须计算并从前一字段的非统一代码和 Unicode 字节长度总和来计算和指定。
正确指定嵌套结构和表行中的字段偏移会导致底层 JCo 和 ABAP 运行时中的参数存储重叠并防止 RFC 调用中的正确传输值。
对于元素外参数字段(CHAR
、DATE
、DECF34、TIME
、BYTE
、NUM
、FLOAT
、INTP、
、INT
1INT2
、DECF16
、DECF34
、STRING
、XSTRING
),下表列出了可以在记录字段元数据对象上设置的配置属性:
Name | 默认值 | 描述 |
| - | 参数字段的名称。 |
| - | 字段的参数类型。 |
| - | 非统一代码布局的字段长度(以字节为单位)。这个值取决于参数类型。 |
| - | Unicode 布局的字段长度(以字节为单位)。这个值取决于参数类型。 |
| - | 非Unicode 布局的字段偏移(以字节为单位)。这个偏移是保护结构中字段的字节位置。 |
| - | Unicode 布局以字节为单位的字段偏移。这个偏移是保护结构中字段的字节位置。 |
|
|
字段值中的十进制数;参数类型 |
对于类型为 TABLE
或 STRUCTURE
的复杂参数字段,下表列出了可以在记录字段元数据对象上设置的配置属性:
Name | 默认值 | 描述 |
| - | 参数字段的名称。 |
| - | 字段的参数类型。 |
| - | 非Unicode 布局的字段偏移(以字节为单位)。这个偏移是保护结构中字段的字节位置。 |
| - | Unicode 布局以字节为单位的字段偏移。这个偏移是保护结构中字段的字节位置。 |
| - |
结构或表的元数据。记录元数据对象 |
Elementary 记录字段元数据示例
以下元数据配置在非Unicode 布局时指定名为 ARR
的 DATE 字段参数,它位于 85 字节中,在 Unicode 布局的情况下,将 170 字节到 enclosing 结构中。
DATE
<bean class="org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl"> <property name="name" value="ARRDATE" /> <property name="type" value="DATE" /> <property name="byteLength" value="8" /> <property name="unicodeByteLength" value="16" /> <property name="byteOffset" value="85" /> <property name="unicodeByteOffset" value="170" /> </bean>
复杂的记录字段元数据示例
以下元数据配置指定了名为 FLTINFO
的 STRUCTURE
字段参数,其结构由 flightInfo
记录元数据对象指定。参数位于非统一代码和 Unicode 布局的情况下的保护结构的开头。
<bean class="org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl"> <property name="name" value="FLTINFO" /> <property name="type" value="STRUCTURE" /> <property name="byteOffset" value="0" /> <property name="unicodeByteOffset" value="0" /> <property name="recordMetaData" ref="flightInfo" /> </bean>