Как я могу использовать безопасную версию хапи или как универсальную?

У меня есть этот уродливый код ниже для сообщения hl7, замеченного здесь. Код работает для разных версий слушателей HL7. Для одной системы я получаю в v2.3, но для другой я получаю в v2.5

Как вы можете заметить, работа практически одинакова для всех версий. Но база ACK message и я не могу позвонить getMsa1_AcknowledgementCode метод без явного приведения к точной версии HL7, и нет общего ACK класс среди них. С помощью этой фиктивной диаграммы я попытался представить проблему. (Я знаю, что есть некоторые другие элементы, такие как AbstractMessage,Group...)

И для первых двух имя метода getMsa1_AcknowledgementCode но для v2.5 его хватает e письмо и похоже getMsa1_AcknowledgmentCode,

Должен ли я использовать отражение и найти метод начинается с имени getMsa_Ack... проверить сообщение о подтверждении или есть какой-то безопасный и красивый способ для этого в проекте хапи?

Не ограничивайте себя в ответе на ACK-сообщение, отвечая. Интересно, как лучше для других.

MSH|^~\&|Vendor|VandorApp|Receiver|RCApp|201504241154||ACK|187718704|T|2.3|||AL|AL|TR
MSA|AA|187718704

        String result="AA";

        ca.uhn.hl7v2.model.Message hl7 = initiator.sendAndReceive(msg);

        if(hl7 instanceof ca.uhn.hl7v2.model.v231.message.ACK)
        {
            ca.uhn.hl7v2.model.v231.datatype.ID id= ((ca.uhn.hl7v2.model.v231.message.ACK)hl7).getMSA().getMsa1_AcknowledgementCode();
            result=id.getValue();               
        }else if (hl7 instanceof ca.uhn.hl7v2.model.v23.message.ACK)
        {
            ca.uhn.hl7v2.model.v23.datatype.ID id=  ((ca.uhn.hl7v2.model.v23.message.ACK)hl7).getMSA().getMsa1_AcknowledgementCode();
            result=id.getValue();               
        }else if( hl7 instanceof ca.uhn.hl7v2.model.v25.message.ACK)
        {
            ca.uhn.hl7v2.model.v25.datatype.ID id=  ((ca.uhn.hl7v2.model.v25.message.ACK)hl7).getMSA().getMsa1_AcknowledgmentCode();
            result=id.getValue();
        }

1 ответ

С C#, используя nHAPI, я бы сделал что-то похожее на следующее

PipeParser parser = new PipeParser();
IMessage hl7Message = parser.Parse(hl7);
IStructure msa = hl7Message.GetStructure("MSA");
IType ackCode = ((ISegment)msa).GetField(1)[0];
MessageBox.Show(((AbstractPrimitive)ackCode).Value);

Вы должны использовать множество базовых структур, и я предположил несколько отливок - поскольку мы ищем определенное поле (мы знаем, что оно определено в спецификациях HL7).

Другие вопросы по тегам