287.5. RFC 的消息正文
请求和响应对象
SAP 端点希望收到包含 SAP 请求对象的消息正文消息,并将返回包含 SAP 响应对象的消息正文。SAP 请求和响应是固定映射数据结构,其中包含命名的字段,每个字段都有预定义的数据类型。
请注意,SAP 请求中的 named 字段和响应特定于 SAP 端点,每个端点在 SAP 请求中定义参数并对其接受的响应。SAP 端点提供工厂方法来创建特定于它的请求和响应对象。
结构对象
					SAP 请求和响应对象以 Java 中表示为一个结构对象,该对象支持 org.fusesource.camel.component.sap.model.rfc.Structure 接口。这个接口扩展了 java.util.Map 和 org.eclipse.emf.ecore.EObject 接口。
				
结构对象中的字段值通过 map 界面中字段的 getter 方法访问。另外,结构接口提供了检索字段值的 type-restricted 方法。
					结构对象使用 Eclipse Modeling Framework (EMF)在组件运行时中实施,并且支持框架的 EObject 接口。结构对象的实例已附加了 meta-data,用于定义和限制它提供的字段结构和内容。可以使用 EMF 提供的标准方法访问和内省此元数据。有关更多详细信息,请参阅 EMF 文档。
				
尝试获取在结构对象上未定义的参数将返回 null。尝试设置结构上未定义的参数将抛出异常,并尝试设置带有错误类型的参数值。
					如以下部分中所述,结构对象可以包含包含复杂字段类型、STRUCTURE 和 TABLE 的字段。请注意,创建这些类型的实例并不需要将它们添加到结构中。如果需要在所属结构中访问时,根据需要创建这些字段值的实例。
				
字段类型
驻留在 SAP 请求的结构对象或响应中的字段可以是 元素 或 复杂的。elementary 字段包含一个 scalar 值,而复杂的字段则包含元素或复杂类型的一个或多个字段。
Elementary 字段类型
elementary 字段可以是字符、数字、十六进制或字符串字段类型。下表总结了可能位于结构对象中的元素字段类型:
| 字段类型 | 对应的 Java 类型 | Byte Length | Unicode Byte Length | number Decimals Digits | 描述 | 
| 
									 | 
									 | 1 到 65535 | 1 到 65535 | - | ABAP 类型 'C': Fixed sized 字符字符串 | 
| 
									 | 
									 | 8 | 16 | - | ABAP Type 'D': Date (format: YYYYMMDD) | 
| 
									 | 
									 | 1 到 16 | 1 到 16 | 0 到 14 | ABAP 类型"P":打包的 BCD 编号.BCD 编号每字节包含两个数字。 | 
| 
									 | 
									 | 6 | 12 | - | ABAP Type 'T': Time (format: HHMMSS) | 
| 
									 | 
									 | 1 到 65535 | 1 到 65535 | - | ABAP Type 'X':Fixed size byte 数组 | 
| 
									 | 
									 | 1 到 65535 | 1 到 65535 | - | ABAP 类型 'N': Fixed sized numeric character string | 
| 
									 | 
									 | 8 | 8 | 0 到 15 | ABAP 类型 'F':浮动点号 | 
| 
									 | 
									 | 4 | 4 | - | ABAP Type 'I': 4 字节 Integer | 
| 
									 | 
									 | 2 | 2 | - | ABAP Type 'S': 2 字节 Integer | 
| 
									 | 
									 | 1 | 1 | - | ABAP Type 'B': 1byte Integer | 
| 
									 | 
									 | 8 | 8 | 16 | ABAP Type 'decfloat16': 8 -byte Decimal Floating Point Number | 
| 
									 | 
									 | 16 | 16 | 34 | ABAP Type 'decfloat34': 16 字节 Decimal Floating Point Number | 
| 
									 | 
									 | 8 | 8 | - | ABAP 类型 'G':变量长度字符字符串 | 
| 
									 | 
									 | 8 | 8 | - | ABAP Type 'Y': Variable length byte 数组 | 
字符字段类型
					字符字段包含一个固定大小字符字符串,可以在底层 JCo 和 ABAP 运行时使用非Unicode 或 Unicode 字符编码。非 Unicode 字符字符串对每字节的一个字符进行编码。Unicode 字符字符串使用 UTF-16 编码在两个字节中编码。字符字段值以 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。
数字字段类型
数字字段包含一个数字。支持以下数字字段类型:
- INT
- 
								INTnumeric 字段是基础 JCo 和 ABAP 运行时的 4 字节整数值,并对应于 ABAP 类型 I。一个INT字段值以java.lang.Integer对象中表示。
- INT2
- 
								INT2numeric 字段是基础 JCo 和 ABAP 运行时的双字节整数值,并对应于 ABAP 类型 S。一个INT2字段值在 Java 中以java.lang.Integer对象的形式表示。
- INT1
- 
								INT1字段是基础 JCo 和 ABAP 运行时值中的单字节整数值,并对应于 ABAP 类型 B。一个INT1字段值以java.lang.Integer对象中表示。
