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


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

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

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

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

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

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

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

Рабочий образец пользовательского перечислителя см. в образцах служб Integration Services в разделе Codeplex.

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

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

Так как все управляемые перечислители по каждому элементу являются производными от базового класса 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.
    }
}

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

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

Значок служб Integration Services (маленький) Будьте в курсе новых возможностей служб Integration Services

Чтобы загружать новейшую документацию, статьи, образцы и видеоматериалы от корпорации Майкрософт, а также лучшие решения от участников сообщества, посетите страницу служб Integration Services на сайтах MSDN или TechNet:

Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.