public static void handleAckForService(HL7Message hl7Message, Message message, string ackResponseMessage) { // get the message control id to build the ack string messageControlId = HL7MessageUtility.getValueByPosition(hl7Message, SegmentType.MSH, MESSAGE_HEADER_CONTROL_ID); // get the message date stamp string messageDateStamp = HL7MessageUtility.getValueByPosition(hl7Message, SegmentType.MSH, MESSAGE_DATE_STAMP_POSITION); // get the correct ack response bool isRejected = ShieldsExpressLinkUtility.handleCheckApplicationRejected(ackResponseMessage); // if the ack message is rejected, apply act type AcknowledgementDAO.AcknowledgementType ackMessageEnum = (isRejected) ? AcknowledgementDAO.AcknowledgementType.AR: AcknowledgementDAO.AcknowledgementType.AA; // get ack response string strAckResponse = HL7MessageUtility.getAck(ackMessageEnum.ToString(), messageControlId, messageDateStamp, MESSAGE_HEADER_APPLICATION_NAME, MESSAGE_HEADER_FACILITY_NAME, ackResponseMessage); // build ack response Acknowledgement ackResponse = new Acknowledgement() { acknowledgementTypeId = (int)ackMessageEnum, messageId = message.id, raw = strAckResponse, createdDttm = DateTime.Now }; // insert into ack AcknowledgementDAO.insertIntoAcknowledgement(ackResponse); }
public static MessageLogDAO.MessageLogType handleAcknowledgement(HL7Message hl7Message, string hl7Input, int messageIdentity, HL7Broker.Model.Socket socket) { string ackResponseMessage = BLANK; AcknowledgementDAO.AcknowledgementType ackType = AcknowledgementDAO.AcknowledgementType.UNKNOWN; MessageLogDAO.MessageLogType logType = MessageLogDAO.MessageLogType.UNKNOWN; if (messageIdentity == NEG_ONE) { // swap it to 9999 so we don't insert a neg value messageIdentity = ERROR_CODE_NINE; ackType = AcknowledgementDAO.AcknowledgementType.AE; ackResponseMessage = ERROR_MESSAGE_FROM_BROKER; } else if (messageIdentity == ZERO) { ackType = AcknowledgementDAO.AcknowledgementType.AR; ackResponseMessage = ERROR_MESSAGE_REJECTED; } else { ackType = AcknowledgementDAO.AcknowledgementType.AA; ackResponseMessage = MESSAGE_NO_ERROR; } // get the message control id to build the ack string messageControlId = HL7MessageUtility.getValueByPosition(hl7Message, SegmentType.MSH, MESSAGE_HEADER_CONTROL_ID); string messageDateStamp = HL7MessageUtility.getValueByPosition(hl7Message, SegmentType.MSH, MESSAGE_DATE_STAMP_POSITION); // get ack response string strAckResponse = HL7MessageUtility.getAck(ackType.ToString(), messageControlId, messageDateStamp, MESSAGE_HEADER_APPLICATION_NAME, MESSAGE_HEADER_FACILITY_NAME, ackResponseMessage); try { // build ack response Acknowledgement ackResponse = new Acknowledgement() { id = NEG_ONE, acknowledgementTypeId = (int)ackType, messageId = messageIdentity, raw = strAckResponse, createdDttm = DateTime.Now }; // insert into the acknowledgement ackResponse = AcknowledgementDAO.insertIntoAcknowledgement(ackResponse); logType = (ackResponse.id != NEG_ONE) ? MessageLogDAO.MessageLogType.ORIGINAL : MessageLogDAO.MessageLogType.ERRORED; // get the network stream to send the ack back NetworkStream stream = socket.getNetworkStream(); // pad the hl7 msesage for transfer strAckResponse = HL7MessageUtility.padHL7MessageForTransfer(strAckResponse); stream.Write(Encoding.UTF8.GetBytes(strAckResponse), 0, strAckResponse.Length); } catch (Exception e) { ErrorLogger.LogError(e, "handleAcknowledgement()", messageControlId); } // send the ack message // return the type of log we are submitting return(logType); }