290.9. RFC 的消息正文


请求和响应对象

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

注意

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

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

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

结构对象

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 的字段。

注意

创建这些类型的实例并将其添加到结构中,不需要创建它们。在封闭结构中访问时,需要根据需要创建这些字段值的实例。

字段类型

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

Elementary 字段类型

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

字段类型

对应的 Java 类型

字节长度

Unicode Byte Length

number Decimals Digits

描述

CHAR

java.lang.String

1 到 65535

1 到 65535

-

ABAP 类型 'C': Fixed sized character string

DATE

java.util.Date

8

16

-

ABAP 类型 'D': Date (format: YYYYMMDD)

BCD

java.math.BigDecimal

1 到 16

1 到 16

0 到 14

ABAP 类型"P":打包的 BCD 号.BCD 号包含每个字节的两位数字。

时间

java.util.Date

6

12

-

ABAP 类型 'T': Time (format: HHMMSS)

BYTE

byte[]

1 到 65535

1 到 65535

-

ABAP 类型 'X':Fixed sized byte array

NUM

java.lang.String

1 到 65535

1 到 65535

-

ABAP 类型 'N': Fixed sized numeric character string

浮点值

java.lang.Double

8

8

0 到 15

ABAP 类型 'F': 浮动点号

INT

java.lang.Integer

4

4

-

ABAP 类型"I":4 字节整数

INT2

java.lang.Integer

2

2

-

ABAP 类型 'S': 2 字节整数

INT1

java.lang.Integer

1

1

-

ABAP 类型 'B': 1 字节整数

DECF16

java.match.BigDecimal

8

8

16

ABAP 类型 'decfloat16': 8 -byte Decimal Floating Point Number

DECF34

java.math.BigDecimal

16

16

34

ABAP 类型 'decfloat34': 16 字节 Decimal Floating Point Number

字符串

java.lang.String

8

8

-

ABAP 类型 'G': 变量长度字符字符串

XSTRING

byte[]

8

8

-

ABAP 类型 'Y': Variable length byte array

字符字段类型

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

character 字段在其关联的 byteLengthunicodeByteLength 属性中声明其字段长度,它决定了每个编码系统中字段字符字符串的长度。

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

数字字段类型

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

INT
INT 数字字段是一个整数值,作为底层 JCo 和 ABAP 运行时中的 4 字节整数值,对应于 ABAP 类型 I。INT 字段值以 java.lang.Integer 对象表示。
INT2
INT2 numeric 字段是一个整数字段,存储为底层 JCo 和 ABAP 运行时中的 2 字节整数值,对应于 ABAP 类型 S。INT2 字段值在 Java 中以 java.lang.Integer 对象表示。
INT1
INT1 字段是一个整数值,作为底层 JCo 和 ABAP 运行时值中的 1 字节整数值,对应于 ABAP 类型 B。INT1 字段值在 Java 中以 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 字段在其关联的 byteLengthunicodeByteLength 属性中声明其字段长度。对于 BCD 字段,这些属性可以有 1 到 16 字节的值,这两个属性具有相同的值。BCD 字段声明字段值在其关联的十进制属性中包含的十进制数字数。对于 BCD 字段,这个十进制属性可以有 1 到 14 个数字之间的值。BCD 字段值以 Java 表示为 java.math.BigDecimal
DECF16
DECF16 字段是一个十进制浮点,存储在底层 JCo 和 ABAP 运行时中的 8 字节 IEEE 754 decimal64 浮点值,对应于 ABAP 类型 decfloat16DECF16 字段的值具有 16 个十进制数字。DECF16 字段的值以 Java 表示,表示为 java.math.BigDecimal
DECF34
DECF34 字段是作为底层 JCo 和 ABAP 运行时 16 字节 IEEE 754 十进制128 浮点值存储的十进制浮动点,对应于 ABAP 类型 decfloat34DECF34 字段的值为 34 个十进制数字。DECF34 字段的值在 Java 中以 java.math.BigDecimal 表示。

十六进制字段类型

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

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

字符串字段类型

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

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

复杂字段类型

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

字段类型

对应的 Java 类型

字节长度

Unicode Byte Length

number Decimals Digits

描述

结构

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

单个字段字节长度总量

单个字段 Unicode 字节长度总数

-

ABAP 类型 'u' 和 'v': Heterogeneous Structure

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

行结构的字节长度

行结构的 Unicode 字节长度

-

ABAP 类型"h":表

structure 字段类型

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

表字段类型

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

表对象

表对象是一个同构列表数据结构,其中包含具有相同结构的结构对象行。这个接口扩展了 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 table row at end of row list
     */
    S add();

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

}

使用列表接口中定义的标准方法访问和管理表对象中的行列表。另外,表接口提供了在行列表中创建和添加结构对象的两个工厂方法。

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

注意

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.