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 对象的五个属性列表,如下表所示。

属性

描述

importParameterList

列表字段 meta-data 对象列表 org.fusesource.camel.component.sap.model.rfc.ListFieldMeataDataImpl.指定在 RFC 调用到功能模块时发送的参数。

changingParameterList

列表字段 meta-data 对象列表 org.fusesource.camel.component.sap.model.rfc.ListFieldMeataDataImpl.指定在 RFC 调用中发送和接收到功能模块的参数。

exportParameterList

列表字段 meta-data 对象列表 org.fusesource.camel.component.sap.model.rfc.ListFieldMeataDataImpl.指定从 function 模块的 RFC 调用返回的参数。

tableParameterList

列表字段 meta-data 对象列表 org.fusesource.camel.component.sap.model.rfc.ListFieldMeataDataImpl.指定在 RFC 调用中发送和接收给函数模块的表参数。

exceptionList

ABAP 异常 meta-data 对象列表,org.fusesource.camel.component.sap.model.rfc.impl.AbapExceptionImpl.指定在 RFC 调用 function 模块时可能会引发 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>

列出字段 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,下表列出了配置属性:

名称

默认值

描述

name

-

参数字段的名称。

type

-

字段的参数类型。

byteLength

-

非一致性布局的字节字段长度(以字节为单位)。这个值取决于参数类型。请参阅 第 289.5 节 “RFC 的消息正文”

unicodeByteLength

-

Unicode 布局的字段长度(以字节为单位)。这个值取决于参数类型。请参阅 第 289.5 节 “RFC 的消息正文”

decimals

0

字段值中的十进制数 ; 只需要参数类型 BCD 和 FLOAT。请参阅 第 289.5 节 “RFC 的消息正文”

optional

false

如果为 true,则字段是可选的,且不需要在 RFC 调用中设置

请注意,所有 elementary 参数字段要求 名称typebyteLengthunicodeByteLength 属性在字段 meta-data 对象中指定。另外,BCDFLOATDECF16DECF34 字段要求在字段 meta-data 对象中指定十进制属性。

对于类型为 TABLESTRUCTURE 的复杂参数字段,下表列出了可以在列表字段 meta-data 对象上设置的配置属性:

名称

默认值

描述

name

-

参数字段的名称

type

-

字段的参数类型

recordMetaData

-

结构或表的元数据。一个记录 meta-data 对象 org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl 会被传递在结构或表行中指定字段。

optional

false

如果为 true,则字段是可选的,且不需要在 RFC 调用中设置

请注意,所有复杂的参数字段都需要在字段 meta-data 对象中指定 名称typerecordMetaData 属性。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 指定嵌套的 STRUCTURETABLE 参数行的名称和内容。记录 meta-data 对象维护一个记录字段元数据对象列表,即 org.fusesource.camel.component.sap.model.rfc.FieldMetaDataImpl,用于指定驻留在嵌套结构或表行中的参数。

下表列出了在记录 meta-data 对象上设置的配置属性:

名称

默认值

描述

name

-

记录的名称。

recordFieldMetaData

-

记录字段 meta-data 对象列表 org.fusesource.camel.component.sap.model.rfc.FieldMetaDataImpl.指定结构中包含的字段。

注意

记录 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 对象:

名称

默认值

描述

name

-

参数字段的名称

type

-

字段的参数类型

byteLength

-

非一致性布局的字节字段长度(以字节为单位)。这个值取决于参数类型。请参阅 第 289.5 节 “RFC 的消息正文”

unicodeByteLength

-

Unicode 布局的字段长度(以字节为单位)。这个值取决于参数类型。请参阅 第 289.5 节 “RFC 的消息正文”

byteOffset

-

非Unicode 布局的字节字段偏移。这个偏移是所属结构中字段的字节位置。

unicodeByteOffset

-

Unicode 布局的字段偏移,以字节为单位。这个偏移是所属结构中字段的字节位置。

decimals

0

字段值中的十进制数 ; 仅参数类型 BCDFLOAT 需要。请参阅 第 289.5 节 “RFC 的消息正文”

对于类型为 TABLESTRUCTURE 的复杂参数字段,下表列出了在记录字段 meta-data 对象上设置的配置属性:

名称

默认值

描述

name

-

参数字段的名称

type

-

字段的参数类型

byteOffset

-

非Unicode 布局的字节字段偏移。这个偏移是所属结构中字段的字节位置。

unicodeByteOffset

-

Unicode 布局的字段偏移,以字节为单位。这个偏移是所属结构中字段的字节位置。

recordMetaData

-

结构或表的元数据。一个记录 meta-data 对象 org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl 会被传递在结构或表行中指定字段。

Elementary record 字段 meta-data 示例

以下 meta-data 配置指定了一个名为 ARR DATE 的 DATE 字段参数(如果非Unicode 布局为 170 字节),并在 Unicode 布局时位于 170 字节到外围结构中:

<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 配置指定名为 FLTINFOSTRUCTURE 字段参数,其结构由 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>