第四十五章 开发Productions - ObjectScript Productions - 使用记录映射器 - 记录映射类结构
记录映射类结构
有两个类描述记录映射:
-
RecordMap
描述了记录的外部结构,实现了记录解析器和记录编写器。 - 生成的记录类定义了包含数据的对象的结构。该对象允许在数据转换和路由规则条件中引用数据。
记录映射业务服务读取并解析传入数据并创建一条消息,该消息是生成的记录类的一个实例。业务流程可以读取、修改或生成生成的记录类的实例。最后,记录映射业务操作使用实例中的数据将 RecordMap
用作格式化模板来写入传出数据。 RecordMap
类和生成的记录类都具有描述数据的层次结构,但生成的对象结构不必与 RecordMap
结构相同。
当创建一个新的记录映射并将其保存在管理门户中时,此操作定义了一个扩展 RecordMap
类的类。为了定义生成的记录类,您必须在管理门户中单击“生成”,这会调用 EnsLib.RecordMap.Generator
中的 GenerateObject()
方法。仅编译 RecordMap
类定义不会为生成的记录类创建代码。必须使用管理门户或从终端或代码调用 Generator.GenerateObject()
方法。
RecordMap
由一系列字段和组合组成:
- 字段定义具有指定类型的数据字段。字段类型可以指定参数,例如
VALUELIST
、MAXVAL
、MAXLEN
和FORMAT
。在固定宽度的记录中,记录映射器使用字段宽度来设置MAXVAL
或MAXLEN
参数的默认值。 - 组合由一系列字段和组合组成。组合可以嵌套在
RecordMap
中。
默认情况下,管理门户中的记录映射器使用复合级别来设置字段的限定名称。在分隔记录中,复合元素的嵌套级别决定了字段之间使用的分隔符,如下所示:
-
RecordMap
中未包含在组合中的字段由第一个分隔符分隔。 - 在
RecordMap
中的组合中出现的字段由第二个分隔符分隔。 - 出现在本身位于组合内的组合中的字段由第三个分隔符分隔。
- 每个额外的复合嵌套级别都会增加用于分隔字段的分隔符。
固定宽度记录中的组合提供有关数据结构的文档,但不影响 IRIS
处理消息的方式。
每个 RecordMap
对象都有对应的记录对象结构。当生成 RecordMap
时,Record Mapper
定义并编译一个记录对象,该对象定义记录映射的对象表示。默认情况下,管理门户中的 Record Mapper
将记录命名为 RecordMap
限定的“Record
”,但可以在 Target Classname
字段中明确设置记录对象的名称。默认情况下,记录映射器通过使用包含它的组合限定名称来命名组合中的字段。如果使用默认限定名,记录对象类属性的结构将与 RecordMap
字段和组合的结构一致,但如果为字段分配其他名称,记录对象类属性的结构将不匹配RecordMap
字段和组合的结构。
记录对象类扩展了的 EnsLib.RecordMap.Base
, %PersistentO
, %XML.Adaptor
, and Ens.Request
。如果现有类的 RECORDMAPGENERATED
参数为 0,则目标类不会被记录映射框架修改——所有更改都由production
开发人员负责。生成的记录类中的属性取决于记录映射中字段的名称。
记录对象类的属性对应于记录映射的字段,具有以下名称和类型:
- 具有简单非限定名称的字段的名称出现在
RecordMap
或其中的组合中的任何位置。这些属性的类型由字段的类型决定。 - 具有限定名称的字段的顶级名称出现在
RecordMap
或其中的组合中的任何位置。这些属性有一个对象类型和一个由共享相同顶级限定名的字段定义的类。这些类扩展了的%SerialObject
和类中的%XML.Adaptor
。这些类在生成的记录类名的范围内定义。这些类又具有对应于下一级名称限定的属性。
考虑一个示例,正在定义一个分隔记录映射,其中数据包含三个级别的分隔符,例如顶级分隔符字段分隔有关人员的信息,下一层分隔有关身份证号、姓名、和电话号码;最后一层分隔地址和名称中的元素。例如,消息可以以:
French Literature,TA,199-88-7777;Jones|Robert|Alfred;
要定义一个 RecordMap
来处理这些分隔符,需要在人员级别和姓名级别进行组合。因此 FamilyName
字段的默认字段名称可以是 Person.Name.FamilyName
。此默认名称在记录对象类中创建了深层的类名,例如包含 NewRecordMap.Record.Person.Name.FamilyName
等属性的类 NewRecordMap.Record.Person.Name
。可以通过在字段名称前加上 $
(美元符号)字符来避免这种深层次的情况。如果这样做,类和属性都直接在记录范围内定义。使用相同的示例,ewRecordMap.Record.Name
类将包含 NewRecordMap.Record.FamilyName
等属性。
注意:用于限定字段名称的名称用于定义具有对象类型的属性。因此,不能使用名称既限定字段名称又作为字段名称的最后一部分,这将定义具有相同名称和数据类型的属性。
RecordMap
结构的对象模型
可以通过直接创建 XML
或使用 EnsLib.RecordMap.Model.*
类创建 RecordMap
的对象投影来实现类结构行为。一般来说,最受欢迎的方法是使用管理门户,但可能更喜欢使用对象模型来创建 RecordMap
结构。这些类的结构遵循 RecordMap
类结构;使用类参考以获取此级别的更多信息。
在Production
中使用记录映射
当在 Record Mapper
页面上选择生成对象类时,创建了一个可以在生产的业务服务中使用的类。
网友评论