2013-10-17 59 views
1

我有幾個包需要按特定順序運行。要做到這一點,我有一個額外的包,其餘的運行。
爲了向用戶顯示使用OnError,OnPreExecute和OnPostExecute的進程狀態(正在執行,成功,失敗),我爲事件處理程序添加了事件處理程序。僅針對包級別的SSIS事件處理程序

我沒有意識到,在包的每個部分的每次成功時,它會在啓動相同包的下一部分時返回OnPostExecute,然後返回一個新的OnPreExecute。
這使用戶感到困惑,因爲他認爲一個階段已經完成,但後來發現它仍在執行。

我該如何讓事件處理程序只引用包級事件?
任何其他建議,也將不勝感激。

謝謝!

回答

3

我想出的解決方案是使用事件處理程序中可用的系統變量之一。在每個OnPreExecute,OnPostExecute和OnError作用域中您至少可以找到一個@ [System :: SourceName]變量。

@ [System :: SourceName]包含引發事件的任務的名稱。

使用它可以檢查事件是由頂層包本身,執行包任務之一還是包中的任何其他任務引發的。
這樣,即使我們不能停止多個呼叫,我們也可以控制響應。

例如,很可能您會使用基於@ [System :: SourceName]的優先約束來檢查它是否是整個軟件包名稱。

這不是最優雅的解決方案(它將要求您要麼具有EP任務的一致名稱,要麼在事件處理程序中對它們進行硬編碼),但它起作用。

很遺憾,我無法找到一種方法來防止子包中的事件在主包中被引發。

+0

這很好。我會說這不是不雅,尤其是與其他少數幾個選項相比。 –