Обработчик событий SSIS ScriptTask OnTaskFailed не фиксирует результат ScriptResults.Failure

Это то, что действительно связано с довольно продвинутым знанием .NET framework, но я не смог найти нужную мне информацию.

У меня есть пакет SSIS, который выполняет ScriptTask. В этом ScriptTask приведен ниже простой код:

public void Main()
    {
        // TODO: Add your code here
        var fileName = (string)Dts.Variables["User::FileName"].Value;            
        DialogResult result = MessageBox.Show($"Do you want to fail the task", "Select what to do" , MessageBoxButtons.YesNo);

        if (result == DialogResult.Yes)
        {
            Dts.TaskResult = (int)ScriptResults.Failure;
        } else
        {
            Dts.TaskResult = (int)ScriptResults.Success;
        }
    }

Как видите, написать более простой код достаточно сложно. Мой вопрос касается обработчика событий для этой задачи сценария.

Я пробовал следующее:

  1. Добавление обработчика событий OnTaskFailed в задачу «Скрипт»
  2. Добавление обработчика события OnError в задачу скрипта

Результат был следующим:

  1. Обработчик событий не срабатывает, а это означает, что результат задачи, возвращаемый Dts.TaskResult = (int)ScriptResults.Failure;, не влияет на пакет.

  2. Обработчик событий срабатывает, а это означает, что результат задачи, возвращаемый Dts.TaskResult = (int)ScriptResults.Failure;, фиксируется обработчиком событий.

Я ожидал, что будет наоборот. Кто-нибудь может объяснить, почему это так? Для меня OnError является более общим результатом, и я бы не хотел, чтобы мой обработчик событий срабатывал при каждой отдельной ошибке (например, при необработанных исключениях).

Надеюсь, это имеет смысл


person JosePaya    schedule 20.01.2020    source источник
comment
Пожалуйста, игнорируйте строку, которая ссылается на переменную fileName. Он не используется ни для чего в пакете   -  person JosePaya    schedule 20.01.2020
comment
Я добавлю к своему первоначальному объяснению. Все это предназначено для тестирования сбоя ScriptTask в цикле foreach. Я хочу обработать результаты сбоя с помощью обработчика событий, который изменит значение переменной распространения на False, предотвращая всплытие сбоя в контейнер и, следовательно, заставляя цикл перейти к следующей итерации. Но почему только обработчик события OnError выбирает этот результат сбоя ScriptTask?   -  person JosePaya    schedule 20.01.2020
comment
Я далеко не разработчик С#, но думаю, что у меня была похожая проблема. Короткий ответ, я изменил свой код, чтобы использовать this.Dts.{whatever}. Ознакомьтесь с моим вопросом и ответом здесь: stackoverflow.com/questions/51753727/   -  person digital.aaron    schedule 21.01.2020