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 Code Samples Records