Example #1
0
        private void form_SetInputColumn(object sender, SetInputColumnArgs args)
        {
            Debug.Assert(args.VirtualColumn != null, "Invalid arguments passed from the UI");

            this.ClearErrors();
            try
            {
                // Grab the used input collection.  This component can only have one...
                IDTSInput input = this.ComponentMetadata.InputCollection[0];

                // Get the virtual column from the args...
                IDTSVirtualInputColumn virtualInputColumn = args.VirtualColumn.Tag as IDTSVirtualInputColumn;
                if (virtualInputColumn == null)
                {
                    throw new ApplicationException(Properties.Resources.UIisInconsistentState);
                }
                // Get the lineageId, so we can use it to enable this column as an input column...
                int lineageId = virtualInputColumn.LineageID;

                IDTSInputColumn inputColumn = this.DesigntimeComponent.SetUsageType(input.ID, this.VirtualInput, lineageId, DTSUsageType.UT_READONLY);

                // return the new column back to the GUI to stick into a Tag...
                args.GeneratedColumns.InputColumn = new DataFlowElement(inputColumn.Name, inputColumn);
            }
            catch (Exception ex)
            {
                this.ReportErrors(ex);
                args.CancelAction = true;
            }
        }
        public DerivedColumn AddDerivedColumn(DerivedColumnItem derivedColumnItem)
        {
            if (!derivedColumnItem.IsReplacingColumn)
            {
                Pipe.IDTSOutputColumn100 col = SSISDefaultOutput.OutputColumnCollection.New();
                col.Name = derivedColumnItem.Name;
                col.SetDataTypeProperties((Wrapper.DataType)derivedColumnItem.DataType, derivedColumnItem.Length, derivedColumnItem.Precision, derivedColumnItem.Scale, derivedColumnItem.CodePage);
                col.ExternalMetadataColumnID = 0;
                col.ErrorRowDisposition      = Pipe.DTSRowDisposition.RD_FailComponent;
                col.TruncationRowDisposition = Pipe.DTSRowDisposition.RD_FailComponent;
                Pipe.IDTSCustomProperty100 propEx = col.CustomPropertyCollection.New();
                propEx.Name  = "Expression";
                propEx.Value = derivedColumnItem.Expression;
                Pipe.IDTSCustomProperty100 propFex = col.CustomPropertyCollection.New();
                propFex.Name  = "FriendlyExpression";
                propFex.Value = derivedColumnItem.Expression;
            }
            else
            {
                Pipe.IDTSInputColumn100 col = base.FindSSISInputColumn(derivedColumnItem.ReplaceColumnName);
                col.ExternalMetadataColumnID = 0;
                col.ErrorRowDisposition      = Pipe.DTSRowDisposition.RD_FailComponent;
                col.TruncationRowDisposition = Pipe.DTSRowDisposition.RD_FailComponent;
                Pipe.IDTSCustomProperty100 propEx = col.CustomPropertyCollection["Expression"];
                propEx.Value = derivedColumnItem.Expression;
                Pipe.IDTSCustomProperty100 propFex = col.CustomPropertyCollection["FriendlyExpression"];
                propFex.Value = derivedColumnItem.Expression;
            }

            return(this);
        }
        /// <summary>
        /// Creates a new Input Column
        /// </summary>
        /// <param name="inputID"></param>
        /// <param name="virtualInput"></param>
        /// <param name="lineageID"></param>
        /// <param name="usageType"></param>
        /// <returns></returns>
        public override IDTSInputColumn SetUsageType(int inputID, IDTSVirtualInput virtualInput, int lineageID, DTSUsageType usageType)
        {
            DTSUsageType uType = usageType == DTSUsageType.UT_READWRITE ? DTSUsageType.UT_READONLY : usageType;

            IDTSInputColumn col = base.SetUsageType(inputID, virtualInput, lineageID, uType);

            return(col);
        }
