예제 #1
0
        /// <summary>
        /// Builds an ACK or NACK message for this message
        /// </summary>
        /// <param name="code">ack code like AA, AR, AE</param>
        /// <param name="isNack">true for generating a NACK message, otherwise false</param>
        /// <param name="errMsg">error message to be sent with NACK</param>
        /// <returns>An ACK or NACK message if success, otherwise null</returns>
        private Message createAckMessage(string code, bool isNack, string errMsg)
        {
            var response = new StringBuilder();

            if (this.MessageStructure != "ACK")
            {
                var dateString = MessageHelper.LongDateWithFractionOfSecond(DateTime.Now);
                var msh        = this.SegmentList["MSH"].First();
                var delim      = this.Encoding.FieldDelimiter;

                response.Append("MSH").Append(this.Encoding.AllDelimiters).Append(delim).Append(msh.FieldList[4].Value).Append(delim).Append(msh.FieldList[5].Value).Append(delim)
                .Append(msh.FieldList[2].Value).Append(delim).Append(msh.FieldList[3].Value).Append(delim)
                .Append(dateString).Append(delim).Append(delim).Append("ACK").Append(delim).Append(this.MessageControlID).Append(delim)
                .Append(this.ProcessingID).Append(delim).Append(this.Version).Append(this.Encoding.SegmentDelimiter);

                response.Append("MSA").Append(delim).Append(code).Append(delim).Append(this.MessageControlID).Append((isNack ? delim + errMsg : string.Empty)).Append(this.Encoding.SegmentDelimiter);
            }
            else
            {
                return(null);
            }

            try
            {
                var message = new Message(response.ToString());
                message.ParseMessage();
                return(message);
            }
            catch
            {
                return(null);
            }
        }
예제 #2
0
        /// <summary>
        /// Builds a negative ack for this message
        /// </summary>
        /// <param name="code">ack code like AR, AE</param>
        /// <param name="errMsg">error message to be sent with ACK</param>
        /// <returns>A NACK message if success, otherwise null</returns>
        public Message getNACK(string code, string errMsg)
        {
            string ackMsg;

            if (this.MessageStructure != "ACK")
            {
                var dateString = MessageHelper.LongDateWithFractionOfSecond(DateTime.Now);
                var msh        = this.SegmentList["MSH"].First();
                var delim      = this.Encoding.FieldDelimiter;

                ackMsg = "MSH" + this.Encoding.AllDelimiters + delim + msh.FieldList[4].Value + delim + msh.FieldList[5].Value + delim + msh.FieldList[2].Value + delim
                         + msh.FieldList[3].Value + delim + dateString + delim + msh.FieldList[7].Value + delim + "ACK" + delim + this.MessageControlID + delim
                         + this.ProcessingID + delim + this.Version + this.Encoding.SegmentDelimiter;

                ackMsg += "MSA" + delim + code + delim + this.MessageControlID + delim + errMsg + this.Encoding.SegmentDelimiter;
            }
            else
            {
                return(null);
            }

            try
            {
                var nack = new Message(ackMsg);
                nack.ParseMessage();
                return(nack);
            }
            catch
            {
                return(null);
            }
        }
예제 #3
0
        /// <summary>
        /// Builds an ACK or NACK message for this message
        /// </summary>
        /// <param name="code">ack code like AA, AR, AE</param>
        /// <param name="isNack">true for generating a NACK message, otherwise false</param>
        /// <param name="errMsg">error message to be sent with NACK</param>
        /// <returns>An ACK or NACK message if success, otherwise null</returns>
        private Message createAckMessage(string code, bool isNack, string errMsg)
        {
            string response;

            if (this.MessageStructure != "ACK")
            {
                var dateString = MessageHelper.LongDateWithFractionOfSecond(DateTime.Now);
                var msh        = this.SegmentList["MSH"].First();
                var delim      = this.Encoding.FieldDelimiter;

                response = "MSH" + this.Encoding.AllDelimiters + delim + msh.FieldList[4].Value + delim + msh.FieldList[5].Value + delim
                           + msh.FieldList[2].Value + delim + msh.FieldList[3].Value + delim
                           + dateString + delim + delim + "ACK" + delim + this.MessageControlID + delim
                           + this.ProcessingID + delim + this.Version + this.Encoding.SegmentDelimiter;

                response += "MSA" + delim + code + delim + this.MessageControlID + (isNack ? delim + errMsg : string.Empty) + this.Encoding.SegmentDelimiter;
            }
            else
            {
                return(null);
            }

            try
            {
                var message = new Message(response);
                message.ParseMessage();
                return(message);
            }
            catch
            {
                return(null);
            }
        }
예제 #4
0
        public void AddSegmentMSH(string sendingApplication, string sendingFacility, string receivingApplication, string receivingFacility,
                                  string security, string messageType, string messageControlID, string processingID, string version)
        {
            var dateString = MessageHelper.LongDateWithFractionOfSecond(DateTime.Now);
            var delim      = this.Encoding.FieldDelimiter;

            string response = "MSH" + this.Encoding.AllDelimiters + delim + sendingApplication + delim + sendingFacility + delim
                              + receivingApplication + delim + receivingFacility + delim
                              + dateString + delim + security + delim + messageType + delim + messageControlID + delim
                              + processingID + delim + version + this.Encoding.SegmentDelimiter;

            var message = new Message(response);

            this.AddNewSegment(message.DefaultSegment("MSH"));
        }