SSIS - 确定哪些任务失败,发送包含详细信息的单个电子邮件

时间:2017-06-06 10:59:57

标签: c# ssis

我有一个简单的软件包,用于更新我的数据库,然后将数据导出到五个不同的文件。我正在尝试做的是生成一封电子邮件,详细说明每个导出是否已成功运行。所以我想在电子邮件中找到类似的内容:

|EXPORT | STATUS  |
| 4     | Success |
| 5     | Success |
| 6     | Success |
| 7     | Failed  |
| 8     | Success |

最初,我设置了单独的成功和失败(Logical OR)电子邮件任务。这让我可以确定所有任务都成功了,或者至少有一次失败......但这并不是我想要的。

然后,我查看this example并在我的脚本任务中用C#重写它,但我意识到示例中的变量似乎不存在(脚本会抛出错误),所以我尝试创建用户变量并在ReadWriteVariables中传递它们,脚本将成功运行但发送邮件任务中不显示任何内容,该脚本实际上没有做任何事情。

我已经看了几个类似的问题,this one 似乎接近我想要的,它解释了做什么 ,但并没有真正帮助像我这样的初学者实际做到这一点。

以下是我的控制流程供参考:

My Control Flow

脚本任务中的Main方法:

ArrayList messages = new ArrayList();

try 
{
    messages = (ArrayList) Dts.Variables["ErrorCollection"].Value;
} 
catch (Exception Ex) 
{
    // Handle errors...
}

messages.Add(Dts.Variables["ErrorDescription"].Value.ToString());
Dts.Variables["ErrorCollection"].Value = messages;
Dts.Variables.Unlock();
Dts.TaskResult = (int)ScriptResults.Success;

我不知道我是否以错误的方式解决这个问题,这可能是一种简单的方法,但是对SSIS不熟悉我不知道它是什么。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

是的,我设法自己搞清楚了。对于任何面临类似问题的人来说,我就是这样做的:

  1. 为要监控的每项任务设置变量 - 成功/失败可能是10。在我的例子中,我将每个任务的变量设置为默认的成功消息字符串。
  2. OnError事件处理程序应用于您要监控的每个任务
  3. Expression Task处理程序中放置OnError并使用它将变量设置为失败条件。例如。 @[User:YourVariable] = "Failed"
  4. Send Mail Task中,您可以在发送邮件任务编辑器的“表达式”选项卡中连接之前为MessageSource创建的每个变量。
  5. 此解决方案完全跳过Script Task,但如果您想构建更详细的电子邮件,则可以将变量传递给脚本,而不是直接传递到发送邮件任务。