// Creates Source Component (Output Collection) internal void CreateSourceComponent() { // Creates mainpipe for the executable component _objMainPipe = ((TaskHost)_objPackage.Executables.Add(_strDataFlowTaskMoniker)).InnerObject as MainPipe; // Adds a component from the MainPipe to the Source Metadata _objIDTSSRCMetaData = _objMainPipe.ComponentMetaDataCollection.New(); // Sets the source component class id _objIDTSSRCMetaData.ComponentClassID = _strSourceDFComponentID; // Sets the locale property _objIDTSSRCMetaData.LocaleID = -1; // Instantiates the Wrapper, adding Source Metadata _objSourceWrapper = _objIDTSSRCMetaData.Instantiate(); // Provides default properties _objSourceWrapper.ProvideComponentProperties(); // Sets RAWFile Component Property _objSourceWrapper.SetComponentProperty("AccessMode", 0); _objSourceWrapper.SetComponentProperty("FileName", strRAWFileName); _objSourceWrapper.SetComponentProperty("FileNameVariable", null); // Sets the connection _objSourceWrapper.AcquireConnections(null); // Reinitializes the Source Metadata _objSourceWrapper.ReinitializeMetaData(); // Fetch ColumnNames for the Metadata if (_strRAWColNames.Length == 0 && _strRAWColNames.ToString() == string.Empty) { foreach (IDTSOutputColumn100 idtsOutPutColumn in _objIDTSSRCMetaData.OutputCollection[0].OutputColumnCollection) { _strRAWColNames.Append(idtsOutPutColumn + ","); } } // Releases the Wrapper connection _objSourceWrapper.ReleaseConnections(); }
public CRMDestinationAdapterUIForm(Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100 metaData, IDtsConnectionService connectionService) : this() { this.metaData = metaData; this.connectionService = connectionService; this.designTimeInstance = metaData.Instantiate(); }
public RabbitMQSourceUIForm(Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100 metaData, IServiceProvider serviceProvider) : this() { this.metaData = metaData; this.serviceProvider = serviceProvider; this.connectionService = (IDtsConnectionService)serviceProvider.GetService(typeof(IDtsConnectionService)); this.designTimeInstance = metaData.Instantiate(); }
/// <summary> /// Launches the Edit form for the DataFlow component /// </summary> /// <param name="parentWindow"></param> /// <param name="variables"></param> /// <param name="connections"></param> /// <returns></returns> public bool Edit(IWin32Window parentWindow, Variables variables, Connections connections) { this.connections = connections; this.variables = variables; TUIForm frm = new TUIForm(); if (designTimeComponent == null) { designTimeComponent = componentMetadata.Instantiate(); } InputColumnsUIEditor.UIHelper = this; frm.InitializeUIForm(this); DialogResult result = frm.ShowDialog(parentWindow); return(result == DialogResult.OK); }
// Creates Destination Component (Input Collection) internal void CreateDestinationReaderComponent() { // 1. DataReader String: the class name of the DataReader destination. // 2. FailOnTimeout Boolean:Indicates wheather to fail when a ReadTimeout occurs. The default value is False. // 3. ReadeTimeout Integer: The number of milliseconds before a timeout occurs. The default value of this property is 30000 (30 seconds). // Adds a component from MainPipe to the Destination Recordset Metadata _objIDTSDSTReaderMetaData = _objMainPipe.ComponentMetaDataCollection.New(); // Sets the Destination recordset component name _objIDTSDSTReaderMetaData.Name = "Test"; // Sets the Destination recordset component class id _objIDTSDSTReaderMetaData.ComponentClassID = _strDestinationDFReaderComponentID; IDTSCustomProperty100 _property = _objIDTSDSTReaderMetaData.CustomPropertyCollection.New(); _property.Name = "DataReader"; _property.Value = new object(); _property = _objIDTSDSTReaderMetaData.CustomPropertyCollection.New(); _property.Name = "FailOnTimeout"; _property.Value = false; _property = _objIDTSDSTReaderMetaData.CustomPropertyCollection.New(); _property.Name = "ReadTimeout"; _property.Value = 30000; // Instantiates the Wrapper adding Destination Recordset Metadata _objDestinationReaderWrapper = _objIDTSDSTReaderMetaData.Instantiate(); // Provides default properties _objDestinationReaderWrapper.ProvideComponentProperties(); // Sets the connection _objDestinationReaderWrapper.AcquireConnections(null); // Reinitializes the Destination Metadata _objDestinationReaderWrapper.ReinitializeMetaData(); // Releases the Wrapper connection _objDestinationReaderWrapper.ReleaseConnections(); // Creates the IDTSPath from the MainPipe _objIDTSPath = _objMainPipe.PathCollection.New(); _objIDTSPath.AttachPathAndPropagateNotifications(_objIDTSSRCMetaData.OutputCollection[0], _objIDTSDSTReaderMetaData.InputCollection[0]); _objIDTSInput = _objIDTSDSTReaderMetaData.InputCollection[0]; //Gets the Virtual Input Column Collection from the Destination Input Collection _objIDTSVirtualInput = _objIDTSInput.GetVirtualInput(); _iDestInputID = Convert.ToInt32(_objIDTSInput.ID); // Splits the RAW Column Names into an array of strings if (strRAWColNames != null && strRAWColNames.Equals(string.Empty) == false && strRAWColNames != "") { if (strRAWColNames.EndsWith(",")) { _iIndex = strRAWColNames.LastIndexOf(_delim); _strIndex = strRAWColNames.Remove(_iIndex); } _strFilterArray = _strIndex.Split(_delim); } // Sets Usagetype According to FilterArray foreach (IDTSVirtualInputColumn100 objIDTSVirtualInputColumn in _objIDTSVirtualInput.VirtualInputColumnCollection) { if (_strFilterArray == null) { // When FilterArray string is null _objDestinationReaderWrapper.SetUsageType(_iDestInputID, _objIDTSVirtualInput, objIDTSVirtualInputColumn.LineageID, DTSUsageType.UT_READONLY); } else { if (FilterField(objIDTSVirtualInputColumn.Name, _strFilterArray) == false) { // When FilterArray string is not null _objDestinationReaderWrapper.SetUsageType(_iDestInputID, _objIDTSVirtualInput, objIDTSVirtualInputColumn.LineageID, DTSUsageType.UT_READONLY); } } } // Sets the connection _objDestinationReaderWrapper.AcquireConnections(null); // Reinitializes the Destination Metadata _objDestinationReaderWrapper.ReinitializeMetaData(); // Releases the Wrapper connection _objDestinationReaderWrapper.ReleaseConnections(); }
private void ScanIntegrationServicesExecutableForPropertiesWithNonDefaultValue(DtsObject o, string FriendlyPath) { if (o == null) { return; } if (packageDefault == null) { packageDefault = new Package(); } DtsObject defaultObject; if (o is Package) { defaultObject = packageDefault; } else if (o is IDTSName) { if (dictCachedDtsObjects.ContainsKey(((IDTSName)o).CreationName)) { defaultObject = dictCachedDtsObjects[((IDTSName)o).CreationName]; } else if (o is DtsEventHandler) { defaultObject = (DtsObject)packageDefault.EventHandlers.Add(((IDTSName)o).CreationName); dictCachedDtsObjects.Add(((IDTSName)o).CreationName, defaultObject); } else if (o is ConnectionManager) { defaultObject = (DtsObject)packageDefault.Connections.Add(((IDTSName)o).CreationName); dictCachedDtsObjects.Add(((IDTSName)o).CreationName, defaultObject); } else { defaultObject = packageDefault.Executables.Add(((IDTSName)o).CreationName); dictCachedDtsObjects.Add(((IDTSName)o).CreationName, defaultObject); } } else { throw new Exception("Object " + o.GetType().FullName + " does not implement IDTSName."); } PropertyInfo[] properties = o.GetType().GetProperties(BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance); foreach (PropertyInfo prop in properties) { if (!prop.CanWrite || !prop.CanRead) { continue; } //SSIS objects don't have a DefaultValueAttribute, which is wy we have to create a new control flow object (defaultObject) above and compare properties from this object to that object object[] attrs = prop.GetCustomAttributes(typeof(System.ComponentModel.BrowsableAttribute), true); System.ComponentModel.BrowsableAttribute browsableAttr = (System.ComponentModel.BrowsableAttribute)(attrs.Length > 0 ? attrs[0] : null); if (browsableAttr != null && !browsableAttr.Browsable) { continue; //don't show attributes marked not browsable } attrs = prop.GetCustomAttributes(typeof(System.ComponentModel.ReadOnlyAttribute), true); System.ComponentModel.ReadOnlyAttribute readOnlyAttr = (System.ComponentModel.ReadOnlyAttribute)(attrs.Length > 0 ? attrs[0] : null); if (readOnlyAttr != null && readOnlyAttr.IsReadOnly) { continue; //don't show attributes marked read only } if (prop.PropertyType.Namespace != "System" && !prop.PropertyType.IsPrimitive && !prop.PropertyType.IsValueType && !prop.PropertyType.IsEnum) { continue; } if (prop.PropertyType == typeof(DateTime)) { continue; } if (prop.PropertyType == typeof(string)) { continue; } if (prop.Name == "VersionBuild") { continue; } if (prop.Name == "VersionMajor") { continue; } if (prop.Name == "VersionMinor") { continue; } if (prop.Name == "PackageType") { continue; } object value = prop.GetValue(o, null); object defaultValue = prop.GetValue(defaultObject, null); if (defaultValue != null && !defaultValue.Equals(value)) { string sValue = (value == null ? string.Empty : value.ToString()); this.listNonDefaultProperties.Add(new NonDefaultProperty(this.DatabaseName, FriendlyPath, prop.Name, defaultValue.ToString(), sValue)); } } if (o is IDTSObjectHost) { IDTSObjectHost host = (IDTSObjectHost)o; if (host.InnerObject is Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipe) { properties = typeof(Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipe).GetProperties(BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance); } else if (host.InnerObject is IDTSConnectionManagerDatabaseParametersXX) { properties = typeof(IDTSConnectionManagerDatabaseParametersXX).GetProperties(BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance); } else //probably won't turn up any properties because reflection on a COM object Type doesn't work { properties = host.InnerObject.GetType().GetProperties(BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance); } foreach (PropertyInfo prop in properties) { if (!prop.CanWrite || !prop.CanRead) { continue; } object[] attrs = prop.GetCustomAttributes(typeof(System.ComponentModel.BrowsableAttribute), true); System.ComponentModel.BrowsableAttribute browsableAttr = (System.ComponentModel.BrowsableAttribute)(attrs.Length > 0 ? attrs[0] : null); if (browsableAttr != null && !browsableAttr.Browsable) { continue; //don't show attributes marked not browsable } attrs = prop.GetCustomAttributes(typeof(System.ComponentModel.ReadOnlyAttribute), true); System.ComponentModel.ReadOnlyAttribute readOnlyAttr = (System.ComponentModel.ReadOnlyAttribute)(attrs.Length > 0 ? attrs[0] : null); if (readOnlyAttr != null && readOnlyAttr.IsReadOnly) { continue; //don't show attributes marked read only } if (prop.PropertyType.Namespace != "System" && !prop.PropertyType.IsPrimitive && !prop.PropertyType.IsValueType && !prop.PropertyType.IsEnum) { continue; } if (prop.PropertyType == typeof(DateTime)) { continue; } if (prop.PropertyType == typeof(string)) { continue; } if (prop.Name == "VersionBuild") { continue; } if (prop.Name == "VersionMajor") { continue; } if (prop.Name == "VersionMinor") { continue; } if (prop.Name == "PackageType") { continue; } if (prop.Name.StartsWith("IDTS")) { continue; } object value; object defaultValue; if (host.InnerObject is Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipe) { try { value = host.InnerObject.GetType().InvokeMember(prop.Name, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.FlattenHierarchy | System.Reflection.BindingFlags.Instance, null, host.InnerObject, null); } catch { continue; } try { defaultValue = ((IDTSObjectHost)defaultObject).InnerObject.GetType().InvokeMember(prop.Name, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.FlattenHierarchy | System.Reflection.BindingFlags.Instance, null, ((IDTSObjectHost)defaultObject).InnerObject, null); } catch { defaultValue = null; } } else { value = prop.GetValue(host.InnerObject, null); defaultValue = prop.GetValue(((IDTSObjectHost)defaultObject).InnerObject, null); } if (defaultValue != null && !defaultValue.Equals(value)) { string sValue = (value == null ? string.Empty : value.ToString()); this.listNonDefaultProperties.Add(new NonDefaultProperty(this.DatabaseName, FriendlyPath, prop.Name, defaultValue.ToString(), sValue)); } } //scan data flow transforms if (host.InnerObject is Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipe) { Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipe pipe = (Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipe)host.InnerObject; Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipe defaultPipe = (Microsoft.SqlServer.Dts.Pipeline.Wrapper.MainPipe)((IDTSObjectHost)defaultObject).InnerObject; foreach (IDTSComponentMetaDataXX transform in pipe.ComponentMetaDataCollection) { IDTSComponentMetaDataXX defaultTransform = defaultPipe.ComponentMetaDataCollection.New(); defaultTransform.ComponentClassID = transform.ComponentClassID; CManagedComponentWrapper defaultInst = defaultTransform.Instantiate(); try { defaultInst.ProvideComponentProperties(); } catch { continue; //if there's a corrupt package (or if you don't have the component installed on your laptop?) then this might fail... so just move on } if (!transform.ValidateExternalMetadata) //this property isn't in the CustomPropertyCollection, so we have to check it manually { this.listNonDefaultProperties.Add(new NonDefaultProperty(this.DatabaseName, FriendlyPath + "\\" + transform.Name, "ValidateExternalMetadata", "True", "False")); } foreach (IDTSOutputXX output in transform.OutputCollection) //check for error row dispositions { if (output.ErrorRowDisposition == DTSRowDisposition.RD_IgnoreFailure) { this.listNonDefaultProperties.Add(new NonDefaultProperty(this.DatabaseName, FriendlyPath + "\\" + transform.Name + "\\" + output.Name, "ErrorRowDisposition", "FailComponent", "IgnoreFailure")); } if (output.TruncationRowDisposition == DTSRowDisposition.RD_IgnoreFailure) { this.listNonDefaultProperties.Add(new NonDefaultProperty(this.DatabaseName, FriendlyPath + "\\" + transform.Name + "\\" + output.Name, "TruncationRowDisposition", "FailComponent", "IgnoreFailure")); } } Microsoft.DataTransformationServices.Design.PipelinePropertiesWrapper propWrapper = new Microsoft.DataTransformationServices.Design.PipelinePropertiesWrapper(transform, transform, 0); foreach (IDTSCustomPropertyXX prop in transform.CustomPropertyCollection) { System.ComponentModel.PropertyDescriptor propDesc = (System.ComponentModel.PropertyDescriptor)propWrapper.GetType().InvokeMember("CreateCustomPropertyPropertyDescriptor", BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.InvokeMethod | BindingFlags.Instance, null, propWrapper, new object[] { prop }); if (propDesc == null) { continue; } if (propDesc.IsReadOnly) { continue; } if (!propDesc.IsBrowsable) { continue; } if (prop.Value is string) { continue; } if (prop.Value is DateTime) { continue; } IDTSCustomPropertyXX defaultProp; try { defaultProp = defaultTransform.CustomPropertyCollection[prop.Name]; } catch { if (prop.Name == "PreCompile" && bool.Equals(prop.Value, false)) //this property doesn't show up in the new script component we created to determine defaults, so we have to check it manually { this.listNonDefaultProperties.Add(new NonDefaultProperty(this.DatabaseName, FriendlyPath + "\\" + transform.Name, prop.Name, "True", "False")); } continue; } System.ComponentModel.ITypeDescriptorContext context = new PipelinePropertyContext(transform, propDesc); string sValue = propDesc.Converter.ConvertToString(context, prop.Value); //gets nice text descriptions for enums on component properties string sDefaultValue = propDesc.Converter.ConvertToString(context, defaultProp.Value); //gets nice text descriptions for enums on component properties if (sValue == sDefaultValue) { continue; } this.listNonDefaultProperties.Add(new NonDefaultProperty(this.DatabaseName, FriendlyPath + "\\" + transform.Name, prop.Name, sDefaultValue, sValue)); } defaultPipe.ComponentMetaDataCollection.RemoveObjectByID(defaultTransform.ID); } } } }