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


Имитация вывода ошибок для компонента скрипта

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

Если необходимо добавить описание ошибки, соответствующее конкретному стандартному коду ошибки служб Integration Services, можно использовать метод GetErrorDescription интерфейса IDTSComponentMetaData100, доступ к которому можно получить через свойство ComponentMetaData компонента скрипта.

Пример

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

Настройка примера

  1. Перед созданием нового компонента скрипта создайте диспетчер соединений и настройте источник потока данных, выбирающий адреса из образца базы данных База данных AdventureWorks2008R2. В этом примере, где предусмотрено обращение только к столбцу CountryRegionName, можно просто использовать представление Person.vStateCountryProvinceRegion либо выбрать данные, соединив таблицы Person.Address, Person.StateProvince и Person.CountryRegion.

  2. Добавьте новый компонент скрипта в область конструктора потока данных и настройте его в качестве преобразования. Откройте редактор преобразования «Скрипт».

  3. На странице Скрипт задайте свойство ScriptLanguage, указав язык скрипта, используемый для создания скрипта.

  4. Нажмите кнопку Изменить скрипт, чтобы открыть среду Microsoft Visual Studio для приложений (VSTA).

  5. В методе Input0_ProcessInputRow введите или вставьте следующий образец кода:

  6. Закройте среду VSTA.

  7. На странице Входные столбцы выберите столбцы, которые необходимо обработать в преобразовании «Скрипт». В этом примере используется только столбец CountryRegionName. Невыбранные доступные входные столбцы будут пропущены без изменения в потоке данных.

  8. На странице Входы и выходы добавьте новый, второй выход и укажите в качестве значения его свойства SynchronousInputID идентификатор входа, используемый также в качестве значения свойства SynchronousInputID выхода по умолчанию. Присвойте свойству ExclusionGroup обоих выходов одно и то же ненулевое значение (например, 1), чтобы указать, что каждая строка должна быть направлена только в один из двух выходов. Дайте новому выводу ошибок понятное описательное имя, например MyErrorOutput.

  9. Добавьте в новый вывод ошибок дополнительные выходные столбцы для отслеживания требуемых данных ошибок. В их число может входить код ошибки, идентификатор столбца, в котором возникла ошибка, а также, возможно, описание ошибки. В этом примере создаются новые столбцы, ErrorColumn и ErrorMessage. Если в реализации обрабатываются стандартные ошибки служб Integration Services, необходимо добавить столбец ErrorCode для номера ошибки.

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

  11. Закройте Редактор преобразования «Скрипт».

  12. Соедините выходы компонента скрипта с подходящими назначениями. Назначение «Неструктурированный файл» проще всего для настройки тестирования в нерегламентированных случаях.

  13. Запустите пакет.

Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

  If Row.CountryRegionName <> "Canada" _
      And Row.CountryRegionName <> "United States" Then

    Row.ErrorColumn = 68 ' ID of CountryRegionName column
    Row.ErrorMessage = "Address is not in North America."
    Row.DirectRowToMyErrorOutput()

  Else

    Row.DirectRowToOutput0()

  End If

End Sub
public override void Input0_ProcessInputRow(Input0Buffer Row)
{

  if (Row.CountryRegionName!="Canada"&&Row.CountryRegionName!="United States")

  {
    Row.ErrorColumn = 68; // ID of CountryRegionName column
    Row.ErrorMessage = "Address is not in North America.";
    Row.DirectRowToMyErrorOutput();

  }
  else
  {

    Row.DirectRowToOutput0();

  }

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

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

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