为SSIS编写自定义任务项(Task)之进阶篇

上一篇,我们演示了如何编写一个简单的Task,并将其部署到SSIS中去使用。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
namespace MySSISTaskSample
{
    [DtsTask(
        Description="这是我的一个自定义XML任务,"+
            "它与标准的XML任务的区别就在于可以自动处理命名空间问题",
        DisplayName="超强XML任务",
        TaskContact="陈希章:http://www.xizhang.com"
        )]
    public class MyXMLTask:Task
    {

        /// 
        /// 这个方法真正执行操作
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
   
   
        public override DTSExecResult Execute(Connections connections, 
            VariableDispenser variableDispenser, 
            IDTSComponentEvents componentEvents, 
            IDTSLogging log, object transaction)
        {
            
            
            MessageBox.Show("我在工作了");
            return base.Execute(connections, variableDispenser, componentEvents, log, transaction);
        }
    }
}

上面的代码很简单,这个任务在执行的时候仅仅显示一个对话框。这显然是不够的,我们在这一篇讲解一下,如何为任务添加自定义编辑视图,并且根据用户的设置执行任务。

 

1. 添加一个引用

image

2. 添加一个类型

using Microsoft.SqlServer.Dts.Runtime.Design;
    public class MyTaskUI : IDtsTaskUI
    {

        #region IDtsTaskUI 成员

        public void Delete(IWin32Window parentWindow)
        {
            throw new NotImplementedException();
        }

        public ContainerControl GetView()
        {
            throw new NotImplementedException();
        }

        public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)
        {
            throw new NotImplementedException();
        }

        public void New(IWin32Window parentWindow)
        {
            throw new NotImplementedException();
        }

        #endregion
    }

3. 添加一个窗体

image

为该窗体添加一个特殊的构造器。以便该窗体与宿主环境可以关联。主要是属性的读写。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using Microsoft.SqlServer.Dts.Runtime;

namespace MySSISTaskSample
{
    public partial class MyTaskEditor : Form
    {
        public MyTaskEditor()
        {
            InitializeComponent();
        }

        private TaskHost taskHost = null;
        public MyTaskEditor(TaskHost host):this()
        {
            taskHost = host;//这里接受传递过来的宿主
        }

    }
}

 

4. 实现MyTaskUI

    public class MyTaskUI : IDtsTaskUI
    {

        private TaskHost host = null;

        #region IDtsTaskUI 成员

        public void Delete(IWin32Window parentWindow)
        {

        }

        public ContainerControl GetView()
        {
            return new MyTaskEditor(host);
        }

        public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)
        {
            host = taskHost;
        }

        public void New(IWin32Window parentWindow)
        {

        }

        #endregion
    }


 

5. 将该UI与我们的任务进行关联。

    [DtsTask(
        Description="这是我的一个自定义XML任务,"+
            "它与标准的XML任务的区别就在于可以自动处理命名空间问题",
        DisplayName="超强XML任务",
        TaskContact="陈希章:http://www.xizhang.com",
        UITypeName = "MySSISTaskSample.MyTaskUI,MySSISTaskSample,"+
    "Version=1.0.0.0,Culture=Neutral,PublicKeyToken=44246bec88cb6c06"
        )]
    public class MyXMLTask:Task
    {

        /// 
        /// 这个方法真正执行操作
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
   
   
        public override DTSExecResult Execute(Connections connections, 
            VariableDispenser variableDispenser, 
            IDTSComponentEvents componentEvents, 
            IDTSLogging log, object transaction)
        {
            
            
            MessageBox.Show("我在工作了");
            return base.Execute(connections, variableDispenser, componentEvents, log, transaction);
        }
    }

这里的关键,在于要完整地描述出来UI的名称。里面有一个PublicKeyToken,可以通过下面这样的方式取得

image

6. 重新生成,部署

为了方便部署,我们可以编写如下的生成后事件

image

 

7. 测试该任务

image

现在,我们去点击“超级XML任务”,右键中选择“编辑”

image

我们欣喜地看到,虽然我们的窗体没有任何内容,但无论如何,它已经显示出来了

 

我们下一篇还要探讨到底如何设计这个编辑界面

本文由作者: 陈希章 于 2009/6/20 17:16:40 发布在: http://www.cnblogs.com/chenxizhang/
本文版权归作者所有,可以转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
更多博客文章,以及作者对于博客引用方面的完整声明以及合作方面的政策,请参考以下站点: 陈希章的博客中心
本文是使用 博客同步和管理系统自动于2009/6/20 17:16:45 从 陈希章@博客园 同步过来的。原文地址: http://www.cnblogs.com/chenxizhang/archive/2009/06/20/1507423.html ,发表于2009/6/20 9:17:00.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值