搜索

55.6. RFC 的消息正文

download PDF

55.6.1. 请求和响应对象

SAP 端点希望收到含有 SAP 请求对象的消息正文,并将返回一个含有 SAP 响应对象的消息正文。SAP 请求和响应是固定的映射数据结构,其中包含命名字段,每个字段都有预定义的数据类型。

请注意,SAP 请求和响应中的命名字段特定于 SAP 端点,每个端点在 SAP 请求中定义参数并响应它。SAP 端点提供工厂方法来创建特定于它的请求和响应对象。

public class SAPEndpoint ... {
    ...
    public Structure getRequest() throws Exception;

    public Structure getResponse() throws Exception;
    ...
}

55.6.2. 结构对象

SAP 请求和响应对象都作为结构对象在 Java 中表示,它支持 org.fusesource.camel.component.sap.model.rfc.Structure 接口。此接口扩展了 java.util.Maporg.eclipse.emf.ecore.EObject 接口。

public interface Structure extends org.eclipse.emf.ecore.EObject,
                                        java.util.Map<String, Object> {

    <T> T get(Object key, Class<T> type);

}

结构对象中的字段值通过映射界面中字段的 getter 方法访问。此外,结构接口提供了一个类型限制的方法来检索字段值。

结构对象使用 Eclipse Modeling Framework (EMF)在组件运行时实施,并支持框架的 EObject 接口。结构对象的实例已附加元数据,用于定义和限制它提供的字段映射的结构和内容。可以使用 EMF 提供的标准方法访问和内省此元数据。详情请参考 EMF 文档。

注意

尝试获取在结构对象上未定义的参数将返回 null。尝试设置在结构上未定义的参数将抛出异常,并尝试使用不正确的类型设置参数的值。

如以下部分中所述,结构对象可以包含包含复杂字段类型、STRUCTURETABLE 的值的字段。

注意

创建这些类型的实例并将其添加到结构中是必需的。在以保护结构访问时,根据需要创建这些字段值的实例。

55.6.3. 字段类型

驻留在 SAP 请求或响应的结构对象中的字段可以是 元素 或复杂 的字段。元素字段包含一个 scalar 值,而复杂字段将包含一个或多个元素或复杂类型的字段。

55.6.3.1. Elementary 字段类型

元素字段可以是字符、数字、十六进制或字符串字段类型。下表总结了可能驻留在结构对象中的元素字段类型:

字段类型

对应的 Java 类型

字节长度

Unicode byte Length

number Decimals Digits

描述

CHAR

java.lang.String

1 到 65535

1 到 65535

-

ABAP Type 'C': Fixed sized 字符字符串

DATE

java.util.Date

8

16

-

ABAP Type 'D': Date (format: YYYYMMDD)

BCD

java.math.BigDecimal

1 到 16

1 到 16

0 到 14

ABAP Type 'P': 打包的 BCD 号。BCD 号包含每个字节的两个数字。

时间

java.util.Date

6

12

-

ABAP Type 'T': Time (format: HHMMSS)

BYTE

byte[]

1 到 65535

1 到 65535

-

ABAP Type 'X':Fixed sized bytes 数组

NUM

java.lang.String

1 到 65535

1 到 65535

-

ABAP Type 'N': Fixed sized number string

浮点值

java.lang.Double

8

8

0 到 15

ABAP Type 'F': floating point number

INT

java.lang.Integer

4

4

-

ABAP Type 'I': 4 字节整数

INT2

java.lang.Integer

2

2

-

ABAP Type 'S': 2 字节整数

INT1

java.lang.Integer

1

1

-

ABAP Type 'B': 1 字节整数

DECF16

java.match.BigDecimal

8

8

16

ABAP Type 'decfloat16': 8 -byte Decimal floating Point number

DECF34

java.math.BigDecimal

16

16

34

ABAP Type 'decfloat34': 16 字节 Decimal 浮动点号

字符串

java.lang.String

8

8

-

ABAP Type 'G': Variable length 字符字符串

XSTRING

byte[]

8

8

-

ABAP Type 'Y': Variable length byte array

55.6.3.2. 字符字段类型

字符字段包含一个固定大小字符字符串,可在底层 JCo 和 ABAP 运行时中使用非统一代码或 Unicode 字符编码。非统一字符字符串按字节编码一个字符。Unicode 字符字符串使用 UTF-16 编码来编码两个字节。字符字段值在 Java 中以 java.lang.String 对象表示,底层 JCo 运行时负责转换为其 ABAP 表示。

字符字段在其关联的 字节长度和 unicodeByteLength 属性中声明其字段长度,该属性决定了每个编码系统中字段字符字符串的长度。

CHAR
CHAR 字符字段是一个包含字母数字字符的文本字段,对应于 ABAP 类型 C。
NUM
NUM 字符字段是一个数字文本字段,仅包含数字字符,对应于 ABAP 类型 N。
DATE
DATE 字符字段是一个 8 个字符日期字段,其中年、月份和日期格式为 YYYYMMDD,对应于 ABAP 类型 D。
时间
TIME 字符字段是一个 6 个字符时间字段,格式为 HHMMSS,对应于 ABAP 类型 T。

55.6.3.3. 数字字段类型

number 字段包含一个数字。支持以下数字字段类型:

