它描述您如何能使用消息标识来标识嵌入式消息。 使用消息标识来标识嵌入式消息是一种代替使用消息键的技术。
当多段式消息具有如下面图 1 中所示这样的格式时,消息标识技术对于标识嵌入式消息很有用。
在本示例中,消息头和消息尾部可以充当消息体的封包。它们通常有固定的结构,尽管可以用很多不同的结构来定义消息体。
通过将消息体的复杂类型或组的组合属性设置为消息来创建占位符。 这允许在外部消息中的该点上添加嵌入式消息,从而创建多段式消息。
当使用消息标识技术来解析这样一个多段式消息时,必须使用消息标识元素,在消息头中较早地标识嵌入式消息。 这是一个在模型中出现在嵌入式消息前面的字符串元素(或属性),其将值解释为属性设置为消息标识。
如果将多段式消息输入到消息流,消息标识元素的值应对应于位流中下一条嵌入式消息的名称或消息别名。 这使得 MRM 解析器能正确地在模型中标识嵌入式消息。
如果消息标识元素值不匹配消息的名称,您应使用消息别名属性来指定此值。 MRM 解析器将首先尝试匹配名称,如果未能匹配,它将尝试匹配消息别名。
一旦 MRM 解析器遇到了消息标识元素,其值会应用到当前消息中直接包含的所有嵌入式消息。 它不会应用到嵌入式消息内的嵌入式消息;任何嵌入式消息的标识必须由它的直接父消息内的消息标识元素提供。
如果在当前消息中遇到第二个消息标识元素,其值会覆盖任何先前保存的值。 这使得一条给定的消息中能存在不同级的嵌入式消息。
消息标识的优先级高于消息路径。如果两者均已指定,则使用消息标识。对于一个给定的多段式消息应仅使用这些技术中的某一个。
缺省情况下,假定嵌入式消息定义在与当前消息同一个消息集中。 这可以使用消息集标识来覆盖,消息集标识的工作方式与消息标识非常类似。
在其他消息集中定义的嵌入式消息,必须使用消息集标识元素在消息中提前标识其消息集。这是一个在模型中出现在嵌入式消息前面的字符串元素(或属性),其将值解释为属性设置为消息集标识。
如果将多段式消息输入到消息流,消息集标识元素的值应对应于位流中下一条嵌入式消息的标识、名称或消息集别名。 这使得 MRM 解析器能正确地识别要使用的消息集。
如果消息集标识元素值不匹配消息集的标识或名称,您应使用消息集别名属性来指定此值。 MRM 解析器将首先尝试匹配标识,然后尝试匹配名称,最后尝试匹配消息集别名。
一旦 MRM 解析器遇到了消息集标识元素,其值会应用到当前消息中包含的所有嵌入式消息。 它还应用到嵌入式消息中的嵌入式消息,除非嵌入式消息也包含消息集标识元素。
如果在当前消息中遇到第二个消息集标识元素,其值会覆盖任何先前保存的值。 这使得同级嵌入式消息能位于不同的消息集中。
下面的 X12 消息示例显示了同时使用消息标识和消息集标识。 在行 0002 上,GS 段内包含 004010X092 的字段将消息集标识作为消息集别名保存。行 0003 上 ST 段中的 207 是作为消息别名保存的消息标识。 嵌入式消息从行 0004 到行 0015(含)。
0001 ISA*00* *00* *30*12-3456789 *ZZ *9876543-21 *000104*1820*U*00401*000000001*0*T*:! 0002 GS*HS*HOSP CLAIM*PAYER ADJDEPT*20000104*1820*1*X*004010X092! 0003 ST*270*1234! 0004 BHT*0022*13*10001234*19990501*1319! 0005 HL*1**20*1! 0006 NM1*PR*2*ABCCOMPANY*****PI*842610001! 0007 HL*2*1*21*1! 0008 NM1*1P*2*BONE AND JOINT CINIC*****SV*2000035!REF*N7*234899! 0009 N3*55*HIGH STREET! 0010 N4*SEATTLE*WA*98123! 0011 HL*3*2*22*0!TRN*1*93175-12547*9877281234! 0012 NM1*IL*1*SMITH*ROBERT*B***MI*11122333301! 0013 REF*1L*599119! 0014 DMG*D8*19430519*M! 0015 DTP*472*RD8*19990501-19990515!EQ*30**FAM!SE*17*1234! 0016 GE*1*1!IEA*1*000000001!
消息标识 和消息集标识都能适用于所有物理格式。V6.0 之前的 TDS 物理格式的版本包含了通过消息键标识嵌入式消息,其工作方式与消息标识类似,但仅适用于 TDS。 消息键已不推荐使用,而被消息标识取代。