Esempio n. 1
0
        private ISegment TryToRecoverCriticalDataFromMessage(string message)
        {
            ISegment msh = null;

            if (!message.StartsWith("MSH|"))
            {
                return(null);
            }
            //try to get MSH segment
            int locStartMSH = message.IndexOf("MSH");

            if (locStartMSH < 0)
            {
                return(null);
            }
            int locEndMSH = message.IndexOf('\r', locStartMSH + 1);

            if (locEndMSH < 0)
            {
                locEndMSH = message.Length;
            }
            String mshString = message.Substring(locStartMSH, (locEndMSH) - (locStartMSH));

            //find out what the field separator is
            char fieldSep = mshString[3];

            //get field array
            String[] fields = PipeParser.Split(mshString, Convert.ToString(fieldSep));

            try
            {
                //parse required fields
                String   encChars      = fields[1];
                char     compSep       = encChars[0];
                String   messControlID = fields[9];
                String[] procIDComps   = PipeParser.Split(fields[10], Convert.ToString(compSep));

                //fill MSH segment
                String version = NHapi.Model.V251.Constants.VERSION; //default
                try
                {
                    version = contextParser.GetVersion(message);
                }
                catch (Exception)
                {
                    /* use the default */
                }
                //IModelClassFactory factory = parser.Factory;
                //msh = new MSH(new NHapiBugsFixing.V251(factory), factory);

                //msh = new GenericSegment(new NHapiBugsFixing.GenericMessageVersion(version), "MSH");

                Terser.Set(msh, 1, 0, 1, 1, Convert.ToString(fieldSep));
                Terser.Set(msh, 2, 0, 1, 1, encChars);
                Terser.Set(msh, 10, 0, 1, 1, messControlID);
                Terser.Set(msh, 12, 0, 1, 1, version);

                string messageType = TryTorecoverTheMessageType(message);

                if (!string.IsNullOrEmpty(messageType))
                {
                    Terser.Set(msh, 9, 0, 1, 1, messageType.Split('_')[0]);
                    if (messageType.Split('_').Length > 0)
                    {
                        Terser.Set(msh, 9, 0, 2, 1, messageType.Split('_')[1]);
                    }
                }

                //Terser.Set(msh, 11, 0, 1, 1, procIDComps[0]);
            }
            catch (HL7Exception he)
            {
                _errorMessage.AppendLine(he.Message);
                return(null);
            }
            catch (System.Exception se)
            {
                _errorMessage.AppendLine(se.Message);
                return(null);
            }
            return(msh);
        }