Бөлісу құралы:


Создание пользовательского перечислителя по каждому элементу

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

Действия, связанные с созданием пользовательского перечислителя foreach, аналогичны шагам по созданию любого другого пользовательского объекта для служб Integration Services:

  • Создайте новый класс, наследующий базовый класс. Для перечислителя по каждому элементу базовым классом является ForEachEnumerator.

  • Примените к классу атрибут, определяющий тип объекта. Для перечислителя по каждому элементу используется атрибут DtsForEachEnumeratorAttribute.

  • Переопределите реализацию методов и свойств базового класса. Наиболее важным методом для перечислителя по каждому элементу является GetEnumerator.

  • При необходимости разработайте настраиваемый пользовательский интерфейс. В случае с перечислителем по каждому элементу для этого необходимо использовать класс, реализующий интерфейс IDTSForEachEnumeratorUI.

Пользовательский перечислитель размещается в контейнере ForEachLoop. Во время выполнения контейнером ForEachLoop вызывается метод GetEnumerator пользовательского перечислителя. Пользовательский перечислитель возвращает объект, реализующий интерфейс IEnumerable, например ArrayList. Затем перечислитель ForEachLoop просматривает последовательно все элементы коллекции, передает значение текущего элемента в поток управления через определяемую пользователем переменную и выполняет поток управления в контейнере.

Приступая к работе над пользовательским перечислителем по каждому элементу

Создание проектов и классов

Так как все управляемые перечислители по каждому элементу являются производными от базового класса ForEachEnumerator, на первом шаге создания пользовательского перечислителя по каждому элементу необходимо создать проект библиотеки классов на предпочитаемом языке программирования управляемого кода, а затем создать класс, наследующий от базового класса. В этом производном классе будут переопределены методы и свойства базового класса, реализующие пользовательские функциональные возможности.

Создайте в том же решении второй проект библиотеки классов для собственного пользовательского интерфейса. Для пользовательского интерфейса рекомендуется использовать отдельную сборку, что позволяет обновлять и заново развертывать перечислитель по каждому элементу или его пользовательский интерфейс независимо друг от друга.

Настройте в обоих проектах подписывание сборок, которые будут создаваться во время построения, с помощью файла ключа для строгого имени.

Применение атрибута DtsForEachEnumerator

Примените к созданному классу атрибут DtsForEachEnumeratorAttribute, чтобы определить его как перечислитель по каждому элементу. Этот атрибут содержит сведения для времени разработки, например, имя и описание перечислителя по каждому элементу. Свойство Name отображается в раскрывающемся списке доступных перечислителей на вкладке Коллекция диалогового окна Редактор циклов по каждому элементу.

Используйте свойство UITypeName, чтобы связать перечислитель по каждому элементу с его пользовательским интерфейсом. Чтобы получить токен открытого ключа, необходимый для этого свойства, можно использовать команду sn.exe -t, отображающую токен открытого ключа из SNK-файла пары ключей, который предназначен для подписывания сборки пользовательского интерфейса.

Imports System  
Imports Microsoft.SqlServer.Dts.Runtime  
Namespace Microsoft.Samples.SqlServer.Dts  
    <DtsForEachEnumerator(DisplayName = "MyEnumerator", Description="A sample custom enumerator", UITypeName="FullyQualifiedTypeName,AssemblyName,Version=1.00.000.00,Culture=Neutral,PublicKeyToken=<publickeytoken>")> _   
    Public Class MyEnumerator  
     Inherits ForEachEnumerator  
        'Insert code here.  
    End Class  
End Namespace  
using System;  
using Microsoft.SqlServer.Dts.Runtime;  
namespace Microsoft.Samples.SqlServer.Dts  
{  
    [DtsForEachEnumerator( DisplayName = "MyEnumerator", Description="A sample custom enumerator", UITypeName="FullyQualifiedTypeName,AssemblyName,Version=1.00.000.00,Culture=Neutral,PublicKeyToken=<publickeytoken>")]  
    public class MyEnumerator : ForEachEnumerator  
    {  
        //Insert code here.  
    }  
}  

Построение, развертывание и отладка пользовательского перечислителя

Действия по созданию, развертыванию и отладке пользовательского перечислителя foreach в службах Integration Services очень похожи на шаги, необходимые для других типов пользовательских объектов. Дополнительные сведения см. в разделе Сборка, развертывание и отладка пользовательских объектов.

См. также

Написание кода пользовательского перечислителя по каждому элементу
Разработка пользовательского интерфейса для пользовательского перечислителя по каждому элементу