2013-06-12 38 views
0

我目前正在開發一個自定義任務,並且遇到問題。自定義任務:TaskHost參數持久性

我的自定義任務包括三個文件:

  • MBTask包含實現接口的「任務」
  • MBTaskUI實現接口「IDtsTaskUI」
  • MBForm這是一個Form類。

在Initialize()函數的MBTaskUI中,我重新調用TaskHost對象並將其保存在一個變量中。然後在GetView()函數O發送此TaskHost到我的表單生成

它工作的偉大,我可以利用這個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(日myScript的);」

myScript的和MyConnection的聲明公衆我MBTask

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

我知道這些參數保存,因爲我能得到什麼?。當我重新打開編輯器時,他們回來了。那麼爲什麼當我執行Validate()時它們是空的?

我是否需要從MBTaskUI和MBTask中添加一個指向TaskHost的鏈接?

似乎有什麼東西我不懂這裏...

感謝您的幫助,

萊奧勒瓊。

+0

調查後我明白,UI和Task是完全分離的組件。 那麼,我怎樣才能得到我用窗體(和TaskHost)定義的屬性? 我可以在屬性面板(myScript&myConnection)中看到它們,當我在編輯它之後點擊我的組件。 –

回答

0

我喜歡解決方案:

我實施的系統是正確的。但是如果你想使用複雜的參數(SQLConnection),你必須使用XML保存。

因此,要使用任務的默認保存參數,只能使用簡單的對象,如String和Integer。

而Validate函數不能使用參數,因爲它們還沒有實例化,所以它們是空的。