Example #4
0
        public void SelectLookupInputColumn(System.Windows.Forms.CheckedListBox clbInputColumns, System.Windows.Forms.ListBox lbSelectedItems, int checkedIndex, System.Windows.Forms.CheckState state, int nullColumnLineageId)
        {
            FormInputColumn icol = clbInputColumns.Items[checkedIndex] as FormInputColumn;

            IDTSInput input = ComponentMetadata.InputCollection[0];

            if (icol != null)
            {
                if (state == CheckState.Checked)
                {
                    DesignTimeComponent.SetUsageType(input.ID, VirtualInput, icol.LineageID, DTSUsageType.UT_READONLY);

                    IDTSInputColumn inputCol = input.InputColumnCollection.GetInputColumnByLineageID(icol.LineageID);

                    IDTSCustomProperty keyCol = inputCol.CustomPropertyCollection[Resources.LookupErrorAggIsKeyColumnName];
                    keyCol.Value = true;

                    icol.DTSInputColumn = inputCol;


                    if (lbSelectedItems != null && !lbSelectedItems.Items.Contains(icol))
                    {
                        int sortOrder = 0;
                        if (lbSelectedItems.Items.Count > 0)
                        {
                            FormInputColumn lastCol = lbSelectedItems.Items[lbSelectedItems.Items.Count - 1] as FormInputColumn;
                            sortOrder = lastCol.SortOrder;
                        }
                        icol.SortOrder = sortOrder + 1;

                        lbSelectedItems.Items.Add(icol);
                    }
                }
                else
                {
                    bool isInput = false;
                    if (icol.DTSInputColumn != null)
                    {
                        IDTSCustomProperty prop = icol.DTSInputColumn.CustomPropertyCollection[Resources.LookupErrorAggIsNullColumnName];
                        isInput = (bool)prop.Value;
                        IDTSCustomProperty keyCol = icol.DTSInputColumn.CustomPropertyCollection[Resources.LookupErrorAggIsKeyColumnName];
                        keyCol.Value = false;
                    }

                    if (!isInput)
                    {
                        DesignTimeComponent.SetUsageType(input.ID, VirtualInput, icol.LineageID, DTSUsageType.UT_IGNORED);
                        icol.DTSInputColumn = null;
                    }

                    if (lbSelectedItems != null && lbSelectedItems.Items.Contains(icol))
                    {
                        lbSelectedItems.Items.Remove(icol);
                    }
                }
            }
        }
Example #5
0
        /// <summary>
        /// Selexts an InputColumn (to become available in the input buffer)
        /// </summary>
        /// <param name="lineageID">LineageID of the InputColumn</param>
        /// <param name="isSelected">Selection Status of the Column</param>
        public IDTSInputColumn SelectInputColumn(int lineageID, bool selected)
        {
            IDTSInputColumn icol = null;

            if (Input != null)
            {
                DTSUsageType usageType = selected ? DTSUsageType.UT_READONLY : DTSUsageType.UT_IGNORED;

                icol = DesignTimeComponent.SetUsageType(Input.ID, VirtualInput, lineageID, usageType);
            }
            return(icol);
        }
