日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

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

  • 入門篇 http://www.cnblogs.com/chenxizhang/archive/2009/06/20/1507467.html
  • 數(shù)據(jù)流組件 http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507631.html
  • 如何在自定義數(shù)據(jù)源組件中限制用戶的更改? http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507645.html
  • 如何在自定義數(shù)據(jù)源組件中為自定義屬性提供UIEditor http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507680.html
  • 如何為自定義屬性提供下拉選項(xiàng) http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507686.html
  • 如何為自定義屬性提供表達(dá)式綁定支持 http://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507699.html

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

為什么需要說這個(gè)問題呢?

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

選擇“編輯”之后

而選擇“顯示高級(jí)編輯器”之后

?

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

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

?

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

【注意】我倒是推薦你把所謂的高級(jí)編輯器理解為默認(rèn)編輯器。

?

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

1. 創(chuàng)建一個(gè)實(shí)現(xiàn)了IDTSComponentUI接口的類型.該接口位于Microsoft.SqlServer.Dts.Pipeline.Design這個(gè)命名空間

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)建一個(gè)窗體,供用戶去進(jìn)行編輯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. 然后,在組件類上面進(jìn)行指定關(guān)聯(lián)

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

確實(shí)就是如上的步驟。其實(shí)并不復(fù)雜,對(duì)吧。很多技術(shù)都是想通的。

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

窗體代碼大致如下

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>/// 這個(gè)特殊的構(gòu)造器可以讓編輯器與具體的組件進(jìn)行聯(lián)系/// </summary>/// <param name="meta">這個(gè)代表了組件的元數(shù)據(jù)</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";//作為演示目的,這里直接用代碼給某個(gè)屬性賦值}} }

準(zhǔn)備好這個(gè)窗體之后,我們?cè)倩剡^來修改一下UIEditor這個(gè)類型。

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)建一個(gè)窗體,供用戶去進(jìn)行編輯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;//這個(gè)dtsComponentMetadata可以連接到組件的元數(shù)據(jù),這樣就可以傳遞給編輯器窗口,進(jìn)行屬性的讀寫}public void New(System.Windows.Forms.IWin32Window parentWindow){}#endregion}

?

重新編譯項(xiàng)目,然后部署。

接下來我們?cè)贐I Studio中來看一下效果。我們選中組件,然后右鍵,編輯。果然看到了我們的窗體

點(diǎn)擊“確定”按鈕之后,該組件的Folder屬性也確實(shí)修改為了“E:\Temp”

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

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

轉(zhuǎn)載于:https://www.cnblogs.com/chenxizhang/archive/2009/06/21/1507775.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。