简单的映射: 有时,输出消息几乎与输入消息完全相同。消息甚至可以使用相同结构的相同段。在这些情况下,自动映射会生成一个成功的映射,但是会生成大量的映射代码。 在这些情况下,使用mapper中可用的编码方法是值得考虑的。这些方法处理的是一个完整的部分,或者是段组,而不是一个段内的各个字段。如果消息结构匹配,这将导致原始段被复制到输出段。 这两种编码方法是: •getEncodedValue()——返回传递到方法中的代码段的编码值。编码的等价是段的文本表示,因为它将出现在消息中: •setEncodedValue()——根据编码的表示设置一个片段的值。这个方法可以在一个调用中设置段或段组的全部内容。 下面的映射代码将把MSH、EVN和PV1段从输入消息直接复制到输出消息中。其他代码将字段单独映射到普通映射中。
复杂的映射: 大多数段映射发生在一对一的基础上,其中一个片段中的信息用于填充单个输出段中的信息。然而,有一些显著的例外。
段组:许多复杂的消息类型包括可以包含复杂消息序列的段组。
在这些情况下,主映射对每个段直接调用子映射是没有意义的。一种更好的方法是为整个段组创建一个子映射,并将子映射称为基于片段的子映射。
映射设计器中的段组的数据类型也与特定的消息绑定,因此应该注意,基于分段组的子映射不能在不同的消息映射中共享。然而,所有的段组可以调用组内的段的共享子映射。这仍然允许完全重用映射代码。
非一对一的映射: 有些段需要来自另一个输入段或多个位置的数据。在这种情况下,解决方案需要更多的思考。下面的规则2(所有代码都应该保存在单个映射中)意味着我们只需要找到一种方法将这些信息传递到子映射中。 这通常很简单,只需将参数编辑到映射,并向参数列表中添加另一个输入参数(使用右键单击上下文菜单并选择Edit map定义)。 map MapToZPA( < - Input: PID inPID,< - Input:: PD1 inPD1,- > 输出:: ZPA outZPA)
根据所需要的数据在消息中所处的级别(与submap调用的关系),数据可能需要通过从顶级级别的多个子映射来传递。在最糟糕的情况下,可以将整个消息结构传递到子映射中,以访问整个消息,但建议尽可能地选择所需信息的最小单元,以允许最大重用。
同一类型的段需要不同的处理: 在极少数情况下,可能会有不同的处理规则来应用到相同的段类型,这取决于消息类型或消息中的片段的位置。在这些情况下,最好的方法通常取决于具体的需求。如果所需要的更改超过几行,那么创建多个子映射可能是最好的解决方案。 例如,如果ZNZ段对三个字段有不同的处理规则,这取决于消息是A04消息还是A08消息,那么将创建下面的子映射。 MapToA04ZNZ MapToA08ZNZ MapToCommonZNZ MapToA04ZNZ和MapToA08ZNZ方法都将调用MapToCommonZNZ,它将为该段保存所有公共映射代码。
建议在这种情况下,首先要考虑维护的问题:
结论: 遵循这些规则设计消息映射将产生一致的映射公式,并使将来的维护更容易管理。 关键的规则是: •根据输出消息的结构构造映射。 •为复杂类型创建子映射,并在可能的情况下进行代码重用。 •为子映射使用一致的命名约定。 •尽可能地限制对多层路径的访问。如果多个项需要访问子组件,请考虑为它创建子映射。 •除了最琐碎的子映射和循环之外,添加注释。 对于简单的映射,编码的值函数通常是很好的选择。确保您意识到限制,并且只在适当的时候使用。
对于复杂的映射,通常需要一些想法来创建易于维护的结构,但是通常都是值得的。在段级别上的基础映射可以帮助对多种消息类型进行重用,并试图将最小可能的对象传递到子映射(例如,将片段替换为子映射的整个根级消息)。
|