Example #6
0
        /// <summary>
        /// Gets InputColumns of Input at selected inde of InputCollection encapsulated in the FormInputColumn class
        /// </summary>
        /// <param name="index">Index of the Input to get InputColumns</param>
        /// <returns>List of FormInputColumn</returns>
        public virtual List <FormInputColumn> GetFormInputColumns(int index)
        {
            List <FormInputColumn> inputCols = new List <FormInputColumn>();

            IDTSInput        input  = GetInput(index);
            IDTSVirtualInput vInput = GetVirtualInput(index);


            if (input != null && VirtualInput != null)
            {
                for (int i = 0; i < VirtualInput.VirtualInputColumnCollection.Count; i++)
                //foreach (IDTSVirtualInputColumn vcol in VirtualInput.VirtualInputColumnCollection)
                {
                    IDTSVirtualInputColumn vcol = VirtualInput.VirtualInputColumnCollection[i];

                    FormInputColumn icol = new FormInputColumn(vcol, i);

                    if (vcol.UsageType != DTSUsageType.UT_IGNORED)
                    {
                        IDTSInputColumn inputCol = input.InputColumnCollection.GetInputColumnByLineageID(vcol.LineageID);
                        icol.DTSInputColumn = inputCol;
                    }

                    bool isValidForInput = CheckColumnForInputValidity(vInput, input, icol);

                    if (isValidForInput)
                    {
                        inputCols.Add(icol);
                    }
                }

                inputCols.Sort((a, b) => a.Name.CompareTo(b.Name));


                for (int i = 0; i < inputCols.Count; i++)
                {
                    if (i >= 0 && i < inputCols.Count - 1 && inputCols[i].Name == inputCols[i + 1].Name)
                    {
                        inputCols[i].DisplayName = string.Format("{0}.{1}", inputCols[i].SourceComponent, inputCols[i].Name);
                    }
                    else if (i > 0 && i < inputCols.Count && inputCols[i].Name == inputCols[i - 1].Name)
                    {
                        inputCols[i].DisplayName = string.Format("{0}.{1}", inputCols[i].SourceComponent, inputCols[i].Name);
                    }
                }

                inputCols.Sort((a, b) => a.Index.CompareTo(b.Index));
            }

            return(inputCols);
        }
Example #7
0
        private static string GetColumName(Dictionary <string, int> names, IDTSInputColumn column)
        {
            int value;

            if (names.TryGetValue(column.Name, out value))
            {
                if (value > 1)
                {
                    return(string.Format("{0}_{1}", column.UpstreamComponentName, column.Name));
                }
            }

            return(string.Format("{0}", column.Name));
        }
Example #8
0
        public Union InsertOutputColumn(OutputColumn outputColumn, List <UnionInputColumn> unionInputColumns)
        {
            Pipe.IDTSOutputColumn100 newSSISOutputColumn = Component.OutputCollection[0].OutputColumnCollection.New();
            newSSISOutputColumn.Name = outputColumn.Name;
            newSSISOutputColumn.SetDataTypeProperties((SSIS.Wrapper.DataType)outputColumn.DataType, outputColumn.Length, outputColumn.Precision, outputColumn.Scale, outputColumn.CodePage);
            foreach (UnionInputColumn unionInputColumn in unionInputColumns)
            {
                base.AddReadOnlyInputColumnForInput(unionInputColumn.ColumnName, unionInputColumn.InputName);
                Pipe.IDTSInputColumn100 inputColumn = base.FindSSISInputColumn(unionInputColumn.ColumnName, unionInputColumn.InputName);
                inputColumn.CustomPropertyCollection[0].Value = newSSISOutputColumn.LineageID;
            }

            return(this);
        }
Example #9
0
        public Lookup AddLookupColumn(LookupColumn lookupItem)
        {
            Refresh();
            if (!lookupItem.IsReplacingOutput)
            {
                Pipe.IDTSOutputColumn100 newColumn = ComponentWrapper.InsertOutputColumnAt(SSISDefaultOutput.ID, 0, lookupItem.OutputAlias, "");
                ComponentWrapper.SetOutputColumnProperty(SSISDefaultOutput.ID, newColumn.ID, "CopyFromReferenceColumn", lookupItem.Name);
            }
            else
            {
                Pipe.IDTSVirtualInputColumn100 virtualColumn = base.FindVirtualInputColumn(lookupItem.ReplaceColumnName);
                Pipe.IDTSInputColumn100        inputColumn   = ComponentWrapper.SetUsageType(SSISDefaultInput.ID, base.DefaultVirtualInput, virtualColumn.LineageID, Pipe.DTSUsageType.UT_READWRITE);
                ComponentWrapper.SetInputColumnProperty(SSISDefaultInput.ID, inputColumn.ID, "CopyFromReferenceColumn", lookupItem.Name);
            }

            return(this);
        }
