日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为SSIS编写自定义数据流组件(DataFlow Component)之进阶篇:自定义编辑器

發(fā)布時間:2024/1/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为SSIS编写自定义数据流组件(DataFlow Component)之进阶篇:自定义编辑器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們之前幾篇討論過自定義數據流組件的一些技術,分別如下

  • 入門篇 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

本節(jié),將繼續(xù)討論最有一個話題,就是說除了像如上那樣提供自定義屬性之外,是否還可以提供一個專門的組件編輯器。

為什么需要說這個問題呢?

如果大家對SSIS數據流組件比較熟悉的話,就知道每個組件都有兩個編輯器。我們分別來看一下。下面我以Excel源為例

選擇“編輯”之后

而選擇“顯示高級編輯器”之后

?

如果看過之前的幾篇文章,大家對于“高級編輯器”應該是比較熟悉的。就是說,如果我們直接在ProvideComponentProperties方法中通過下面這樣的方式添加屬性的話,這些屬性就會出現(xiàn)在高級編輯器的“組件屬性”中。

IDTSCustomProperty90 folder = ComponentMetaData.CustomPropertyCollection.New();
folder.Name = "Folder";

?

那么,我們回到這次討論的問題。就是說,除了這個高級編輯器,另外一個編輯器應該怎么實現(xiàn)呢?當然,前提在于你的組件確實比較復雜,高級編輯器不能滿足要求。(這句話說起來有點拗口,因為高級編輯器按理說應該是很高級的,呵呵)

【注意】我倒是推薦你把所謂的高級編輯器理解為默認編輯器。

?

根據我們之前為自定義任務項(Task)開發(fā)編輯器的經驗,我們不難理解下面的一些步驟

1. 創(chuàng)建一個實現(xiàn)了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){//這里可以創(chuàng)建一個窗體,供用戶去進行編輯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. 然后,在組件類上面進行指定關聯(lián)

[DtsPipelineComponent(ComponentType=ComponentType.SourceAdapter,Description="這是我的一個自定義數據源組件,它可以讀取某個文件夾下面的文件信息",DisplayName="文件夾數據源",UITypeName = "MyDataFlowComponentSample.MyDataSourceUIEditor, MyDataFlowComponentSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5207ee26f0ac0166")]

確實就是如上的步驟。其實并不復雜,對吧。很多技術都是想通的。

下面我來簡單地實現(xiàn)一下這個編輯器。為此我需要添加一個新的窗體。

窗體代碼大致如下

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>/// 這個特殊的構造器可以讓編輯器與具體的組件進行聯(lián)系/// </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){//這里可以創(chuàng)建一個窗體,供用戶去進行編輯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”

到這里為止,我們就為數據源組件實現(xiàn)了獨立的編輯器。

本文由作者:陳希章 于 2009/6/21 14:57:03 發(fā)布在:http://www.cnblogs.com/chenxizhang/
本文版權歸作者所有,可以轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
更多博客文章,以及作者對于博客引用方面的完整聲明以及合作方面的政策,請參考以下站點:陳希章的博客中心

轉載于:https://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507775.html

總結

以上是生活随笔為你收集整理的为SSIS编写自定义数据流组件(DataFlow Component)之进阶篇:自定义编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。