为SSIS编写自定义数据流组件(DataFlow Component)之进阶篇:自定义编辑器
我們之前幾篇討論過自定義數據流組件的一些技術,分別如下
- 入門篇 http://www.cnblogs.com/chenxizhang/archive/2009/06/20/1507467.html
- 數據流組件 http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507631.html
- 如何在自定義數據源組件中限制用戶的更改? http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507645.html
- 如何在自定義數據源組件中為自定義屬性提供UIEditor http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507680.html
- 如何為自定義屬性提供下拉選項 http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507686.html
- 如何為自定義屬性提供表達式綁定支持 http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507699.html
本節,將繼續討論最有一個話題,就是說除了像如上那樣提供自定義屬性之外,是否還可以提供一個專門的組件編輯器。
為什么需要說這個問題呢?
如果大家對SSIS數據流組件比較熟悉的話,就知道每個組件都有兩個編輯器。我們分別來看一下。下面我以Excel源為例
選擇“編輯”之后
而選擇“顯示高級編輯器”之后
?
如果看過之前的幾篇文章,大家對于“高級編輯器”應該是比較熟悉的。就是說,如果我們直接在ProvideComponentProperties方法中通過下面這樣的方式添加屬性的話,這些屬性就會出現在高級編輯器的“組件屬性”中。
IDTSCustomProperty90 folder = ComponentMetaData.CustomPropertyCollection.New();
folder.Name = "Folder";
?
那么,我們回到這次討論的問題。就是說,除了這個高級編輯器,另外一個編輯器應該怎么實現呢?當然,前提在于你的組件確實比較復雜,高級編輯器不能滿足要求。(這句話說起來有點拗口,因為高級編輯器按理說應該是很高級的,呵呵)
【注意】我倒是推薦你把所謂的高級編輯器理解為默認編輯器。
?
根據我們之前為自定義任務項(Task)開發編輯器的經驗,我們不難理解下面的一些步驟
1. 創建一個實現了IDTSComponentUI接口的類型.該接口位于Microsoft.SqlServer.Dts.Pipeline.Design這個命名空間
public class MyDataSourceUIEditor : IDtsComponentUI {#region IDtsComponentUI 成員public void Delete(System.Windows.Forms.IWin32Window parentWindow){}public bool Edit(System.Windows.Forms.IWin32Window parentWindow, Microsoft.SqlServer.Dts.Runtime.Variables variables, Microsoft.SqlServer.Dts.Runtime.Connections connections){//這里可以創建一個窗體,供用戶去進行編輯return true;}public void Help(System.Windows.Forms.IWin32Window parentWindow){System.Windows.Forms.Help.ShowHelp(null, "http://www.xizhang.com");}public void Initialize(IDTSComponentMetaData90 dtsComponentMetadata, IServiceProvider serviceProvider){}public void New(System.Windows.Forms.IWin32Window parentWindow){}#endregion}2. 然后,在組件類上面進行指定關聯
[DtsPipelineComponent(ComponentType=ComponentType.SourceAdapter,Description="這是我的一個自定義數據源組件,它可以讀取某個文件夾下面的文件信息",DisplayName="文件夾數據源",UITypeName = "MyDataFlowComponentSample.MyDataSourceUIEditor, MyDataFlowComponentSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5207ee26f0ac0166")]
確實就是如上的步驟。其實并不復雜,對吧。很多技術都是想通的。
下面我來簡單地實現一下這個編輯器。為此我需要添加一個新的窗體。
窗體代碼大致如下
using System; using System.Windows.Forms; using Microsoft.SqlServer.Dts.Pipeline.Wrapper; using Microsoft.SqlServer.Dts.Runtime;namespace MyDataFlowComponentSample {public partial class MyDatasourceUIEditorForm : Form{public MyDatasourceUIEditorForm(){InitializeComponent();}IDTSComponentMetaData90 metaValue;Variables vars;Connections conns;/// <summary>/// 這個特殊的構造器可以讓編輯器與具體的組件進行聯系/// </summary>/// <param name="meta">這個代表了組件的元數據</param>/// <param name="variables">這是包中的變量</param>/// <param name="connections">這是包中的連接管理器</param>public MyDatasourceUIEditorForm(IDTSComponentMetaData90 meta, Variables variables, Connections connections): this(){metaValue = meta;vars = variables;conns = connections;}private void btOk_Click(object sender, EventArgs e){metaValue.CustomPropertyCollection["Folder"].Value=@"E:\Temp";//作為演示目的,這里直接用代碼給某個屬性賦值}} }準備好這個窗體之后,我們再回過來修改一下UIEditor這個類型。
public class MyDataSourceUIEditor : IDtsComponentUI {#region IDtsComponentUI 成員public void Delete(System.Windows.Forms.IWin32Window parentWindow){}public bool Edit(System.Windows.Forms.IWin32Window parentWindow, Microsoft.SqlServer.Dts.Runtime.Variables variables, Microsoft.SqlServer.Dts.Runtime.Connections connections){//這里可以創建一個窗體,供用戶去進行編輯using (MyDatasourceUIEditorForm form = new MyDatasourceUIEditorForm(meta, variables, connections)){return form.ShowDialog() == DialogResult.OK;}}public void Help(System.Windows.Forms.IWin32Window parentWindow){System.Windows.Forms.Help.ShowHelp(null, "http://www.xizhang.com");}private IDTSComponentMetaData90 meta;public void Initialize(IDTSComponentMetaData90 dtsComponentMetadata, IServiceProvider serviceProvider){meta = dtsComponentMetadata;//這個dtsComponentMetadata可以連接到組件的元數據,這樣就可以傳遞給編輯器窗口,進行屬性的讀寫}public void New(System.Windows.Forms.IWin32Window parentWindow){}#endregion}?
重新編譯項目,然后部署。
接下來我們在BI Studio中來看一下效果。我們選中組件,然后右鍵,編輯。果然看到了我們的窗體
點擊“確定”按鈕之后,該組件的Folder屬性也確實修改為了“E:\Temp”
到這里為止,我們就為數據源組件實現了獨立的編輯器。
本文由作者:陳希章 于 2009/6/21 14:57:03 發布在:http://www.cnblogs.com/chenxizhang/本文版權歸作者所有,可以轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
更多博客文章,以及作者對于博客引用方面的完整聲明以及合作方面的政策,請參考以下站點:陳希章的博客中心
轉載于:https://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507775.html
總結
以上是生活随笔為你收集整理的为SSIS编写自定义数据流组件(DataFlow Component)之进阶篇:自定义编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解向日葵甘特之六——定义数据列
- 下一篇: MSSQL数据库C#操作类(SQLHEL