【问题标题】:nhapi - Modifiy a segment valuenhapi - 修改段值
【发布时间】:2015-03-06 06:04:19
【问题描述】:

环境:

Visual Studio 2013, Winform / C# / 框架 4.5, nHapi DLL 2.4.0.9, HL7 版本 2.3

我正在构建一个小的 Windows 应用程序,它读取 HL7 消息并将它们发送到接口系统。 一切正常,但我想知道是否可以替换/添加/修改段值:EVN 5.2(运营商 ID/家族名称)。

此刻,我正在电脑上读取HL7文件的内容,将内容放入字符串,解析消息,编码消息并返回。

    public static String ParseMessage(String message)
    {
        var parser = new NHapi.Base.Parser.PipeParser();
        var parsedMessage = parser.Parse(message);
        /* I guess it's here that I should do the change for the EVN 5.2 ? But How ;-) */
        var msgType = parsedMessage.GetStructureName();
        var pipeDelimitedMessage = parser.Encode(parsedMessage);

        return pipeDelimitedMessage;
    }

感谢大家的帮助

理查德

【问题讨论】:

  • 您有示例消息吗?

标签: c# .net hl7 nhapi


【解决方案1】:

nHapi 让您执行此操作的方式是将“解析的”抽象消息转换为具体类型,以便您能够遍历对象模型并设置您想要的属性。

以 ADT A01 承认消息为例:

    [Test]
    public void TestPopulateEVNOperaterID()
    {
        string message = @"MSH|^~\&|SUNS1|OVI02|AZIS|CMD|200606221348||ADT^A01|1049691900|P|2.3
EVN|A01|200601060800
PID||8912716038^^^51276|0216128^^^51276||BARDOUN^LEA SACHA||19981201|F|||AVENUE FRANC GOLD 8^^LUXEMBOURGH^^6780^150||053/12456789||N|S|||99120162652||^^^|||||B
PV1||O|^^|U|||07632^MORTELO^POL^^^DR.|^^^^^|||||N||||||0200001198
PV2|||^^AZIS||N|||200601060800
IN1|0001|2|314000|||||||||19800101|||1|BARDOUN^LEA SACHA|1|19981201|AVENUE FRANC GOLD 8^^LUXEMBOURGH^^6780^150|||||||||||||||||ZIN|0164652011399|0164652011399|101|101|45789^Broken bone";

        var parser = new PipeParser();
        var abstractMessage = parser.Parse(message);

        // this is the normal / expected way of working with NHapi parsed messages
        var typedMessage = abstractMessage as ADT_A01;
        if (typedMessage != null)
        {
            typedMessage.EVN.OperatorID.FamilyName.Value = "Surname";
            typedMessage.EVN.OperatorID.GivenName.Value = "Firstname";
        }

        var pipeDelimitedMessage = parser.Encode(typedMessage);

        // alternatively, you can apply this modification to any HL7 2.3 message
        // with an EVN segment using this more generic method
        var genericMethod = abstractMessage as AbstractMessage;
        var evn = genericMethod.GetStructure("EVN") as EVN;
        if (evn != null)
        {
            evn.OperatorID.FamilyName.Value = "SurnameGeneric";
            evn.OperatorID.GivenName.Value = "FirstnameGeneric";
        }

        pipeDelimitedMessage = parser.Encode(typedMessage);
    }

我相信第二种更通用的方式可能是您在这种情况下想要的方式,但是我想我也会向您展示如何获取已解析/具体类型,以便您可以使用这种方式如果您正在处理特定的消息类型。

【讨论】:

  • 非常感谢!我已经对其进行了测试,并且它的工作方式与预期的一样。也感谢您展示了两种方法。祝你有美好的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多