печать сообщения HL7 в консоли - PullRequest
1 голос
/ 24 ноября 2011

Я передаю объект конструктору, а затем добавляю параметры этого объекта в HL7.ORU_R01 - это тип HL7.Когда я печатаю HL7 на консоль, печатается только последний OBX.Что не так с моим кодом?Как я могу написать это сообщение HL7 в сокет?Есть ли более простой способ в Java для Handel HL7?

public class FlexSMessageHL7 {
private FileWriter writeHL7ToFile;
private PrismaflexSMessage sMessage;
private ORU_R01 message;
private int i = 0;
private OBX obx = null;

public FlexSMessageHL7(FlexSMessage sMessage) {
    this.sMessage = sMessage;
    this.message = new ORU_R01();
    createHL7SMessage();
}

public void createHL7SMessage() {

    // Populate the MSH Segment
    MSH msh = message.getMSH();
    try {
        msh.getFieldSeparator().setValue("|");
        msh.getEncodingCharacters().setValue("^~\\&");
        msh.getDateTimeOfMessage().setValue(sMessage.getTime().toString());
        msh.getSendingApplication().getNamespaceID().setValue(String.valueOf(sMessage.getMachID()));
    } catch (DataTypeException e) {
        e.printStackTrace();
    }

    // Populate the OBR Segment:time
    OBR obr = message.getPATIENT_RESULT().getORDER_OBSERVATION().getOBR();
    try {
        obr.getObservationDateTime().setValue(String.valueOf(sMessage.getTime()));
    } catch (DataTypeException e) {
        e.printStackTrace();
    }

    // Populate the PID Segment:PatientId
    PID pid = message.getPATIENT_RESULT().getPATIENT().getPID();
    try {
        pid.getPatientID().getIDNumber().setValue(sMessage.getPatID());
    } catch (HL7Exception e) {
        e.printStackTrace();
    }

    // Populate the OBX Segment:Param_Code, time, Measure_Value
    while (i < sMessage.getMsgInfo()) {
        for (PrismaflexSRecord sRecord : sMessage.getsRecordCollection()) {
            try {
                obx = message.getPATIENT_RESULT().getORDER_OBSERVATION().getOBSERVATION(i).getOBX();
                obx.getSetIDOBX().setValue(String.valueOf(i));
                obx.getObservationIdentifier().getIdentifier().setValue(sRecord.getParamCode());
                obx.getDateTimeOfTheObservation().setValue(String.valueOf(sRecord.getTimeStamp()));
                obx.getObservationIdentifier().getNameOfCodingSystem().setValue(String.valueOf(sRecord.getMeasureValue()));
                i++;
            } catch (HL7Exception e) {
                e.printStackTrace();
            }
        }

    }
    try {
        writeHL7ToFile = new FileWriter(File.createTempFile("prismaflexOutputFrom3001HL7", "txt", new File
                ("c:\\tmp\\prismaflex")));
        writeHL7ToFile.write(message.getMSH().toString());
        writeHL7ToFile.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }

    // Now, Encode the message and look at the output
    try {

        Parser parser = new PipeParser();
        String encodedMessage = parser.encode(message);
        System.out.println("Printing HL7 Encoded Message:");
        System.out.println(encodedMessage);
    } catch (HL7Exception e) {
        e.printStackTrace();
    }
}

}

Ответы [ 4 ]

1 голос
/ 14 ноября 2013

Как отметил Николас Орловски, проблема заключается в том, что в конце строки находятся символы, которые в соответствии со стандартом HL7 являются символами CR, которые заставляют командную строку Windows только сбрасывать курсор в начале строки и перезаписывать его содержимым следующей строки.,Поэтому для вывода на консоль Вам необходимо заменить окончания строк чем-то другим.

Для недавнего приложения HL7, использующего HAPI, который вы, похоже, также используете, я сделал небольшой вспомогательный метод для достижения этой функции:

private static String replaceNewlines(String input) {
    return input.replaceAll("\\r", "\n");
}

Эту функцию можно использовать на всех платформах, поскольку она заменяет символы CR символами новой строки для ОС.

Затем я могу использовать ее для вывода на консоль в видеследует:

LOGGER.trace("Generated message contents:\n" + replaceNewlines(outMessage.encode()));

В этом случае я использую log4j для входа в консоль, а не в простую распечатку консоли, но проблема для меня была та же.

Надеюсь, это поможет!

1 голос
/ 01 декабря 2011

Рассматривали ли вы использование HAPI? Он написан для Java, его противоположность nHAPI написана также для .net. Подробности здесь:

http://hl7api.sourceforge.net/

0 голосов
/ 13 ноября 2013

Он не будет отображаться в консоли, но будет отображаться при записи в файл. Попробуйте посмотреть переменную в режиме отладки и записать ее в файл.

0 голосов
/ 31 октября 2012

У меня была похожая проблема в моей библиотеке Python HL7py.Часто консоль не любит печатать символы.Мне пришлось написать помощник, который изменил CR на LF (перевод строки), чтобы правильно отображать строки.Надеюсь, это поможет.

...