現在、カスタム タスクを開発していますが、問題が発生しています。
My Custom Task は 3 つのファイルで構成されています。
- インターフェース「Task」を実装するクラスを含む 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 クラスには、パラメーター (myConnection と myScript) を検証する Validate() 関数があります。これらのパラメーターは常に 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() を実行すると null になるのはなぜですか?
MBTaskUI から TaskHost へのリンクと MBTask からのリンクを追加する必要がありますか?
ここでわからないことがあるようです...
ご協力いただきありがとうございます、
レオ・ルジューン。