- 浮点值
- 
								FLOAT字段是二进制浮动点数字段,作为基础 JCo 和 ABAP 运行时的 8 字节字节值存储,并对应于 ABAP 类型 F。AFLOAT字段声明字段的十进制数字的数量,该值包含在其关联的十进制属性中。如果是FLOAT字段,此十进制属性可以有 1 到 15 位之间的值。FLOAT字段值在 Java 中表示为java.lang.Double对象。
- BCD
- 
								BCD字段是二进制代码的十进制字段,它使用底层 JCo 和 ABAP 运行时的 1 到 16 字节装号,并对应于 ABAP 类型 P。打包的数字为每个字节保存两个十进制数字。BCD字段在其关联的字节长度和属性中声明其字段长度。对于unicodeByteLengthBCD字段,这些属性可以在 1 到 16 字节之间有一个值,且这两个属性的值都相同。BCD字段声明字段的值包含在其关联的十进制属性中的十进制数字数。如果是BCD字段,此十进制属性可以有 1 位和 14 位数字之间的值。BCD字段值在 Java 中表示为java.math.BigDecimal。
- DECF16
- 
								DECF16字段是以 8 字节 IEEE 754十进制64 浮动点值保存在底层 JCo 和 ABAP 运行时的十进制浮动点,并对应于 ABAP 类型decfloat16。DECF16字段的值具有 16 十进制数字。DECF16字段的值在 Java 中以java.math.BigDecimal的形式表示。
- DECF34
- 
								DECF34字段是一个十进制浮动点,它使用底层 JCo 和 ABAP 运行时的 16 字节 IEEE 754 十进制浮动点值,并对应于 ABAP 类型decfloat34。DECF34字段的值具有 34 个十进制数字。DECF34字段的值在 Java 中以java.math.BigDecimal的形式表示。
十六进制字段类型
十六进制字段包含原始二进制数据。支持以下十六进制字段类型:
- BYTE
- 
								BYTE字段是固定的字节字符串,作为基础 JCo 和 ABAP 运行时的字节数组,对应于 ABAP 类型 X。ABYTE字段在与其关联的字节长度和属性中声明其字段长度。对于unicodeByteLengthBYTE字段,这些属性可以在 1 到 65535 字节之间有一个值,且这两个属性的值都相同。BYTE字段的值在 Java 中表示为byte[]对象。
字符串字段类型
string 字段引用变量长度字符串值。该字符串值的长度在运行时不会固定。字符串值的存储会在底层 JCo 和 ABAP 运行时动态创建。字符串字段本身的存储已被修复,仅包含一个字符串标头。
- 字符串
- 
								STRING字段引用字符字符串,并作为 8 字节值存储在底层 JCo 和 ABAP 运行时。它对应于 ABAP 类型 G。STRING字段的值以java.lang.String对象表示。
- XSTRING
- 
								XSTRING字段引用字节字符串,并作为 8 字节值存储在底层 JCo 和 ABAP 运行时。它对应于 ABAP 类型 Y。STRING字段的值以字节[]对象表示。
复杂字段类型
复杂的字段可以是结构或表字段类型。下表总结了这些复杂的字段类型。
| 字段类型 | 对应的 Java 类型 | Byte Length | Unicode Byte Length | number Decimals Digits | 描述 | 
| 
									 | 
									 | 单个字段字节长度总数 | 单个字段 Unicode 字节长度的总数 | - | ABAP 类型 'u' 和 'v': Heterogeneous 结构 | 
| 
									 | 
									 | 行结构的字节长度 | 行结构的 Unicode 字节长度 | - | ABAP Type 'h': Table | 
结构字段类型
					STRUCTURE 字段包含一个 结构 对象,并以 ABAP 结构记录的形式存储在底层 JCo 和 ABAP 运行时。它对应于 ABAP 类型 u 或 v。STRUCTURE 字段的值在 Java 中作为带有接口 org.fusesource.camel.component.sap.model.rfc.Structure 的结构对象来表示。
				
表字段类型
					TABLE 字段包含一个表对象,以 ABAP 内部表的形式存储在底层 JCo 和 ABAP 运行时。它对应于 ABAP 类型 h。字段的值由带有接口 org.fusesource.camel.component.sap.model.rfc.Table 的表对象中的表对象来表示。
				
表对象
					表对象是包含相同结构的行结构的同构列表数据结构。这个接口扩展了 java.util.List 和 org.eclipse.emf.ecore.EObject 接口。
				
使用列表接口中定义的标准方法访问和管理表对象中的行列表。除表接口外,提供了两种工厂方法,可用于创建和添加结构对象到行列表中。
表对象使用 Eclipse Modeling Framework (EMF)在组件运行时中实施,并且支持框架的 EObject 接口。表对象的实例已附加了 meta-data,后者定义和限制它所提供的行的结构和内容。可以使用 EMF 提供的标准方法访问和内省此元数据。有关更多详细信息,请参阅 EMF 文档。
尝试添加或设置错误类型的行结构值将抛出异常。