예제 #1
0
        /// <summary>
        /// Initialize EDIReader with a stream. Verify that stream contains EDI document (ISA segment).
        /// </summary>
        /// <param name="stream"></param>
        /// <returns>true if EDI document otherwise false</returns>
        public bool Initialize(Stream stream, IFatpipeManager fatpipeManager)
        {
            Logger.Info("EDIReader.Initialize", "Start");

            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();

            FPManager = fatpipeManager;

            long orgStartPos = stream.Position;

            Delimiters           delimiters;
            InterchangeTokenizer tokenizer = new InterchangeTokenizer(stream);
            bool isValidEDIDocument        = tokenizer.IsX12Interchange(out delimiters);

            CurrentSegmentNumber     = 0;
            ValidTransactionSetCount = InvalidTransactionSetCount = 0;
            PrevTransactionSetType   = 0;

            DocumentReader = null;
            if (isValidEDIDocument == true)
            {
                EDIDelimiters = delimiters;
                //TODO: Review following logic
                //Read ISA field till component separator - Do not include component separator
                ISASegment = tokenizer.ISARecord.Substring(0, tokenizer.ISARecord.IndexOf((char)EDIDelimiters.ComponentSeperator) + 1);

                //TODO: Suraj: confirm this special case - last value as data element separator
                ISARecordFields = ISASegment.Split((char)EDIDelimiters.FieldSeperator);

                CurrentSegmentNumber = 1;

                this.DocumentReader = new StreamReader(stream, Encoding.UTF8);
                //TODO: Why is seek required here?
                this.DocumentReader.BaseStream.Seek(tokenizer.ISARecordLen + orgStartPos, SeekOrigin.Begin);
                FatpipeDocumentInst = new FatpipeDocument();

                SegmentDelimiter = ((char)EDIDelimiters.SegmentDelimiter).ToString();
            }
            else
            {
                ISASegment = string.Empty;
            }

            LastState = EDIState.ISA;

            sw.Stop();
            Logger.Info("EDIReader.Initialize", "Stop. Elapsed time {0} ms", sw.ElapsedMilliseconds);

            return(isValidEDIDocument);
        }
예제 #2
0
 public static void Validate(ISASegment ISASerializer, ISASegment ISADeserializer)
 {
     Assert.AreEqual(ISASerializer.AuthorizationInformationQualifier, ISADeserializer.AuthorizationInformationQualifier);
     Assert.AreEqual(ISASerializer.AuthorizationInformation, ISADeserializer.AuthorizationInformation);
     Assert.AreEqual(ISASerializer.SecurityInformationQualifier, ISADeserializer.SecurityInformationQualifier);
     Assert.AreEqual(ISASerializer.SecurityInformation, ISADeserializer.SecurityInformation.Trim());
     Assert.AreEqual(ISASerializer.SenderIDQualifier, ISADeserializer.SenderIDQualifier);
     Assert.AreEqual(ISASerializer.SenderID, ISADeserializer.SenderID.Trim());
     Assert.AreEqual(ISASerializer.ReceiverIDQualifier, ISADeserializer.ReceiverIDQualifier);
     Assert.AreEqual(ISASerializer.ReceiverID, ISADeserializer.ReceiverID);
     Assert.AreEqual(ISASerializer.Date, ISADeserializer.Date);
     Assert.AreEqual(ISASerializer.ControlStandardsIdentifier, ISADeserializer.ControlStandardsIdentifier);
     Assert.AreEqual(ISASerializer.ControlVersionNumber, ISADeserializer.ControlVersionNumber);
     Assert.AreEqual(ISASerializer.ControlNumber, ISADeserializer.ControlNumber);
     Assert.AreEqual(ISASerializer.AcknowledgmentRequeste, ISADeserializer.AcknowledgmentRequeste);
     Assert.AreEqual(ISASerializer.UsageIndicator, ISADeserializer.UsageIndicator);
 }
예제 #3
0
        public static ISASegment Get()
        {
            ISASegment iSAClass = new ISASegment();

            iSAClass.AuthorizationInformationQualifier = 0;
            iSAClass.AuthorizationInformation          = "          ";
            iSAClass.SecurityInformationQualifier      = 0;
            iSAClass.SecurityInformation = "";
            iSAClass.SenderIDQualifier   = "02";
            iSAClass.SenderID            = "UFLB";
            iSAClass.ReceiverIDQualifier = "14";
            iSAClass.ReceiverID          = "006922827TEST1";
            iSAClass.Date = new DateTime(2019, 04, 18, 17, 30, 0);
            iSAClass.ControlStandardsIdentifier = "U";
            iSAClass.ControlVersionNumber       = 401;
            iSAClass.ControlNumber             = 14;
            iSAClass.AcknowledgmentRequeste    = false;
            iSAClass.UsageIndicator            = "P";
            iSAClass.ComponentElementSeparator = '|';
            return(iSAClass);
        }