Example #10
0
        /// <summary>
        /// Selects an InputColumn (to become available in the input buffer)
        /// </summary>
        /// <param name="clbInputColumns">CheckedListbox with InputColumns</param>
        /// <param name="lbSelectedItems">ListBox with Selected InputColumns</param>
        /// <param name="checkedIndex">Index of the Item being checked</param>
        /// <param name="state">CheckState of the item being checkd</param>
        public virtual void SelectInputColumn(CheckedListBox clbInputColumns, ListBox lbSelectedItems, int checkedIndex, CheckState state)
        {
            FormInputColumn icol = clbInputColumns.Items[checkedIndex] as FormInputColumn;

            IDTSInput input = ComponentMetadata.InputCollection[0];

            if (icol != null)
            {
                if (state == CheckState.Checked)
                {
                    DesignTimeComponent.SetUsageType(input.ID, VirtualInput, icol.LineageID, DTSUsageType.UT_READONLY);

                    IDTSInputColumn inputCol = input.InputColumnCollection.GetInputColumnByLineageID(icol.LineageID);

                    icol.DTSInputColumn = inputCol;


                    if (lbSelectedItems != null && !lbSelectedItems.Items.Contains(icol))
                    {
                        int sortOrder = 0;
                        if (lbSelectedItems.Items.Count > 0)
                        {
                            FormInputColumn lastCol = lbSelectedItems.Items[lbSelectedItems.Items.Count - 1] as FormInputColumn;
                            sortOrder = lastCol.SortOrder;
                        }
                        icol.SortOrder = sortOrder + 1;

                        lbSelectedItems.Items.Add(icol);
                    }
                }
                else
                {
                    DesignTimeComponent.SetUsageType(input.ID, VirtualInput, icol.LineageID, DTSUsageType.UT_IGNORED);
                    icol.DTSInputColumn = null;

                    if (lbSelectedItems != null && lbSelectedItems.Items.Contains(icol))
                    {
                        lbSelectedItems.Items.Remove(icol);
                    }
                }
            }
        }
        ///// <summary>
        ///// Get Maximum Input Sort Order
        ///// </summary>
        ///// <returns>Maximu Sort Order of Input Columns</returns>
        //public static int GetMaxInputColumnsSortOrder(IDTSInput input)
        //{
        //    int maxOrder = 0;

        //    foreach (IDTSInputColumn col in input.InputColumnCollection)
        //    {
        //        foreach (IDTSCustomProperty prop in col.CustomPropertyCollection)
        //        {
        //            if (prop.Name == Resources.InputSortOrderPropertyName)
        //            {
        //                int order = prop.Value != null ? (int)prop.Value : 0;
        //                if (order > maxOrder)
        //                    maxOrder = order;
        //                break;
        //            }
        //        }
        //    }
        //    return maxOrder;
        //}
        public static void UpdateSortOrder(IDTSInput input, int inputColumnID, int val)
        {
            IDTSInputColumn    currentColumn = input.InputColumnCollection.GetObjectByID(inputColumnID);
            IDTSCustomProperty currentProp   = currentColumn.CustomPropertyCollection[Resources.InputSortOrderPropertyName];
            int currentValue = (int)currentProp.Value;

            foreach (IDTSInputColumn col in input.InputColumnCollection)
            {
                if (col.ID == inputColumnID)
                {
                    continue;
                }

                IDTSCustomProperty prop = col.CustomPropertyCollection[Resources.InputSortOrderPropertyName];
                if (prop != null && (int)prop.Value == val)
                {
                    prop.Value = currentValue;
                    //UpdateSortOrder(inputID, col.ID, val + 1);
                }
            }
        }
        /// <summary>
        /// PreExecute Phase for initialization of internal runtime structures
        /// </summary>
        public override void PreExecute()
        {
            bool fireAgain = true;

            rowsProcessed = 0;
            ComponentMetaData.FireInformation(0, this.ComponentMetaData.Name, "Pre-Execute phase is beginning.", string.Empty, 0, ref fireAgain);

            IDTSInput input = ComponentMetaData.InputCollection[0];

            inputBufferColumns = new List <InputBufferColumnInfo>(input.InputColumnCollection.Count);

            for (int i = 0; i < input.InputColumnCollection.Count; i++)
            {
                IDTSInputColumn column = input.InputColumnCollection[i];

                inputBufferColumns.Add(new InputBufferColumnInfo(BufferManager.FindColumnByLineageID(input.Buffer, column.LineageID),
                                                                 column.Name, column.ID, column.LineageID, 0, column.DataType, column.Length, column.Precision, column.Scale));
            }

            outputColumns = new List <XmlColumn>();
            IDTSOutput output = ComponentMetaData.OutputCollection[0];

            foreach (IDTSOutputColumn col in output.OutputColumnCollection)
            {
                SaveOptions saveOptions       = SaveOptions.None;
                bool        serializeDataType = false;
                bool        serializeLineage  = false;
                string      sourceID          = string.Empty;
                string      sourceName        = string.Empty;
                List <int>  cols = null;

                foreach (IDTSCustomProperty prop in col.CustomPropertyCollection)
                {
                    if (prop.Name == Resources.XmlSaveOptionPropertyName)
                    {
                        saveOptions = (SaveOptions)prop.Value;
                    }
                    else if (prop.Name == Resources.XmlSerializeDataTypeName)
                    {
                        serializeDataType = (bool)prop.Value;
                    }
                    else if (prop.Name == Resources.XmlSerializeLineageName)
                    {
                        serializeLineage = (bool)prop.Value;
                    }
                    else if (prop.Name == Resources.XmlInputColumnsPropertyname)
                    {
                        string colsStr     = prop.Value.ToString();
                        var    colLineages = InputColumns.ParseInputLineages(colsStr);

                        cols = new List <int>(colLineages.Count);

                        foreach (int lineageID in colLineages)
                        {
                            int idx = inputBufferColumns.FindIndex(ibci => ibci.LineageID == lineageID);
                            cols.Add(idx);
                        }
                    }
                    else if (prop.Name == Resources.XmlSourceIdPropertyName)
                    {
                        sourceName = prop.Value.ToString();
                    }
                    else if (prop.Name == Resources.XmlSourceNamePropertyName)
                    {
                        sourceID = prop.Value.ToString();
                    }
                }

                int index = BufferManager.FindColumnByLineageID(input.Buffer, col.LineageID);
                outputColumns.Add(new XmlColumn(index, col.Name, col.DataType, saveOptions, serializeLineage, serializeDataType, cols, sourceID, sourceName, col.Length));
            }
        }
