public override IDTSInputColumn100 SetUsageType(int inputID, IDTSVirtualInput100 virtualInput, int lineageID, DTSUsageType usageType) { IDTSInputColumn100 inputColumn = null; IDTSOutput100 output = this.ComponentMetaData.OutputCollection[0]; IDTSOutputColumnCollection100 outputColumnCollection = output.OutputColumnCollection; IDTSInput100 input = this.ComponentMetaData.InputCollection[0]; IDTSInputColumnCollection100 inputColumnCollection = input.InputColumnCollection; if (usageType == DTSUsageType.UT_IGNORED) { inputColumn = inputColumnCollection.GetInputColumnByLineageID(lineageID); IDTSOutputColumn100 outputColumn = outputColumnCollection.FindObjectByID(inputColumn.MappedColumnID); if (outputColumn != null) { outputColumnCollection.RemoveObjectByID(outputColumn.ID); } inputColumn = base.SetUsageType(inputID, virtualInput, lineageID, usageType); } else { inputColumn = base.SetUsageType(inputID, virtualInput, lineageID, usageType); IDTSOutputColumn100 outputColumn = outputColumnCollection.New(); outputColumn.Name = inputColumn.Name; outputColumn.SetDataTypeProperties(inputColumn.DataType, inputColumn.Length, inputColumn.Precision, inputColumn.Scale, inputColumn.CodePage); outputColumn.MappedColumnID = inputColumn.LineageID; inputColumn.MappedColumnID = outputColumn.LineageID; AddInputColumnProperty(inputColumn, GeoColumnPropName, "True if the column holds geometry objects to be joined together.", false); AddInputColumnProperty(inputColumn, GroupByColumnPropName, "True if the column holds group by values.", false); } return(inputColumn); }
public override void PreExecute() { // Get column names columnNames = new Dictionary <int, string>(); int count = 0; IDTSInput100 input = ComponentMetaData.InputCollection[0]; IDTSInputColumnCollection100 inputColumns = input.InputColumnCollection; foreach (IDTSInputColumn100 column in inputColumns) { columnNames[count] = column.Name; count++; } try { this.publisherChannel = rabbitConnection.CreateModel(); // Create Queue and Exchange, these operations should be idempotent this.publisherChannel.ExchangeDeclare(exchangeName, "direct", true); this.publisherChannel.QueueDeclare(exchangeName, true, false, false, null); this.publisherChannel.QueueBind(exchangeName, exchangeName, ""); } catch (Exception) { ReleaseConnections(); throw; } }
void choosecolumnspage_GetSelectedInputOutputColumns(object sender, SelectedInputOutputColumnsArgs args) { this.ClearErrors(); try { IDTSInput100 input = this.ComponentMetadata.InputCollection[0]; IDTSInputColumnCollection100 inputColumnCollection = input.InputColumnCollection; foreach (IDTSInputColumn100 inputColumn in inputColumnCollection) { SelectedInputOutputColumns element = new SelectedInputOutputColumns(); IDTSVirtualInputColumn100 virtualInputColumn = this.GetVirtualInputColumn(inputColumn); element.VirtualInputColumn = new DataFlowElement(virtualInputColumn.Name, virtualInputColumn); element.InputColumn = new DataFlowElement(inputColumn.Name, inputColumn); args.SelectedColumns.Add(element); } } catch (Exception ex) { this.ReportErrors(ex); } }
/// <summary> /// Helper function to load DataGridView, one row per input column. Column /// UsageType dictates column selection state. /// </summary> private void SetInputVirtualInputColumns() { _virtualInput = _input.GetVirtualInput(); IDTSVirtualInputColumnCollection100 virtualInputColumnCollection = _virtualInput.VirtualInputColumnCollection; IDTSInputColumnCollection100 inputColumns = _input.InputColumnCollection; int columnCount = virtualInputColumnCollection.Count; for (int i = 0; i < columnCount; i++) { IDTSVirtualInputColumn100 virtualColumn = virtualInputColumnCollection[i]; int rowIndex; if (virtualColumn.UsageType == DTSUsageType.UT_READONLY || virtualColumn.UsageType == DTSUsageType.UT_READWRITE) { rowIndex = this.dgColumns.Rows.Add(new object[] { CheckState.Checked, " " + virtualColumn.Name }); } else { rowIndex = this.dgColumns.Rows.Add(new object[] { CheckState.Unchecked, " " + virtualColumn.Name }); } this.dgColumns.Rows[rowIndex].Tag = i; DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)this.dgColumns.Rows[rowIndex].Cells[0]; cell.ThreeState = false; } }
public IDTSComponentMetaData100 AddComp_Sort(string ComponentName, IDTSOutput100 outCols, Dictionary <string, bool> sortColumns ) { // Create IDTSComponentMetaData100 Comp = dmp.ComponentMetaDataCollection.New(); Comp.ComponentClassID = "Microsoft.Sort"; // Instantiate CManagedComponentWrapper Inst = Comp.Instantiate(); Inst.ProvideComponentProperties(); Comp.Name = ComponentName; Comp.Description = "Dodany Sort"; // Connect IDTSPath100 pth = dmp.PathCollection.New(); pth.AttachPathAndPropagateNotifications(outCols, Comp.InputCollection[0]); // Parametrize IDTSInput100 lkpInput = Comp.InputCollection[0]; IDTSInputColumnCollection100 lkpInputCols = lkpInput.InputColumnCollection; IDTSVirtualInput100 lkpVirtInput = lkpInput.GetVirtualInput(); IDTSVirtualInputColumnCollection100 lkpVirtInputCols = lkpVirtInput.VirtualInputColumnCollection; // Parametrize #2 - Join Columns int i = 1; foreach (IDTSVirtualInputColumn100 vColumn in lkpVirtInputCols) { IDTSInputColumn100 inputColumn = Inst.SetUsageType(lkpInput.ID, lkpVirtInput, vColumn.LineageID, DTSUsageType.UT_READONLY); foreach (var colKVP in sortColumns) { if (vColumn.Name == colKVP.Key) { Inst.SetInputColumnProperty(lkpInput.ID, inputColumn.ID, "NewComparisonFlags", 0); Inst.SetInputColumnProperty(lkpInput.ID, inputColumn.ID, "NewSortKeyPosition", colKVP.Value ? i: -i); i++; } } } // Return return(Comp); }
public override void PreExecute() { //Debugger.Launch(); IDTSInput100 input = ComponentMetaData.InputCollection[0]; IDTSInputColumnCollection100 inputColumns = input.InputColumnCollection; IDTSCustomProperty100 custProp; foreach (IDTSInputColumn100 column in inputColumns) { custProp = column.CustomPropertyCollection["IsFileName"]; if ((bool)custProp.Value == true) { m_FileNameColumnIndex = (int)BufferManager.FindColumnByLineageID(input.Buffer, column.LineageID); } } }
private void createDataTable() { m_table = new DataTable(); m_table.Locale = CultureInfo.InvariantCulture; IDTSInput100 iDTSInput = ComponentMetaData.InputCollection[0]; IDTSExternalMetadataColumnCollection100 iDTSExtCols = iDTSInput.ExternalMetadataColumnCollection; IDTSInputColumnCollection100 iDTSInpCols = iDTSInput.InputColumnCollection; int cInpCols = iDTSInpCols.Count; m_tableCols = new DataColumn[cInpCols]; IDTSExternalMetadataColumn100[] mappedExtCols = new IDTSExternalMetadataColumn100[cInpCols]; m_bufferIdxs = new int[cInpCols]; for (int iCol = 0; iCol < cInpCols; iCol++) { IDTSInputColumn100 iDTSInpCol = iDTSInpCols[iCol]; int metaID = iDTSInpCol.MappedColumnID; DataType dataType = iDTSInpCol.DataType; Type type; bool isLong = false; dataType = ConvertBufferDataTypeToFitManaged(dataType, ref isLong); type = BufferTypeToDataRecordType(dataType); m_tableCols[iCol] = new DataColumn(iDTSInpCol.Name, type); int lineageID = iDTSInpCol.LineageID; try { m_bufferIdxs[iCol] = BufferManager.FindColumnByLineageID( iDTSInput.Buffer, lineageID); } catch (Exception) { bool bCancel; //ErrorSupport.FireErrorWithArgs(HResults.DTS_E_ADODESTNOLINEAGEID, // out bCancel, lineageID, iDTSInpCol.Name); //throw new PipelineComponentHResultException(HResults. // DTS_E_ADODESTNOLINEAGEID); } } m_table.Columns.AddRange(m_tableCols); }
public IDTSOutput100 ModifyComp_CondSplit_AddOut(IDTSComponentMetaData100 Comp, string OutName, int OutEvalOrder, string OutExpression, string OutDesc = "SampleDescription" ) { CManagedComponentWrapper Inst = Comp.Instantiate(); // We need to set a column's usage type before we can use it in an expression. // The code here will make all of the input columns available, but we could also // restrict it to just the columns that we need in the conditional split expression(s). IDTSInput100 splitInput = Comp.InputCollection[0]; IDTSVirtualInput100 splitVInput = splitInput.GetVirtualInput(); IDTSInputColumnCollection100 splitInputCols = splitInput.InputColumnCollection; IDTSVirtualInputColumnCollection100 splitVInputCols = splitVInput.VirtualInputColumnCollection; foreach (IDTSVirtualInputColumn100 vCol in splitVInputCols) { Inst.SetUsageType(splitInput.ID, splitVInput, vCol.LineageID, DTSUsageType.UT_READONLY); } // Parametrize IDTSOutput100 splitOutput = Inst.InsertOutput(DTSInsertPlacement.IP_BEFORE, Comp.OutputCollection[0].ID); splitOutput.Name = OutName; splitOutput.Description = OutDesc; splitOutput.IsErrorOut = false; // Note: You will get an exception if you try to set these properties on the Default Output. Inst.SetOutputProperty(splitOutput.ID, "EvaluationOrder", OutEvalOrder); Inst.SetOutputProperty(splitOutput.ID, "FriendlyExpression", OutExpression); Inst.AcquireConnections(null); Inst.ReinitializeMetaData(); Inst.ReleaseConnections(); return(splitOutput); }
private void BuildInputColumnMaps() { this.inputToOutputColumnMap.Clear(); this.inputColumnIndexMap.Clear(); IDTSInput100 input = this.ComponentMetaData.InputCollection[0]; IDTSInputColumnCollection100 inputColumnCollection = input.InputColumnCollection; foreach (IDTSInputColumn100 inputColumn in inputColumnCollection) { int inputColumnLineageID = inputColumn.LineageID; inputToOutputColumnMap.Add(inputColumn.LineageID, inputColumn.MappedColumnID); if ((bool)GetPropertyValue(inputColumn.CustomPropertyCollection, GeoColumnPropName)) { this.geoColumnLineageID = inputColumnLineageID; } inputColumnIndexMap.Add(inputColumnLineageID, this.BufferManager.FindColumnByLineageID(input.Buffer, inputColumnLineageID)); } }
public override void PreExecute() { this.inputColumns.Clear(); IDTSInput100 input = this.ComponentMetaData.InputCollection[0]; IDTSInputColumnCollection100 inputColumnCollection = input.InputColumnCollection; foreach (IDTSInputColumn100 inputColumn in inputColumnCollection) { int inputColumnLineageID = inputColumn.LineageID; string transString = (string)GetPropertyValue(inputColumn.CustomPropertyCollection, TransPropName); if (!string.IsNullOrEmpty(transString)) { LocalColumnInfo columnInfo = new LocalColumnInfo(); columnInfo.DataType = inputColumn.DataType; columnInfo.BufferIndex = this.BufferManager.FindColumnByLineageID(input.Buffer, inputColumnLineageID); columnInfo.BuildTransformations(transString); this.inputColumns.Add(columnInfo); } } }
private void AddConvertComponent(Hashtable colConvertTable, Hashtable colConnectTable) { convertComp = pipeline.ComponentMetaDataCollection.New(); convertComp.ComponentClassID = DATACONVERT_GUID; convertComp.Name = "Data Conversion"; convertComp.ValidateExternalMetadata = true; convertDesignTimeComp = convertComp.Instantiate(); convertDesignTimeComp.ProvideComponentProperties(); IDTSInput100 cvtInput = convertComp.InputCollection[0]; IDTSOutput100 cvtOutput = convertComp.OutputCollection[0]; IDTSInputColumnCollection100 cvtInputCols = cvtInput.InputColumnCollection; IDTSOutput100 srcOutput = srcComp.OutputCollection[0]; pipeline.PathCollection.New().AttachPathAndPropagateNotifications(srcOutput, cvtInput); IDTSVirtualInput100 cvtVirInput = cvtInput.GetVirtualInput(); int i = 0; foreach (object key in colConvertTable.Keys) { int srcColID = (int)key; cvtVirInput.SetUsageType(srcColID, DTSUsageType.UT_READONLY); IDTSInputColumn100 cvtInputCol = cvtInputCols.GetInputColumnByLineageID(srcColID); if (cvtInputCol != null) { IDTSOutputColumn100 cvtOutputCol = convertDesignTimeComp.InsertOutputColumnAt(cvtOutput.ID, i++, "Convert_" + cvtInputCol.Name, ""); IDTSExternalMetadataColumn100 destCol = (IDTSExternalMetadataColumn100)colConvertTable[key]; convertDesignTimeComp.SetOutputColumnDataTypeProperties(cvtOutput.ID, cvtOutputCol.ID, destCol.DataType, destCol.Length, destCol.Precision, destCol.Scale, destCol.CodePage); // map output column and input column convertDesignTimeComp.SetOutputColumnProperty(cvtOutput.ID, cvtOutputCol.ID, "SourceInputColumnLineageID", srcColID); // add match table entry. colConnectTable.Add(cvtOutputCol.ID, destCol); } } }
// todo: // CacheMode // https://blogs.msdn.microsoft.com/mattm/2009/01/02/api-sample-lookup-transform/ public IDTSComponentMetaData100 AddComp_Lookup(string componentName, string conManName, string sqlComm, IDTSOutput100 outCols, List <string> joinColumns, Dictionary <string, string> newColumns, DTSRowDisposition rowDisposition = DTSRowDisposition.RD_IgnoreFailure, int redirectRowsToNoMatchOutput = 0 ) { // Create IDTSComponentMetaData100 Comp = dmp.ComponentMetaDataCollection.New(); Comp.ComponentClassID = "Microsoft.Lookup"; // Instantiate CManagedComponentWrapper Inst = Comp.Instantiate(); Inst.ProvideComponentProperties(); Comp.Name = componentName; Comp.Description = "Dodany Lookup"; // Connect IDTSPath100 pth = dmp.PathCollection.New(); pth.AttachPathAndPropagateNotifications(outCols, Comp.InputCollection[0]); // GetConnectionManager ConnectionManager cm = prj.ConnectionManagerItems[conManName + ".conmgr"].ConnectionManager; Comp.RuntimeConnectionCollection[0].ConnectionManager = DtsConvert.GetExtendedInterface(cm); Comp.RuntimeConnectionCollection[0].ConnectionManagerID = cm.ID; // Parametrize #1 IDTSOutput100 lmo = Comp.OutputCollection["Lookup Match Output"]; lmo.ErrorRowDisposition = rowDisposition; // Cache Type: // 0 = Full // 1 = Partial // 2 = None Inst.SetComponentProperty("CacheType", 0); // 0 = FailComponent, IgnoreFailure, RedirectRowsToErrorOutput // 1 = RedirectRowsToNoMatchOutput Inst.SetComponentProperty("NoMatchBehavior", redirectRowsToNoMatchOutput); Inst.SetComponentProperty("SqlCommand", sqlComm); // MetaData Inst.AcquireConnections(null); Inst.ReinitializeMetaData(); Inst.ReleaseConnections(); // Parametrize #2 - Join Columns IDTSInput100 lkpInput = Comp.InputCollection[0]; IDTSInputColumnCollection100 lkpInputCols = lkpInput.InputColumnCollection; IDTSVirtualInput100 lkpVirtInput = lkpInput.GetVirtualInput(); IDTSVirtualInputColumnCollection100 lkpVirtInputCols = lkpVirtInput.VirtualInputColumnCollection; foreach (string columnName in joinColumns) { IDTSVirtualInputColumn100 vColumn = lkpVirtInputCols[columnName]; IDTSInputColumn100 inputColumn = Inst.SetUsageType(lkpInput.ID, lkpVirtInput, vColumn.LineageID, DTSUsageType.UT_READONLY); Inst.SetInputColumnProperty(lkpInput.ID, inputColumn.ID, "JoinToReferenceColumn", columnName); } // Parametrize #3 - New Lookup Columns IDTSOutput100 lookupMatchOutput = Comp.OutputCollection["Lookup Match Output"]; foreach (string srcCol in newColumns.Keys) { string newColumnName = newColumns[srcCol]; string description = string.Format("Copy of {0}", srcCol); IDTSOutputColumn100 outputColumn = Inst.InsertOutputColumnAt(lookupMatchOutput.ID, 0, newColumnName, description); Inst.SetOutputColumnProperty(lookupMatchOutput.ID, outputColumn.ID, "CopyFromReferenceColumn", srcCol); } // Return return(Comp); }
public void AddPathsAndConnectColumns(Hashtable colPairs) { IDTSOutput100 srcOutput = srcComp.OutputCollection[0]; IDTSOutputColumnCollection100 srcOutputCols = srcOutput.OutputColumnCollection; IDTSInput100 destInput = destComp.InputCollection[0]; IDTSInputColumnCollection100 destInputCols = destInput.InputColumnCollection; IDTSExternalMetadataColumnCollection100 destExtCols = destInput.ExternalMetadataColumnCollection; Hashtable destColtable = new Hashtable(destExtCols.Count); foreach (IDTSExternalMetadataColumn100 extCol in destExtCols) { destColtable.Add(extCol.Name, extCol); } bool useMatch = (colPairs != null && colPairs.Count > 0); // colConvertTable stores a pair of columns which need a type conversion // colConnectTable stores a pair of columns which dont need a type conversion and can be connected directly. Hashtable colConvertTable = new Hashtable(srcOutputCols.Count); Hashtable colConnectTable = new Hashtable(srcOutputCols.Count); foreach (IDTSOutputColumn100 outputCol in srcOutputCols) { // Get the column name to look for in the destination. // Match column by name if match table is not used. String colNameToLookfor = String.Empty; if (useMatch) { colNameToLookfor = (String)colPairs[outputCol.Name]; } else { colNameToLookfor = outputCol.Name; } IDTSExternalMetadataColumn100 extCol = (String.IsNullOrEmpty(colNameToLookfor)) ? null : (IDTSExternalMetadataColumn100)destColtable[colNameToLookfor]; // Does the destination column exist? if (extCol != null) { // Found destination column, but is data type conversion needed? if (NeedConvert(outputCol.DataType, extCol.DataType)) { colConvertTable.Add(outputCol.ID, extCol); } else { colConnectTable.Add(outputCol.ID, extCol); } } } if (colConvertTable.Count > 0) { // add convert component AddConvertComponent(colConvertTable, colConnectTable); pipeline.PathCollection.New().AttachPathAndPropagateNotifications(convertComp.OutputCollection[0], destInput); } else { // Convert transform not needed. Connect src and destination directly. pipeline.PathCollection.New().AttachPathAndPropagateNotifications(srcOutput, destInput); } IDTSVirtualInput100 destVirInput = destInput.GetVirtualInput(); foreach (object key in colConnectTable.Keys) { int colID = (int)key; IDTSExternalMetadataColumn100 extCol = (IDTSExternalMetadataColumn100)colConnectTable[key]; // Create an input column from an output col of previous component. destVirInput.SetUsageType(colID, DTSUsageType.UT_READONLY); IDTSInputColumn100 inputCol = destInputCols.GetInputColumnByLineageID(colID); if (inputCol != null) { // map the input column with an external metadata column destDesignTimeComp.MapInputColumn(destInput.ID, inputCol.ID, extCol.ID); } } }
public void Parse(String bstrExpression, IDTSVariableDispenser100 pVariableDispenser, IDTSInputColumnCollection100 pColumnCollection) { _innerObject.Parse(bstrExpression, pVariableDispenser, pColumnCollection); }
internal BipsProxyIDTSInputColumnCollection100(IDTSInputColumnCollection100 innerObject) { _innerObject = innerObject; }
public void RebuildMappings(IDTSVirtualInputColumnCollection100 virtualInputColumns, IDTSInputColumnCollection100 inputColumns) { Hashtable mappingsInput = new Hashtable(); List <object[]> mappingsWithoutInputs = new List <object[]>(); List <object[]> newMappings = new List <object[]>(); //Speichern der bisherigen Mappings in 2 Listen (1x mit Input-Mapping, 1x ohne) for (int i = 0; i < this.MappingRowCount; i++) { object[] row = this.GetMappingRow(i); if (row[Constants.MAPPING_IDX_INPUT_COL_NAME] != null && row[Constants.MAPPING_IDX_INPUT_COL_NAME].ToString() != "") { mappingsInput.Add(row[Constants.MAPPING_IDX_INPUT_COLUMN_ID], row); } else { mappingsWithoutInputs.Add(row); } } //Generieren von neuen MappingRows anhand der InputColumns foreach (IDTSInputColumn100 inputCol in inputColumns) { object[] row; if (mappingsInput.Contains(inputCol.ID)) { row = (object[])mappingsInput[inputCol.ID]; row[Constants.MAPPING_IDX_INPUT_COL_NAME] = inputCol.Name; row[Constants.MAPPING_IDX_DATATYPE_INPUT] = SqlCreator.GetSQLServerDataTypeFromInput(inputCol);//inputCol.DataType.ToString(); } else { row = new object[Constants.MAPPING_COUNT]; row[Constants.MAPPING_IDX_USE_INSERT] = true; row[Constants.MAPPING_IDX_USE_UPDATE] = true; row[Constants.MAPPING_IDX_KEY] = false; row[Constants.MAPPING_IDX_INPUT_COL_NAME] = inputCol.Name; row[Constants.MAPPING_IDX_OUTPUT_COL_NAME] = Constants.MAPPING_NOT_ASSIGNED; row[Constants.MAPPING_IDX_DEFAULT] = ""; row[Constants.MAPPING_IDX_DATATYPE_INPUT] = SqlCreator.GetSQLServerDataTypeFromInput(inputCol);//inputCol.DataType.ToString(); row[Constants.MAPPING_IDX_INPUT_COLUMN_ID] = inputCol.ID; } newMappings.Add(row); } //Aufbauen der neuen Mapping Properties this.RemoveMappings(); foreach (object[] row in newMappings) { this.AddMappingProperty(row); } foreach (object[] row in mappingsWithoutInputs) { this.AddMappingProperty(row); } }