2

オブジェクトをコンストラクターに渡し、このオブジェクトのパラメーターを HL7 に追加しています。ORU_R01 は HL7 のタイプです。HL7 をコンソールに出力すると、最後の OBX だけが出力されます。コードの何が問題になっていますか? このHL7メッセージをソケットに書き込むにはどうすればよいですか? Javaで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

4 に答える 4

1

Nicholas Orlowski が指摘したように、問題は行末文字にあります。これは、HL7 標準によれば、Windows コマンド プロンプトがカーソルを行頭にリセットし、次の行の内容で上書きするだけの CR 文字です。したがって、コンソール出力の場合、行末を別のものに置き換える必要があります。

あなたも使用しているように見えるHAPIを使用する最近のHL7アプリの場合、この機能を実現するための小さなヘルパーメソッドを作成しました。

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

この関数は、CR 文字を OS 固有の改行文字に置き換えるため、すべてのプラットフォームで使用できます。

次に、それを使用して、次のようにコンソールに出力できます。

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

この場合、単純なコンソール出力ではなく、コンソールへのロギングに log4j を使用していますが、問題は同じでした。

それが役に立てば幸い!

于 2013-11-14T09:01:15.243 に答える
1

HAPIの使用を検討しましたか? これは Java 用に書かれていますが、対応する部分である nHAPI は .net 用にも書かれています。詳細はこちら:

http://hl7api.sourceforge.net/

于 2011-11-30T22:38:01.690 に答える
0

It won't display in the console but it will when you write to the file. Try looking at the variable in debug mode and writing it to a file.

于 2013-11-13T17:54:43.847 に答える
0

Python HL7py ライブラリで同様の問題が発生しました。多くの場合、コンソールは文字の印刷を好みません。行を正しく表示するには、CR を LF (改行) に変更するヘルパーを作成する必要がありました。それが役立つことを願っています。

于 2012-10-31T17:59:05.173 に答える