自定义任务:TaskHost参数持久性

时间:2013-06-12 12:42:54

标签: ssis sql-server-2012

我目前正在开发一项自定义任务,而且我遇到了问题。

我的自定义任务包含三个文件:

  • 包含实现“任务”接口的类的MBTask
  • 实现接口“IDtsTaskUI”的MBTaskUI
  • MBForm,这是一个表格。

在Initialize()函数的MBTaskUI中,我将调用TaskHost对象并将其保存在变量中。然后在GetView()函数中将此TaskHost发送到我的表单构建器

public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)
{
    this.taskHost = taskHost;
    IDtsConnectionService cs = serviceProvider.GetService
    (typeof(IDtsConnectionService)) as IDtsConnectionService;
    this.connections = cs.GetConnections();
}

public ContainerControl GetView()
{
    return new MBForm(this.taskHost, this.connections);
}

它工作得很好,我可以在我的表单中使用此TaskHost来获取参数,当我加载表单并在关闭它时保存它们。

String script_tmp = (String)th.Properties["myScript"].GetValue(th);
SqlConnection conn_tmp = (SqlConnection)th.Properties["myConnection"].GetValue(th);

th.Properties["myScript"].SetValue(th, myScript);                  
th.Properties["myConnection"].SetValue(th, myConnectionTarget);

所以,当我重新打开我的任务编辑器时,我使用我收到的参数初始化一些对象。

但是,这是我的问题,在我的MBTask类中,我有一个Validate()函数来验证参数(myConnection和myScript)。并且这些参数始终为null(也是在我通常使用MBForm和close函数初始化之后。

那么,我不明白为什么我的参数没有实例化? 这不是“th.Properties [”myScript“]的工作.SetValue(th,myScript);” ?

myScript和myConnection在我的MBTask中声明为公开。

public class MBTask : Task
{
    public SqlConnection myConnection { get; set; }
    public String myScript { get; set; }

我知道这些参数已保存,因为我可以在重新打开编辑器时取回它们。那么当我进行Validate()时为什么它们为空?

我是否必须从MBTaskUI添加一个指向TaskHost的链接,从MBTask添加一个指向?

似乎这里有一些我不理解的东西......

感谢您的帮助,

LéoLejeune。

1 个答案:

答案 0 :(得分:0)

我喜欢这个解决方案:

我实施的系统是正确的。但是如果你想使用复杂的参数(SQLConnection),你必须使用XML保存。

因此,要使用任务的默认保存参数,只能使用String和Integer等简单对象。

验证函数不能使用参数,因为它们尚未实例化,因此它们为空。