Example #13
0
 private void MapInputColumn(Pipe.IDTSVirtualInputColumn100 virtualColumn, string destinationColumnName)
 {
     Pipe.IDTSInputColumn100 inputColumn = ComponentWrapper.SetUsageType(SSISDefaultInput.ID, DefaultVirtualInput, virtualColumn.LineageID, Pipe.DTSUsageType.UT_READONLY);
     ComponentWrapper.MapInputColumn(SSISDefaultInput.ID, inputColumn.ID, SSISDefaultInput.ExternalMetadataColumnCollection[destinationColumnName].ID);
 }
        private void UpdateComponentData()
        {
            //Set History Looup Properties
            UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.NoMatchBehavior)].Value  = _historyLookupProperties.NoMatchBehavior;
            UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.CacheType)].Value        = _historyLookupProperties.CacheType;
            UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.NoMatchCacheSize)].Value = _historyLookupProperties.NoMatchCacheSize;
            UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.DefaultCacheSize)].Value = _historyLookupProperties.DefaultCacheSize;
            UIHelper.ComponentMetadata.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.KeyHashAlgorithm)].Value = _historyLookupProperties.KeyHashAlgorithm;

            switch (_historyLookupProperties.NoMatchBehavior)
            {
            case HistoryLookupTransformation.NoMatchBehavior.FailComponent:
                UIHelper.Input.ErrorRowDisposition          = DTSRowDisposition.RD_FailComponent;
                UIHelper.Input.TruncationRowDisposition     = DTSRowDisposition.RD_FailComponent;
                UIHelper.Input2.ErrorRowDisposition         = DTSRowDisposition.RD_FailComponent;
                UIHelper.Input2.TruncationRowDisposition    = DTSRowDisposition.RD_FailComponent;
                UIHelper.ComponentMetadata.UsesDispositions = false;
                break;

            case HistoryLookupTransformation.NoMatchBehavior.RedirectToErrorOutput:
                UIHelper.Input.ErrorRowDisposition          = DTSRowDisposition.RD_RedirectRow;
                UIHelper.Input.TruncationRowDisposition     = DTSRowDisposition.RD_RedirectRow;
                UIHelper.Input2.ErrorRowDisposition         = DTSRowDisposition.RD_RedirectRow;
                UIHelper.Input2.TruncationRowDisposition    = DTSRowDisposition.RD_RedirectRow;
                UIHelper.ComponentMetadata.UsesDispositions = true;
                break;

            case HistoryLookupTransformation.NoMatchBehavior.RedirectToNoMatchOutput:
                UIHelper.Input.ErrorRowDisposition          = DTSRowDisposition.RD_NotUsed;
                UIHelper.Input.TruncationRowDisposition     = DTSRowDisposition.RD_NotUsed;
                UIHelper.Input2.ErrorRowDisposition         = DTSRowDisposition.RD_NotUsed;
                UIHelper.Input2.TruncationRowDisposition    = DTSRowDisposition.RD_NotUsed;
                UIHelper.ComponentMetadata.UsesDispositions = false;
                break;

            case HistoryLookupTransformation.NoMatchBehavior.IgnoreError:
                UIHelper.Input.ErrorRowDisposition          = DTSRowDisposition.RD_IgnoreFailure;
                UIHelper.Input.TruncationRowDisposition     = DTSRowDisposition.RD_IgnoreFailure;
                UIHelper.Input2.ErrorRowDisposition         = DTSRowDisposition.RD_IgnoreFailure;
                UIHelper.Input2.TruncationRowDisposition    = DTSRowDisposition.RD_IgnoreFailure;
                UIHelper.ComponentMetadata.UsesDispositions = false;
                break;

            default:
                break;
            }

            //Lists to hold information about processed ooutput columns
            List <OutputColumnDetail> outputCols          = new List <OutputColumnDetail>();
            List <OutputColumnDetail> processedOutputCols = new List <OutputColumnDetail>();
            List <int> oColsToRemove = new List <int>();

            if (UIHelper.Output != null)
            {
                //Get Output Columns Detailsfrom Output Columns ListView
                foreach (ListViewItem lvi in lvOutputColumns.Items)
                {
                    if (lvi.Checked)
                    {
                        outputCols.Add(new OutputColumnDetail((IDTSVirtualInputColumn)lvi.Tag, lvi.SubItems[1].Text, lvi.SubItems[1].Tag != null ? (int)lvi.SubItems[1].Tag : -1));
                    }
                }

                //Iterate through existing OutputColumns and try to update them
                foreach (IDTSOutputColumn oCol in UIHelper.Output.OutputColumnCollection)
                {
                    OutputColumnDetail od = outputCols.Find(ocd => ocd.ID == oCol.ID);
                    if (od != null)
                    {
                        outputCols.Remove(od);
                        processedOutputCols.Add(od);

                        oCol.Name = od.AliasName;
                        oCol.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.SourceLineageID)].Value = od.VirtualInputColumn.LineageID;
                        HistoryLookupTransformation.SetOutputColumnDataType(oCol, od.VirtualInputColumn);
                        od.OutputLineageID = oCol.LineageID;
                    }
                    else
                    {
                        oColsToRemove.Add(oCol.ID);
                    }
                }

                //Remove Not Existing Output Columns
                foreach (int id in oColsToRemove)
                {
                    UIHelper.Output.OutputColumnCollection.RemoveObjectByID(id);
                }

                //Add new OutputColumns
                foreach (OutputColumnDetail od in outputCols)
                {
                    processedOutputCols.Add(od);
                    IDTSOutputColumn oCol = UIHelper.Output.OutputColumnCollection.New();
                    oCol.Name = od.AliasName;
                    HistoryLookupTransformation.SetOutputColumnProperties(oCol);
                    HistoryLookupTransformation.SetOutputColumnDataType(oCol, od.VirtualInputColumn);
                    oCol.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.SourceLineageID)].Value = od.VirtualInputColumn.LineageID;
                    od.OutputLineageID = oCol.LineageID;
                }
            }


            List <ColumnMappingDetail> mappings = new List <ColumnMappingDetail>(lvMappings.Items.Count);

            //Process DataInput
            if (UIHelper.VirtualInput != null)
            {
                //Iterete through mappings and store them in List for easy searching
                foreach (ListViewItem lvi in lvMappings.Items)
                {
                    mappings.Add(new ColumnMappingDetail(((ConvertMetadataInputColumn)lvi.Tag).LineageID, ((ConvertMetadataInputColumn)lvi.SubItems[1].Tag).LineageID));
                }

                //Iterate tghrough virtual input
                foreach (IDTSVirtualInputColumn vCol in UIHelper.VirtualInput.VirtualInputColumnCollection)
                {
                    int lookupLineageID = 0;

                    HistoryLookupTransformation.InputColumnUsageType usageType = HistoryLookupTransformation.InputColumnUsageType.None;

                    //if column LineageID equalsto DataDateColumnLineageID in HistoryLookuProperties, then it was selected as Date Column
                    if (vCol.LineageID == _historyLookupProperties.DataDateColumnLineageID)
                    {
                        usageType |= HistoryLookupTransformation.InputColumnUsageType.DateColumn;
                    }

                    //Try to lookup defined mapping
                    ColumnMappingDetail cmd = mappings.Find(cm => cm.DataColumnLineageID == vCol.LineageID);

                    //If mapping was found then it is lookup column
                    if (cmd != null)
                    {
                        usageType      |= HistoryLookupTransformation.InputColumnUsageType.LookupColumn;
                        lookupLineageID = cmd.LookupColumnLineageID;
                    }

                    //If usageType is None then ignore column
                    if (usageType == HistoryLookupTransformation.InputColumnUsageType.None)
                    {
                        UIHelper.DesignTimeComponent.SetUsageType(UIHelper.Input.ID, UIHelper.VirtualInput, vCol.LineageID, DTSUsageType.UT_IGNORED);
                    }
                    else
                    {
                        IDTSInput       inp  = UIHelper.ComponentMetadata.InputCollection[0];
                        IDTSInputColumn iCol = UIHelper.DesignTimeComponent.SetUsageType(UIHelper.Input.ID, UIHelper.VirtualInput, vCol.LineageID, DTSUsageType.UT_READONLY);

                        HistoryLookupTransformation.SetDataInputColumnProperties(iCol);

                        iCol.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.InputColumnUsageType)].Value = usageType;
                        iCol.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.LookupKeyLineageID)].Value   = lookupLineageID;
                    }
                }
            }

            //Process HistoryLookupInput
            if (UIHelper.VirtualInput2 != null)
            {
                foreach (IDTSVirtualInputColumn vCol in UIHelper.VirtualInput2.VirtualInputColumnCollection)
                {
                    int oColLineageID = 0;
                    HistoryLookupTransformation.DateComparison       dateComparison = HistoryLookupTransformation.DateComparison.None;
                    HistoryLookupTransformation.InputColumnUsageType usageType      = HistoryLookupTransformation.InputColumnUsageType.None;
                    ColumnMappingDetail mapping = mappings.Find(m => m.LookupColumnLineageID == vCol.LineageID);

                    if (mapping != null)
                    {
                        usageType |= HistoryLookupTransformation.InputColumnUsageType.LookupColumn;
                    }

                    //If it matches LooupDateFromLineageID then it is LookupFromDate
                    if (vCol.LineageID == _historyLookupProperties.LookupDateFromLineageID)
                    {
                        usageType     |= HistoryLookupTransformation.InputColumnUsageType.DateFromColumn;
                        dateComparison = (HistoryLookupTransformation.DateComparison)_historyLookupProperties.LookupDateFromComparison;
                    }

                    //If it matches LookupDateToLineageID then it is LookupToDate
                    if (vCol.LineageID == _historyLookupProperties.LookupDateToLineageID)
                    {
                        usageType     |= HistoryLookupTransformation.InputColumnUsageType.DateToColumn;
                        dateComparison = (HistoryLookupTransformation.DateComparison)_historyLookupProperties.LookupDateToComparison;
                    }

                    var ocol = processedOutputCols.Find(oc => oc.VirtualInputColumn.LineageID == vCol.LineageID);
                    if (ocol != null)
                    {
                        usageType    |= HistoryLookupTransformation.InputColumnUsageType.OutputColumn;
                        oColLineageID = ocol.OutputLineageID;
                    }

                    //Uf UsageType is None then Ignore the input column
                    if (usageType == HistoryLookupTransformation.InputColumnUsageType.None)
                    {
                        UIHelper.DesignTimeComponent.SetUsageType(UIHelper.Input2.ID, UIHelper.VirtualInput2, vCol.LineageID, DTSUsageType.UT_IGNORED);
                    }
                    else //Set the column as Input Column
                    {
                        IDTSInputColumn iCol = UIHelper.DesignTimeComponent.SetUsageType(UIHelper.Input2.ID, UIHelper.VirtualInput2, vCol.LineageID, DTSUsageType.UT_READONLY);

                        HistoryLookupTransformation.SetLookupInputColumnProperties(iCol);
                        iCol.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.InputColumnUsageType)].Value  = usageType;
                        iCol.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.OutputColumnLineageID)].Value = oColLineageID;
                        iCol.CustomPropertyCollection[HistoryLookupTransformation.GetPropertyname(HistoryLookupTransformation.CustomProperties.DateComparison)].Value        = dateComparison;
                    }
                }
            }
        }
        /// <summary>
        /// PreExecute Phase for initialization of internal runtime structures
        /// </summary>
        public override void PreExecute()
        {
            base.PreExecute();
            IDTSInput input = ComponentMetaData.InputCollection[0];

            for (int i = 0; i < input.InputColumnCollection.Count; i++)
            {
                IDTSInputColumn column = input.InputColumnCollection[i];
            }

            IDTSOutput output = ComponentMetaData.OutputCollection[0];

            rowNumberColumns = new List <RowNumberColumn>();

            //Iterate thorough OutputColumns collection and generate and prepare RowNumberColumns
            foreach (IDTSOutputColumn col in output.OutputColumnCollection)
            {
                if (col.CustomPropertyCollection.Count == 2)
                {
                    RowNumberColumn numCol = new RowNumberColumn();
                    numCol.Index    = BufferManager.FindColumnByLineageID(input.Buffer, col.LineageID);
                    numCol.DataType = col.DataType;


                    foreach (IDTSCustomProperty prop in col.CustomPropertyCollection)
                    {
                        switch (prop.Name)
                        {
                        case "IncrementBy":
                            if (col.DataType == DataType.DT_DATE || col.DataType == DataType.DT_DBDATE)
                            {
                                string pv = prop.Value.ToString();
                                char   ch = pv[pv.Length - 1];
                                switch (ch)
                                {
                                case 'd':
                                    numCol.IncrementType = IncrementByType.Day;
                                    break;

                                case 'w':
                                    numCol.IncrementType = IncrementByType.Week;
                                    break;

                                case 'm':
                                    numCol.IncrementType = IncrementByType.Month;
                                    break;

                                case 'y':
                                    numCol.IncrementType = IncrementByType.Year;
                                    break;
                                }
                                numCol.IncrementBy = int.Parse(pv.Substring(0, pv.Length - 1));
                            }
                            else
                            {
                                numCol.IncrementBy   = prop.Value;
                                numCol.IncrementType = IncrementByType.Value;
                            }
                            break;

                        case "InitialValue":
                            numCol.InitialValue = prop.Value;
                            break;

                        default:
                            break;
                        }
                    }
                    rowNumberColumns.Add(numCol);
                }
            }
        }