Методы времени разработки для компонента потока данных
Перед выполнением задача потока данных считается находящейся в состоянии времени разработки, поскольку она подвергается добавочным изменениям. К таким изменениям относятся добавление или удаление компонентов, добавление или удаление объектов пути, которые соединяют компоненты, и изменения в метаданных компонентов. При изменении метаданных компонент может отслеживать их и выполнять ответные действия. Например, компонент может не допускать внесения определенных изменений или вносить дополнительные изменения в ответ на изменение. Во время разработки конструктор взаимодействует с компонентом через интерфейс IDTSDesigntimeComponent100 времени разработки.
Реализация времени разработки
Интерфейс времени разработки компонента описывается интерфейсом IDTSDesigntimeComponent100. Хотя нельзя явным образом реализовать этот интерфейс, знакомство с методами, определенными в этом интерфейсе, поможет понять, какие методы базового класса PipelineComponent соответствуют экземпляру компонента времени разработки.
При загрузке компонента в среду SQL Server Data Tools (SSDT) создается экземпляр компонента времени разработки, и при изменении компонента вызываются методы интерфейса IDTSDesigntimeComponent100. Реализация базового класса позволяет переопределить только те методы, которые необходимы для компонента. Во многих случаях можно переопределить эти методы, чтобы предотвратить внесение неправильных изменений в компонент. Например, чтобы не дать пользователям возможности добавлять выход в компонент, переопределите метод InsertOutput. В противном случае при вызове реализации этого метода базовым классом он добавляет выход в компонент.
Независимо от предназначения или функциональности компонента, следует переопределить методы ProvideComponentProperties, Validate и ReinitializeMetaData. Дополнительные сведения о методах Validate и ReinitializeMetaData см. в разделе Проверка компонента потока данных.
Метод ProvideComponentProperties
Инициализация компонента происходит в методе ProvideComponentProperties. Этот метод вызывается конструктором служб Службы SSIS при добавлении компонента в задачу потока данных. Он аналогичен конструктору классов. Разработчикам компонентов следует создавать и инициализировать свои входы, выходы и пользовательские свойства во время вызова этого метода. Метод ProvideComponentProperties отличается от конструктора тем, что не вызывается каждый раз при создании экземпляра компонента времени разработки или времени выполнения.
Реализация этого метода базового класса добавляет вход и выход в компонент и присваивает идентификатор входа в качестве значения свойства SynchronousInputID. Однако в SQL Server объекты входа и выхода, добавленные базовым классом, не именуются. Успешная загрузка пакетов, содержащих компонент с объектами входа или выхода, свойство Name которых не задано, невозможна. Поэтому при использовании базовой реализации необходимо явным образом назначить значения свойству Name входа и выхода по умолчанию.
public override void ProvideComponentProperties()
{
/// TODO: Reset the component.
/// TODO: Add custom properties.
/// TODO: Add input objects.
/// TODO: Add output objects.
}
Public Overrides Sub ProvideComponentProperties()
' TODO: Reset the component.
' TODO: Add custom properties.
' TODO: Add input objects.
' TODO: Add output objects.
End Sub
Создание пользовательских свойств
Разработчики компонентов должны добавлять пользовательские свойства (IDTSCustomProperty100) в компонент с помощью вызова метода ProvideComponentProperties. Пользовательские свойства не имеют свойства типа данных. Тип данных пользовательского свойства определяется типом данных значения, которое присвоено его свойству Value. Однако после присвоения пользовательскому свойству исходного значения присвоить ему значение с другим типом данных нельзя.
Примечание |
---|
Интерфейс IDTSCustomProperty100 обеспечивает ограниченную поддержку значений свойств типа Object. Единственный объект, который можно сохранять в качестве значения пользовательского свойства, – это массив простых типов, например, строк или целых чисел. |
Можно указать, что пользовательское свойство поддерживает выражения свойств, присвоив его свойству ExpressionType в качестве значения CPET_NOTIFY из перечисления DTSCustomPropertyExpressionType, как показано в следующем примере. Нет необходимости добавлять какой-либо код для обработки или проверки выражения свойства, введенного пользователем. Можно задать значение для свойства по умолчанию, проверить его значение, прочитать и использовать это значение обычным образом.
IDTSCustomProperty100 myCustomProperty;
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY;
Dim myCustomProperty As IDTSCustomProperty100
...
myCustomProperty.ExpressionType = DTSCustomPropertyExpressionType.CPET_NOTIFY
Можно ограничить возможности пользователя выбором значения для пользовательского свойства из перечисления с помощью свойства TypeConverter, как показано в следующем примере, где предполагается, что было определено общее перечисление с именем MyValidValues.
IDTSCustomProperty100 customProperty = outputColumn.CustomPropertyCollection.New();
customProperty.Name = "My Custom Property";
// This line associates the type with the custom property.
customProperty.TypeConverter = typeof(MyValidValues).AssemblyQualifiedName;
// Now you can use the enumeration values directly.
customProperty.Value = MyValidValues.ValueOne;
Dim customProperty As IDTSCustomProperty100 = outputColumn.CustomPropertyCollection.New
customProperty.Name = "My Custom Property"
' This line associates the type with the custom property.
customProperty.TypeConverter = GetType(MyValidValues).AssemblyQualifiedName
' Now you can use the enumeration values directly.
customProperty.Value = MyValidValues.ValueOne
Дополнительные сведения см. в разделах «Преобразование обобщенного типа» и «Реализация преобразователя типов» библиотеки MSDN.
С помощью свойства UITypeEditor в качестве значения пользовательского свойства можно указать диалоговое окно пользовательского редактора, как показано в следующем примере. Сначала необходимо создать пользовательский редактор типов, наследующий от System.Drawing.Design.UITypeEditor, если не удается найти существующий класс редактора типов пользовательских интерфейсов, отвечающий потребностям пользователя.
public class MyCustomTypeEditor : UITypeEditor
{
...
}
Public Class MyCustomTypeEditor
Inherits UITypeEditor
...
End Class
Затем укажите этот класс в качестве значения для свойства UITypeEditor пользовательского свойства.
IDTSCustomProperty100 customProperty = outputColumn.CustomPropertyCollection.New();
customProperty.Name = "My Custom Property";
// This line associates the editor with the custom property.
customProperty.UITypeEditor = typeof(MyCustomTypeEditor).AssemblyQualifiedName;
Dim customProperty As IDTSCustomProperty100 = outputColumn.CustomPropertyCollection.New
customProperty.Name = "My Custom Property"
' This line associates the editor with the custom property.
customProperty.UITypeEditor = GetType(MyCustomTypeEditor).AssemblyQualifiedName
Дополнительные сведения см. в разделе «Реализация редактора типов пользовательских интерфейсов» библиотеки MSDN.
|