Поделиться через


Методы времени разработки для компонента потока данных

Область применения: среда выполнения интеграции SSIS SQL Server в Фабрика данных Azure

Перед выполнением задача потока данных считается находящейся в состоянии времени разработки, поскольку она подвергается добавочным изменениям. К таким изменениям относятся добавление или удаление компонентов, добавление или удаление объектов пути, которые соединяют компоненты, и изменения в метаданных компонентов. При изменении метаданных компонент может отслеживать их и выполнять ответные действия. Например, компонент может не допускать внесения определенных изменений или вносить дополнительные изменения в ответ на изменение. Во время разработки конструктор взаимодействует с компонентом через интерфейс 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  

Создание пользовательских свойств

Разработчики компонентов должны добавлять пользовательские свойства (ProvideComponentProperties) в компонент с помощью вызова метода IDTSCustomProperty100. Пользовательские свойства не имеют свойства типа данных. Тип данных пользовательского свойства определяется типом данных значения, которое присвоено его свойству 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.

См. также

Методы времени выполнения для компонента потока данных