INT
INT number 字段是一个整数字段,作为 4 字节整数值存储在底层 JCo 和 ABAP 运行时,对应于 ABAP 类型 I。INT 字段值以 java.lang.Integer 对象的形式表示。
INT2
INT2 数字字段是作为 2 字节整数值存储在底层 JCo 和 ABAP 运行时中的整数字段,对应于 ABAP 类型 S。INT2 字段值以 java.lang.Integer 对象的形式表示。
INT1
INT1 字段是一个整数字段,作为 1 字节整数值存储在底层 JCo 和 ABAP 运行时值中,对应于 ABAP 类型 B。INT1 字段值以 java.lang.Integer 对象的形式表示。
浮点值
FLOAT 字段是一个二进制浮动点号字段,存储在底层 JCo 和 ABAP 运行时中的 8 字节双值,对应于 ABAP 类型 F。FLOAT 字段声明字段的值包含在其关联的十进制属性中。如果是 FLOAT 字段,这个十进制属性可在 1 到 15 位之间具有值。FLOAT 字段值在 Java 中表示为 java.lang.Double 对象。
BCD
BCD 字段是一个二进制代码十进制字段,存储在底层 JCo 和 ABAP 运行时中的 1 到 16 字节数字,对应于 ABAP 类型 P。压缩的数字会为每个字节存储两个十进制数字。BCD 字段在其关联的 字节长度和 unicodeByteLength 属性中声明其字段长度。如果是 BCD 字段,这些属性可以在 1 到 16 字节之间具有值,并且这两个属性都具有相同的值。BCD 字段声明字段的值包含在其关联的十进制属性中的十进制数字。如果是 BCD 字段,这个十进制属性可在 1 到 14 位之间具有值。BCD 字段值在 Java 中表示为 java.math.BigDecimal
DECF16
DECF16 字段是一个十进制浮动点,存储为底层 JCo 和 ABAP 运行时的 8 字节 IEEE 754 十进制浮动点值,对应于 ABAP 类型 decfloat16DECF16 字段的值有 16 十进制数字。DECF16 字段的值在 Java 中表示为 java.math.BigDecimal
DECF34
DECF34 字段是一个十进制浮动点,存储为底层 JCo 和 ABAP 运行时的 16 字节 IEEE 754 十进制浮动点值,对应于 ABAP 类型 decfloat34DECF34 字段的值具有 34 十进制数字。DECF34 字段的值在 Java 中表示为 java.math.BigDecimal

55.6.3.4. 十六进制字段类型

hex 字段包含原始二进制数据。支持以下十六进制字段类型:

BYTE
BYTE 字段是一个固定大小的字符串,作为字节数组存储在底层 JCo 和 ABAP 运行时,对应于 ABAP 类型 X。BYTE 字段在其关联 字节Length 和 unicodeByteLength 属性中声明其字段长度。如果是 BYTE 字段,这些属性可以在 1 到 65535 字节之间具有值,并且这两个属性都具有相同的值。BYTE 字段的值在 Java 中以 byte[] 对象表示。

55.6.3.5. 字符串字段类型

字符串字段引用变量值。在运行时前,该字符串值的长度不会被修复。字符串值的存储在底层 JCo 和 ABAP 运行时动态创建。字符串字段本身的存储已被修复,仅包含字符串标头。

字符串
STRING 字段引用存储在底层 JCo 和 ABAP 运行时中的字符字符串作为 8 字节值。它对应于 ABAP 类型 G。STRING 字段的值在 Java 中以 java.lang.String 对象表示。
XSTRING
XSTRING 字段引用存储在底层 JCo 和 ABAP 运行时中的字节字符串作为 8 字节值。它对应于 ABAP 类型 Y。STRING 字段的值在 Java 中以 byte[] 对象表示。

55.6.3.6. 复杂字段类型

复杂的字段可以是 structure 或 table 字段类型。下表总结了这些复杂的字段类型。

字段类型

对应的 Java 类型

字节长度

Unicode byte Length

number Decimals Digits

描述

结构

org.fusesource.camel.component.sap.model.rfc.Structure

单个字段字节长度总数

单个字段 Unicode 字节长度总数

-

ABAP Type 'u' 和 'v': Heterogeneous Structure

org.fusesource.camel.component.sap.model.rfc.Table

行结构的字节长度

行结构的 Unicode 字节长度

-

ABAP Type 'h': Table

55.6.3.7. struct 字段类型

STRUCTURE 字段包含一个结构对象,并作为 ABAP 结构记录存储在底层 JCo 和 ABAP 运行时。它对应于 ABAP 类型 uvSTRUCTURE 字段的值表示在 Java 中,作为带有接口 org.fusesource.camel.component.sap.model.rfc.Structure 的结构对象。

55.6.3.8. 表字段类型

TABLE 字段包含一个表对象,并作为 ABAP 内部表存储在底层 JCo 和 ABAP 运行时中。它对应于 ABAP 类型 h。字段的值在 Java 中由一个带有接口 org.fusesource.camel.component.sap.model.rfc.Table 的表对象表示。

55.6.3.9. 表对象

表对象是一个 homogeneous 列表数据结构,其中包含具有相同结构的结构对象行。此接口扩展了 java.util.Listorg.eclipse.emf.ecore.EObject 接口。

public interface Table<S extends Structure>
    extends org.eclipse.emf.ecore.EObject,
    java.util.List<S> {

    /**
     * Creates and adds a table row at the end of the row list
     */
    S add();

    /**
     * Creates and adds a table row at the index in the row list
     */
    S add(int index);

}

表对象中的行列表通过列表接口中定义的标准方法访问和管理。此外,表接口提供了两种工厂方法,用于创建和添加结构对象到行列表中。

表对象使用 Eclipse Modeling Framework (EMF)在组件运行时实施,并支持框架的 EObject 接口。表对象的实例已附加元数据,用于定义和限制它提供的行的结构和内容。可以使用 EMF 提供的标准方法访问和内省此元数据。详情请参考 EMF 文档。

注意

尝试添加或设置错误类型的行结构值将抛出异常。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.