예제 #4
0
        /// <summary>
        /// Initialize EDIReader with a stream. Verify that stream contains EDI document (ISA segment).
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="fatpipeManager"></param>
        /// <param name="documentPlug"></param>
        /// <returns>true if EDI document otherwise false</returns>
        public bool Initialize(Stream stream, IFatpipeManager fatpipeManager, IDocumentPlug documentPlug)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();

            Errors = new InterchangeErrors();

            FPManager    = fatpipeManager;
            DocumentPlug = documentPlug;

            long orgStartPos = stream.Position;

            Delimiters           delimiters;
            InterchangeTokenizer tokenizer = new InterchangeTokenizer(stream);
            bool isValidEDIDocument        = tokenizer.IsX12Interchange(out delimiters);

            FunctionalGroupNumber    = TransactionSetNumber = SegmentNumberFromStart = SegmentNumber = 0;
            ValidTransactionSetCount = InvalidTransactionSetCount = 0;
            PrevTransactionSetType   = 0;

            DocumentReader = null;
            if (isValidEDIDocument == true)
            {
                EDIDelimiters = delimiters;
                //TODO: Review following logic
                //Read ISA field till component separator - Do not include component separator
                ISASegment = tokenizer.ISARecord.Substring(0, tokenizer.ISARecord.IndexOf((char)EDIDelimiters.ComponentSeperator) + 1);

                //TODO: Suraj: confirm this special case - last value as data element separator
                ISARecordFields = ISASegment.Split((char)EDIDelimiters.FieldSeperator);

                SegmentNumberFromStart = 1;

                stream.Position     = orgStartPos;
                this.DocumentReader = new StreamReader(stream, Encoding.UTF8);
                //TODO: Why is seek required here?
                this.CurrentSegmentStartPos = 0;
                this.CurrentSegmentEndPos   = 0;
                //this.CurrentSegmentEndPos = this.CurrentSegmentStartPos + tokenizer.ISARecordLen - 1;
                //this.DocumentReader.BaseStream.Seek(this.CurrentSegmentEndPos + basePosition, SeekOrigin.Begin);
                FatpipeDocumentInst = new FatpipeDocument();
                FatpipeDocumentInst.BeautifiedOriginalPayloadStartHeader = string.Empty;
                FatpipeDocumentInst.BeautifiedOriginalPayloadBody        = string.Empty;
                FatpipeDocumentInst.BeautifiedOriginalPayloadEndHeader   = string.Empty;

                SegmentDelimiter          = ((char)EDIDelimiters.SegmentDelimiter).ToString();
                FormattedSegmentDelimiter = SegmentDelimiter;

                bool crLFPresent = delimiters.SegmentDelimiter == Delimiters.CarriageReturn || delimiters.SegmentDelimiterSuffix1 == Delimiters.CarriageReturn;
                if (!crLFPresent)
                {
                    FormattedSegmentDelimiter = string.Format("{0}{1}", FormattedSegmentDelimiter, Environment.NewLine);
                }

                Logger.Info("EDIReader.Initialize", "EDIDelimiters: SegmentDelimiter={0}, FieldSeperator={1}, ComponentSeperator={2}", (char)EDIDelimiters.SegmentDelimiter, (char)EDIDelimiters.FieldSeperator, (char)EDIDelimiters.ComponentSeperator);
            }
            else //invalid document code path
            {
                this.CurrentSegmentStartPos = orgStartPos;
                this.CurrentSegmentEndPos   = orgStartPos + 3;
                Logger.Error("EDIReader.Initialize", EventId.EDIReaderInvalidDocument, "EDI document is not valid. Error: {0}", tokenizer.Error);

                Errors.AddGenericError("ISA", SchemaErrorCode.SchemaCode100EInvalidDocType, tokenizer.Error, SegmentNumber, this.CurrentSegmentStartPos, this.CurrentSegmentEndPos);

                StringBuilder sb         = new StringBuilder();
                int           errorIndex = 1;
                Errors.IsaIeaErrorList.WriteError(sb, ref errorIndex);

                ISASegment = string.Empty;
            }

            LastState = EDIState.ISA;

            sw.Stop();
            Logger.Debug("EDIReader.Initialize", "Elapsed time {0} ms", sw.ElapsedMilliseconds);

            return(isValidEDIDocument);
        }