orion知识

 找回密码
 立即注册
搜索
查看: 1326|回复: 0

设计消息映射(二)

[复制链接]

63

主题

75

帖子

1259

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1259
发表于 2020-1-11 19:58:54 | 显示全部楼层 |阅读模式
简单的映射:
     有时,输出消息几乎与输入消息完全相同。消息甚至可以使用相同结构的相同段。在这些情况下,自动映射会生成一个成功的映射,但是会生成大量的映射代码。
     在这些情况下,使用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,它将为该段保存所有公共映射代码。

建议在这种情况下,首先要考虑维护的问题:

结论:
      遵循这些规则设计消息映射将产生一致的映射公式,并使将来的维护更容易管理。
       关键的规则是:
       •根据输出消息的结构构造映射。
       •为复杂类型创建子映射,并在可能的情况下进行代码重用。
       •为子映射使用一致的命名约定。
       •尽可能地限制对多层路径的访问。如果多个项需要访问子组件,请考虑为它创建子映射。
       •除了最琐碎的子映射和循环之外,添加注释。
       对于简单的映射,编码的值函数通常是很好的选择。确保您意识到限制,并且只在适当的时候使用。

        对于复杂的映射,通常需要一些想法来创建易于维护的结构,但是通常都是值得的。在段级别上的基础映射可以帮助对多种消息类型进行重用,并试图将最小可能的对象传递到子映射(例如,将片段替换为子映射的整个根级消息)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|orion知识 ( 浙ICP备20002629号 )

GMT+8, 2024-11-23 10:55 , Processed in 0.065935 second(s), 19 queries .

快速回复 返回顶部 返回列表