289.2.4. 存储库配置
概述
存储库的配置在 SAP 组件的 repositoryDataStore
属性中维护。此映射中的每个条目都配置不同的存储库。每个条目的密钥都是存储库的名称,此键也对应于此存储库所附加的服务器名称。
每个条目的值都是存储库数据配置对象 org.fusesource.camel.component.sap.model.rfc.RepositoryDataImpl
,用于定义 meta-data 存储库的内容。存储库数据对象是功能模板配置对象的映射,org.fuesource.camel.component.sap.model.rfc.FunctionTemplateImpl
.此映射中的每个条目都指定了功能模块的接口,每个条目的键是指定的功能模块的名称。
仓库数据示例
以下代码显示了配置 meta-data 存储库的简单示例:
<?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 Meta-Data 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>
功能模板属性
功能模块的接口由四个参数列表组成,它们通过根据 RFC 调用来回传输给 function 模块。每个参数列表各自包含一个或多个字段,每个字段都是 RFC 调用中传输的命名参数。支持以下参数列表和例外列表:
- import 参数列表包含在 RFC 调用中发送到功能模块的参数值 ;
- export 参数列表 包含 RFC 调用中函数模块返回的参数值 ;
- 更改参数列表 包含在 RFC 调用中由功能模块发送到和返回的参数值;
- table 参数列表 包含在 RFC 调用中由功能模块发送到和返回的内部表值。
- 功能模块的接口也由 ABAP 异常列表组成,在 RFC 调用中调用该模块时可能会引发这些异常。
功能模板描述了功能接口的每个参数列表中的名称和参数类型,以及函数引发 ABAP 异常。功能模板对象维护 meta-data 对象的五个属性列表,如下表所示。
属性 | 描述 |
|
列表字段 meta-data 对象列表 |
|
列表字段 meta-data 对象列表 |
|
列表字段 meta-data 对象列表 |
|
列表字段 meta-data 对象列表 |
|
ABAP 异常 meta-data 对象列表, |
功能模板示例
以下示例显示了如何配置功能模板的概述:
<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>
列出字段 meta-data 属性
list 字段 meta-data 对象 org.fusesource.camel.component.sap.model.rfc.ListFieldMeataDataImpl
指定参数列表中字段的名称和类型。对于 elementary 参数字段(CHAR
,DATE
,BCD
,TIME
,BYTE
,NUM
,FLOAT
,INT
1 ,INT1
,INT2
,DECF16
,DECF34
,STRING
,XSTRING
,下表列出了配置属性:
名称 | 默认值 | 描述 |
| - | 参数字段的名称。 |
| - | 字段的参数类型。 |
| - | 非一致性布局的字节字段长度(以字节为单位)。这个值取决于参数类型。请参阅 第 289.5 节 “RFC 的消息正文”。 |
| - | Unicode 布局的字段长度(以字节为单位)。这个值取决于参数类型。请参阅 第 289.5 节 “RFC 的消息正文”。 |
|
| 字段值中的十进制数 ; 只需要参数类型 BCD 和 FLOAT。请参阅 第 289.5 节 “RFC 的消息正文”。 |
|
|
如果为 |
请注意,所有 elementary 参数字段要求 名称
、type
、byteLength
和 unicodeByteLength
属性在字段 meta-data 对象中指定。另外,BCD
、FLOAT
、DECF16
和 DECF34
字段要求在字段 meta-data 对象中指定十进制属性。
对于类型为 TABLE
或 STRUCTURE
的复杂参数字段,下表列出了可以在列表字段 meta-data 对象上设置的配置属性:
名称 | 默认值 | 描述 |
| - | 参数字段的名称 |
| - | 字段的参数类型 |
| - |
结构或表的元数据。一个记录 meta-data 对象 |
|
|
如果为 |
请注意,所有复杂的参数字段都需要在字段 meta-data 对象中指定 名称
、type
和 recordMetaData
属性。recordMetaData
属性的值是一个记录字段 meta-data 对象,org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl
指定嵌套结构或表行的结构。
Elementary list 字段 meta-data 示例
以下 meta-data 配置指定一个一个可选的 24 位 packed BCD number 参数,它有两个十进制位置,名为 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>
复杂列表字段 meta-data 示例
以下 meta-data 配置指定一个名为 CONNINFO
所需的 TABLE
参数,其行结构由 connectionInfo
记录 meta-data 对象指定:
<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>
记录 meta-data 属性
记录元数据对象, org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl
指定嵌套的 STRUCTURE
或 TABLE
参数行的名称和内容。记录 meta-data 对象维护一个记录字段元数据对象列表,即 org.fusesource.camel.component.sap.model.rfc.FieldMetaDataImpl
,用于指定驻留在嵌套结构或表行中的参数。
下表列出了在记录 meta-data 对象上设置的配置属性:
名称 | 默认值 | 描述 |
| - | 记录的名称。 |
| - |
记录字段 meta-data 对象列表 |
记录 meta-data 对象的所有属性都是必需的。
记录 meta-data 示例
以下示例演示了如何配置记录 meta-data 对象:
<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>
record 字段 meta-data 属性
记录字段 meta-data 对象 org.fusesource.camel.component.sap.model.rfc.FieldMetaDataImpl
,使用结构指定参数字段的名称和类型。
记录字段 meta-data 对象类似于参数字段 meta-data 对象,但必须额外指定嵌套结构或表行中个别字段位置的偏移。必须计算单个字段的非Unicode 和 Unicode 误差,并指定自结构或行中前字段的 Unicode 字节长度的总和。请注意,在嵌套结构和表行中正确指定字段偏移会导致底层 JCo 和 ABAP 运行时的参数字段存储,从而重叠并防止 RFC 调用中的相应值传输。
对于 elementary 参数字段(CHAR
,DATE
,BCD
,TIME
,BYTE
,NUM
,FLOAT
,INT
1 ,INT1
,INT2
,DECF16
,DECF34
,STRING
,XSTRING
),下表列出了配置属性: meta-data 对象:
名称 | 默认值 | 描述 |
| - | 参数字段的名称 |
| - | 字段的参数类型 |
| - | 非一致性布局的字节字段长度(以字节为单位)。这个值取决于参数类型。请参阅 第 289.5 节 “RFC 的消息正文”。 |
| - | Unicode 布局的字段长度(以字节为单位)。这个值取决于参数类型。请参阅 第 289.5 节 “RFC 的消息正文”。 |
| - | 非Unicode 布局的字节字段偏移。这个偏移是所属结构中字段的字节位置。 |
| - | Unicode 布局的字段偏移,以字节为单位。这个偏移是所属结构中字段的字节位置。 |
|
|
字段值中的十进制数 ; 仅参数类型 |
对于类型为 TABLE
或 STRUCTURE
的复杂参数字段,下表列出了在记录字段 meta-data 对象上设置的配置属性:
名称 | 默认值 | 描述 |
| - | 参数字段的名称 |
| - | 字段的参数类型 |
| - | 非Unicode 布局的字节字段偏移。这个偏移是所属结构中字段的字节位置。 |
| - | Unicode 布局的字段偏移,以字节为单位。这个偏移是所属结构中字段的字节位置。 |
| - |
结构或表的元数据。一个记录 meta-data 对象 |
Elementary record 字段 meta-data 示例
以下 meta-data 配置指定了一个名为 ARR
的 DATE 字段参数(如果非Unicode 布局为 170 字节),并在 Unicode 布局时位于 170 字节到外围结构中:
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>
复杂的记录字段 meta-data 示例
以下 meta-data 配置指定名为 FLTINFO
的 STRUCTURE
字段参数,其结构由 flightInfo
记录 meta-data 对象指定。参数位于包含结构的开头,出现非Unicode 和 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>