0

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

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

  • MBTask 包含实现接口“Task”的类
  • 实现接口“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 类中,我有一个验证参数(myConnection 和 myScript)的 Validate() 函数。并且这些参数始终为空(在我通常使用 MBForm 和 close 函数初始化它之后也是如此。

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

myScript 和 myConnection 在我的 MBTask 中被声明为 public。

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

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

我是否必须从 MBTaskUI 添加到 TaskHost 的链接和来自 MBTask 的链接?

好像这里有什么我不明白的...

谢谢你的帮助,

莱奥·勒琼。

4

1 回答 1

0

我喜欢解决方案:

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

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

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

于 2013-06-13T07:15:05.130 回答