2016-02-25 32 views
0

我有一個ScriptMain子類(SSIS腳本任務的入口點類)需要在try catch語句內觸發Dts事件警告。提高腳本主類(SSIS腳本任務)的子類中的DTS事件

我遇到的問題是我無法從我的子類訪問Dts。我的猜測是,這將是一個試圖訪問祖父母方法的孫子。作爲解決方案,我繼承了我的子類中的Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase類。但是,這仍然會導致一個實例。

正在嘗試做什麼?

[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] 
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
{ 
    public void Main() 
    { 
    ChildClass hi = new ChildClass(); 
    hi.Execute(); 
    } 
} 

public class ChildClass : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
{ 
    public void Execute() 
    { 
    foreach(var request in createETRequests()) 
    { 
     try{ 
     //do scary stuff 
     } 
     catch 
     { 
     //handle error 
     this.TrackError("oh no!"); 
     } 
    } 
} 
private IEnumerable<TriggeredSend> createETRequests() 
{ 
    TriggeredSend triggeredSendObject = new TriggeredSend(); 
    //do stuff within another foreach including the below return 
     yield return triggeredSendObject; 
} 

private void TrackError(string foo) 
{ 
    //NULL EXCEPTION when called from child instance 
    Dts.Events.FireWarning(2000, "hello there SSIS", foo, String.Empty, 0); 
    } 
} 

回答

0

讓子類向父級冒泡(設置一個公共變量/屬性或其他東西),然後從主腳本中觸發警告。

+0

這是否會與從子類中調用父方法相同?幾乎把TrackError放在父級?我嘗試了這一點,並得到同樣的問題。我剛剛設置一個變量時遇到的問題是try catch在for循環中......我會更新我的問題。 – 40Alpha

+0

您是否已經在調試器中逐步瞭解代碼並看到TrackError函數被調用? –

+0

是的,我有多個斷點設置。在所有情況下,'Dts'都是空的。除非該事件在'ScriptMain'內被源自該類的請求觸發。 – 40Alpha