我目前正在开发一项自定义任务,而且我遇到了问题。
我的自定义任务包含三个文件:
在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。
答案 0 :(得分:0)
我喜欢这个解决方案:
我实施的系统是正确的。但是如果你想使用复杂的参数(SQLConnection),你必须使用XML保存。
因此,要使用任务的默认保存参数,只能使用String和Integer等简单对象。
验证函数不能使用参数,因为它们尚未实例化,因此它们为空。