0

現在、カスタム タスクを開発していますが、問題が発生しています。

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 からのリンクを追加する必要がありますか?

ここでわからないことがあるようです...

ご協力いただきありがとうございます、

レオ・ルジューン。

4

1 に答える 1

0

私は解決策が好きです:

私が実装したシステムは正しかった。ただし、複雑なパラメーター (SQLConnection) を使用する場合は、XML 保存を使用する必要があります。

したがって、タスクのデフォルトの保存パラメータを使用するには、String や Integer などの単純なオブジェクトのみを使用してください。

また、パラメーターはまだインスタンス化されておらず、null であるため、Validate 関数はパラメーターを使用できません。

于 2013-06-13T07:15:05.130 に答える