• Decrease Text SizeIncrease Text Size

Setup Custom Data Transfer DelimitedTextReader2 Source

Posted Date: 5/15/2023
    Printer Friendly Version   Email A Friend   Add This   Increase Text Size   Decrease Text Size
In this example, we will set up a custom Data transfer source(Reader)
This example SourceCustomParameters contains a path to the delimited file from MdStaff.


using System;
using System.Collections.Generic;
using System.IO;
using System.Web;


namespace Centralpoint.Master
{
    namespace Custom.CHS_DataTransfer
    {
        public class TransformMdStaff : DataTransfer.DelimitedTextReader2
        {
            protected bool isDuplicate = false;
            Dictionary<string, FacilityData> FacilitiesData = new Dictionary<string, FacilityData>();
            private Dictionary<string, int> Ordinals { get; set; }
            private List<string> DuplicateFacilityId = new List<string>();
            private List<string> DistinctFacilityId = new List<string>();

            public TransformMdStaff(DataTransfer dataTransfer)
                : base(dataTransfer)
            {
                this.FilePath = dataTransfer.Attributes.Get("SourceCustomParameters").Trim();
                this.ColumnDelimiter = new string[] { "|" };
                dataTransfer.Attributes.Set("SourceDelimTxtHeaderRow", "1");

            }

            public override bool IsValid()
            {
                return true;
            }

            public override void Open()
            {
                base.Open();
                if (File.Exists(this.FilePath))
                {
                    StreamReader reader = new StreamReader(this.FilePath);
                    string line = "";
                    string[] values = null;
                    int iCount = 0;
                    this.Ordinals = new Dictionary<string, int>();
                    while (!reader.EndOfStream)
                    {
                        line = reader.ReadLine();
                        values = line.Split(this.ColumnDelimiter, StringSplitOptions.None);
                        if (iCount == 0)//populate columns
                        {
                            for (int i = 0; i < values.Length; i++)
                                Ordinals.Add(values[i], i);

                        }
                        else
                        {
                            string uid = values[GetOrdinal("Uid")];
                            string facility = values[GetOrdinal("Facility")];
                            string facilityName = values[GetOrdinal("Facility Name")];
                            if (facilityName.Contains(",")) facilityName = facilityName.Replace(",", "-");
                            string facilityID = values[GetOrdinal("FacilityID")];

                            if (FacilitiesData.ContainsKey(uid))
                            {
                                DuplicateFacilityId.Add(uid);
                                FacilitiesData[uid] = new FacilityData(FacilitiesData[uid].FacilityId + ", " + facilityID, FacilitiesData[uid].FacilityName + ", " + facilityName, FacilitiesData[uid].Facility + ", " + facility);
                            }
                            else
                                FacilitiesData.Add(uid, new FacilityData(facilityID, facilityName, facility));
                        }
                        iCount++;
                    }
                }
                else
                {
                }
            }

            public override bool Read()
            {
                bool hasRows = base.Read();
                string uId = this.CurrentRow[GetOrdinal("Uid")];

                bool exists = DuplicateFacilityId.Contains(uId);
                if (exists)
                {
                    this.CurrentRow[GetOrdinal("Facility")] = FacilitiesData[uId].Facility;
                    this.CurrentRow[GetOrdinal("Facility Name")] = FacilitiesData[uId].FacilityName;
                    this.CurrentRow[GetOrdinal("FacilityID")] = FacilitiesData[uId].FacilityId;
                }

                isDuplicate = DistinctFacilityId.Contains(uId);
                while (hasRows && isDuplicate)
                {
                    hasRows = base.Read();
                    string uId2 = this.CurrentRow[GetOrdinal("Uid")];
                    isDuplicate = DistinctFacilityId.Contains(uId2);
                    if (!DistinctFacilityId.Contains(uId2)) DistinctFacilityId.Add(uId2);
                }
                if (!DistinctFacilityId.Contains(uId)) DistinctFacilityId.Add(uId);
                return hasRows;
            }

            public override void Close()
            {
                string destDirectory = Path.GetDirectoryName(this.FilePath);
                string sorceDelimTxtFile = HttpContext.Current.Server.MapPath(this.DataTransfer.Attributes.Get("DestDelimTxtFile").Trim());
                sorceDelimTxtFile = sorceDelimTxtFile.Replace("Master", @"WebSites\cpweb_" + this.DataTransfer.WebSite.SystemName);
                string destFile = Path.Combine(destDirectory, Path.GetFileName(sorceDelimTxtFile));

                try
                {
                    File.Copy(sorceDelimTxtFile, destFile, true);
                    this.DataTransfer.Status = "Destination File was moved to " + destFile;
                }
                finally
                {
                    this.StreamReader.Close();
                    base.Close();
                }
            }

            struct FacilityData
            {
                public string FacilityId;
                public string FacilityName;
                public string Facility;

                public FacilityData(string facilityId, string facilityName, string facility)
                {
                    this.FacilityId = facilityId;
                    this.FacilityName = facilityName;
                    this.Facility = facility;
                }
            }

            protected int GetOrdinal(string systemName)
            {
                if (this.Ordinals.ContainsKey(systemName)) return this.Ordinals[systemName];
                return 0;
            }
        }
    }
}




Keywords: Data Transfer, Data Transfer Source, TextReader



Related Taxonomy
  - How Do I?

Comments:

Be the first to leave a comment.
Please Login to post comments.