示例#1
0
 /// <summary>
 ///  Initializes a new instance of the <see cref="EdifactGroup{T}"/> class.
 /// </summary>
 /// <param name="header">The group header.</param>
 public EdifactGroup(S_UNG header)
     : base(header, (ung, i) => new S_UNE
 {
     D_0060_1 = i.ToString(),
     D_0048_2 = ung.D_0048_5
 }, Separators.DefaultEdifact())
 {
 }
示例#2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EdifactInterchange"/> class.
 /// </summary>
 /// <param name="header">The interchange header.</param>
 public EdifactInterchange(S_UNB header)
     : base(header, (unb, i) => new S_UNZ
 {
     D_0036_1 = i.ToString(),
     D_0020_2 = unb.D_0020_5
 }, Separators.DefaultEdifact())
 {
     if (header == null)
     {
         throw new Exception("UNB header is null.");
     }
 }
示例#3
0
        internal override bool TryReadControl(string segmentName, out string probed, out Separators separators)
        {
            probed     = "";
            separators = null;

            try
            {
                if (segmentName == "UNB")
                {
                    probed = segmentName + StreamReader.Read(6);
                    if (IsUnb(probed, Separators.DefaultEdifact().DataElement,
                              Separators.DefaultEdifact().ComponentDataElement))
                    {
                        separators = Separators.DefaultEdifact();
                        return(true);
                    }
                }

                if (segmentName == "UNA")
                {
                    var una = StreamReader.Read(6);
                    probed = segmentName + una;
                    var  unaChars             = una.ToArray();
                    var  componentDataElement = unaChars[0];
                    var  dataElement          = unaChars[1];
                    char?escape = unaChars[3];
                    var  repetitionDataElement = Separators.DefaultEdifact().RepetitionDataElement;
                    var  segment = unaChars[5];

                    var tmp = StreamReader.Read(9, Trims);
                    probed += tmp;
                    if (IsUnb(tmp, dataElement, componentDataElement))
                    {
                        separators = new Separators(segment, componentDataElement, dataElement,
                                                    repetitionDataElement, escape);
                        probed = tmp;
                        return(true);
                    }
                }
            }
            catch
            {
                // ignored
            }

            return(false);
        }
示例#4
0
        public void TestGenerateWithNonDefaultSeparators()
        {
            // ARRANGE
            const string sample            = "EdiFabric.Tests.Edi.Edifact_INVOIC_D00A.txt";
            const string expectedResult    = "EdiFabric.Tests.Edi.Edifact_INVOIC_D00A_NonDefaultSeparators.txt";
            var          interchange       = TestHelper.GenerateEdifact <M_INVOIC>(sample);
            var          defaultSeparators = Separators.DefaultEdifact();
            var          newSeparators     = new Separators(defaultSeparators.Segment,
                                                            defaultSeparators.ComponentDataElement, '|', defaultSeparators.RepetitionDataElement,
                                                            defaultSeparators.Escape);

            // ACT
            var ediSegments = interchange.GenerateEdi(newSeparators);

            // ASSERT
            Assert.AreEqual(TestHelper.AsString(expectedResult), TestHelper.AsString(ediSegments, Environment.NewLine));
        }
示例#5
0
        /// <summary>
        /// Generates a collection of EDI segments from the header, the items and the trailer.
        /// Automatically generates an UNA segment if the separators are not the default.
        /// </summary>
        /// <param name="separators">The EDI separators.</param>
        /// <returns>The collection of EDI segments.</returns>
        public override IEnumerable <string> GenerateEdi(Separators separators = null)
        {
            var result            = new List <string>();
            var currentSeparators = separators ?? Separators.DefaultEdifact();

            if (separators != null)
            {
                result.Add(separators.ToUna());
            }

            result.AddRange(ToEdi(Header, currentSeparators));
            foreach (var item in Items)
            {
                result.AddRange(item.GenerateEdi(currentSeparators));
            }
            result.AddRange(ToEdi(Trailer, currentSeparators));

            return(result);
        }