Как я могу использовать безопасную версию хапи или как универсальную?
У меня есть этот уродливый код ниже для сообщения 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).