Como criar uma tarefa personalizada Data Transformation Services usando Visual translation from VPE for Csharp .NET

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 326909
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Este artigo descreve como criar uma Data Transformation Services (DTS) tarefas personalizado usando o Microsoft Visual translation from VPE for Csharp. NET.

Você pode estender os recursos DTS criando tarefas personalizadas usando o Visual translation from VPE for Csharp. NET. Depois de instalar e registrar tarefas personalizado, ela aparece no DTS Designer como as tarefas DTS padrão. Além disso, você pode usar o .NET Framework inteiro para criar tarefas personalizadas do DTS.

Juntamente com as etapas para criar um DTS tarefas personalizado, este artigo também incluem as seguintes informações:
  • Código de exemplo para a tarefa personalizada, que está na seção "Criar, registrar e instalar a tarefa personalizada" neste artigo.
  • Uma descrição dos recursos adicionais que você pode implementar usando uma tarefa personalizada.
  • Referências a várias ferramentas que você pode usar durante o processo de desenvolvimento. (A menos que indicado em contrário, essas ferramentas estão incluídas no Visual Studio .NET e execute-los no prompt de comando Visual Studio. NET.)
back to the top

Criar um Runtime Callable Wrapper para DTSpkg.dll

Se um componente do cliente baseado no Microsoft Windows .NET computador acessa um COM, você deve usar um invólucro de código não gerenciado (que o COM componente contém). Esse tipo de wrapper é um runtime callable wrapper (RCW) e criá-los das informações de biblioteca de tipo que expõe o Dtspkg.dll. Você pode usar a ferramenta Type Library Importer (Tlbimp. exe) para criar o RCW:
Tlbimp.exe "C:\Arquivos de Programas\Microsoft SQL Server\80\Tools\Binn\dtspkg.dll" /out:Microsoft.SQLServer.DTSPkg80.dll /keyfile:DTSPkg.snk
O / keyfile parâmetro assina Microsoft.SQLServer.DTSPkg80.dll com um nome forte usando o par de chaves público ou particular no DTSPkg.snk. Para criar o par de chaves está presente no DTSPkg.snk, use o Strong Name Tool (sn.exe):
sn.exe -k DTSPkg.snk
Porque você deve instalar o RCW no global assembly cache (GAC), você deve usar um nome forte como outros assemblies no GAC.

back to the top

Instalar o RCW no cache de assembly global

Instalar o RCW no GAC usando o global assembly Cache Tool (GACutil.exe):
/i Gacutil.exe Microsoft.SQLServer.DTSPkg80.dll
Depois de instalar o RCW, você pode adicioná-lo como uma referência a um projeto Visual Studio.NET translation from VPE for Csharp Class Library.

back to the top

Escrever o código de encanamento para a tarefa personalizada

O código de direcionamento principalmente manipula o registro de tarefas personalizado. Os assemblies .NET não expõem DllRegisterServer e fazer DllUnregisterServer pontos de entrada como componentes COM, mas você pode usar a classe ComRegisterFunctionAttribute para executar registro da tarefa e cancelamento de registro. Essa classe é uma parte do namespace System.Runtime.InteropServices .

Primeiro, você deve especificar um GUID e um identificador programático (ProgID) para a classe de tarefas personalizado. Você pode usar GUIDgen.exe para criar um GUID. Adicione o seguinte código na linha de antes da declaração da classe de tarefas personalizado:
[Guid("A39847F3-5845-4459-A25E-DE73A8E3CD48"), ComVisible(true)][ProgId("DTS.SimpleTask")]public class SimpleTask : CustomTask{	//implementation of custom task}				
o código a seguir demonstra a implementação de uma função para executar o registro da tarefa. O código completo para a função é apresentado na seção "Criar, registro e instalar a tarefa personalizada" neste artigo.

[System.Runtime.InteropServices.ComRegisterFunctionAttribute()]static void RegisterServer(Type t){	//code to register custom task }				
A função de registro adiciona a seguinte subchave no Registro:
HKEY_CLASSES_ROOT\CLSID\A39847F3-5845-4459-A25E-DE73A8E3CD48\Implemented Categories\ {10020200-EB1C-11CF-AE6E-00AA004A34D5}
10020200-EB1C-11CF-AE6E-00AA004A34D5 é a identificação de classe (CLSID) do objeto pacote DTS . Você deve fazer isso porque todas as tarefas personalizadas implementam a interface CustomTask . A função de registro, em seguida, adiciona a seguinte subchave no Registro:
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\80\DTS\Enumeration\Tasks\A39847F3-5845-4459-A25E-DE73A8E3CD48
A seguinte subchave lista o conteúdo do DTS cache de tarefas, que faz com que a tarefa personalizada para aparecer no DTS Designer:
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\80\DTS\Enumeration\Tasks\
O código a seguir demonstra a implementação da função unregister para executar a remoção de tarefa. A função unregister é parte da classe ComUnregisterFunctionAttribute na biblioteca de classes .NET Framework. Para exibir a amostra de código completo para esta função, consulte o "criar, registrar e instalar a personalizar tarefas" seção neste artigo:
[System.Runtime.InteropServices.ComUnregisterFunctionAttribute()]static void UnregisterServer(Type t){	//code to unregister custom task }				
a função de cancelamento de registro remove a tarefa o cache de tarefas de DTS, excluindo a seguinte subchave do Registro:
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\80\DTS\Enumeration\Tasks\A39847F3-5845-4459-A25E-DE73A8E3CD48
Finalmente, a tarefa personalizada é exposta como um componente COM de interface dupla. Você criar uma interface padrão de todos os campos públicos, non-static, propriedades e métodos da classe. Adicione a seguinte linha de código após as instruções USING no arquivo de origem de tarefas personalizado:
[assembly:ClassInterface(ClassInterfaceType.AutoDual)]				
o código de direcionamento agora é concluído.

back to the top

Adicionar a funcionalidade para a tarefa personalizada

A seção "Criar, registro e instalar a tarefa personalizada" do artigo contém código para uma tarefa personalizada do DTS simples. A tarefa possui duas propriedades: nome e Descrição . Quando você executa a tarefa, o valor para a propriedade Description aparece em uma caixa de mensagem. Este exemplo representa o código mínimo que você deve usar para ter uma tarefa personalizada de DTS funcional. No entanto, você pode criar uma interface de usuário personalizado ao implementar a interface CustomTaskUI , mas que está além do escopo deste artigo. Implementando apenas a interface CustomTask , DTS Designer cria uma interface de usuário padrão para tarefas personalizado.

Todas as tarefas personalizadas do DTS implementam a interface CustomTask . A interface CustomTask é composta de duas propriedades, uma coleção e um método:
  • As propriedades de nome e Descrição .
  • A coleção de Propriedades .
  • O método execute .
Todas as tarefas personalizadas devem implementar as propriedades, a coleção de Propriedades e o método execute .

a propriedade name :

A propriedade Name identifica a tarefa no pacote DTS. Quando você coloca a tarefa na superfície de DTS Designer, o DTS Designer atribui um nome para a tarefa. Para a tarefa personalizada de exemplo, você pode modificar a propriedade Name . Isso é para fins de ilustração somente como manuais online do SQL Server recomenda que você não expõe a propriedade Name para o usuário porque isso desassocia a sua etapa da tarefa. É o seguinte trecho do tópico "DTS personalizar tarefas Fundamentals" nos manuais online do SQL Server:
É recomendável que você não expõe a propriedade Name , especialmente em um modo de leitura/gravação. DTS Designer atribui um nome exclusivo para a tarefa quando você coloca o ícone de tarefa da planilha de design. Se você alterar o valor de Name , DTS Designer será procure a tarefa usando o nome antigo e falhar quando ele não é possível localizá-lo.
Para contornar esse problema, altere a propriedade TaskName da etapa que pertence a tarefa para refletir o novo nome usando o recurso desconectado Editar no DTS Designer.

propriedade description :

Com a propriedade Description , você pode adicionar uma descrição significativa para a tarefa.

coleção de propriedades :

A coleção de Propriedades contém objetos de propriedade que identificam as propriedades de tarefas personalizado. Definindo esta opção para retornar nulo, o provedor de propriedades DTS padrão é usado. Grade de propriedades para a tarefa aparece no DTS Designer, e ele obtém suas informações da coleção Properties .

método Execute :

O método execute contém a funcionalidade de tarefas personalizado. No exemplo a Descrição , o método execute exibe o valor da propriedade Descrição da tarefa em uma caixa de mensagem. O método execute tem os quatro parâmetros a seguir:
  • pPackage : esta é uma referência ao objeto DTS Package2 pai. Você pode usar esse objeto para obter referências a outros objetos no pacote e modificar suas propriedades.
  • pPackageEvents : esta é uma referência para os eventos de um objeto Package2 . Você pode usar esse objeto para gerar eventos.
  • pPackageLog : esta é uma referência a um objeto PackageLog que representa o arquivo de log do pacote. Você pode usar esse objeto para gravar o log se você tiver ativado o log de pacote do DTS.
  • pTaskResult : Isso mantém o resultado da execução de pacote. Você pode ver os códigos de retorno para este parâmetro no tópico "DTSTaskExecResult" nos manuais online do SQL Server.
back to the top

Compilar, registrar e instalar a tarefa personalizada

Como você deve adicionar a tarefa personalizada no GAC, você precisa usar um nome forte. Como o RCW, você pode criar um arquivo de nome forte usando a ferramenta Strong Name:
sn.exe -k CustomTask.snk
Para criar o assembly de tarefas personalizado com o nome forte, edite a seguinte linha no arquivo AssemblyInfo.cs:
[assembly: AssemblyKeyFile("<path to CustomTask.snk>")]				
agora criar a tarefa usando o Visual Studio. NET. A saída é um .NET assembly:
regasm.exe CustomTask.dll
Observação : por executar a ferramenta de assembly do Registro (regasm.exe), necessários entradas do Registro são adicionadas que permitem DTS criar o .NET personalizado transparente classe da tarefa.

A última etapa no desenvolvimento de uma tarefa personalizada do DTS é instalá-lo no GAC usando o global assembly Cache Tool (GACutil.exe):
/i Gacutil.exe CustomTask.dll
Para usar tarefas personalizado, abra DTS Designer no SQL Server Enterprise Manager e coloque a tarefa personalizada na superfície de design. Defina a propriedade Description e, em seguida, execute o pacote. O resultado é uma caixa de mensagem exibe o valor para a propriedade Description da tarefa.

O procedimento a seguir contém o código para o exemplo de tarefas personalizado que é mencionado no artigo. Para criar e executar a tarefa personalizada, execute estas etapas:
  1. Crie o RCW para Dtspkg.dll. Esse procedimento é explicado na seção "Criar um Runtime Callable Wrapper para Dtspkg.dll" deste artigo.
  2. Instale o RCW no GAC. Esse procedimento é explicado na seção "Instalar o RCW no global assembly cache" neste artigo.
  3. Criar uma biblioteca de classe do Visual translation from VPE for Csharp .NET novo projeto.
  4. Adicione o seguinte código ao arquivo de classe. Use o GUID valor usando GUIDgen.exe e, em seguida, cole-o no arquivo de origem:
    using System;using System.Runtime.InteropServices;using Microsoft.SQLServer.DTSPkg80;using Microsoft.Win32;using System.Windows.Forms;[assembly:ClassInterface(ClassInterfaceType.AutoDual)]namespace DTSCustomTask{		[Guid("6D1C10A0-0BF0-4795-91A3-ADF258DCD528"), ComVisible(true)] //GUID is created by using GUIDGEN.EXE	[ProgId("DTS.SimpleCustomTask")]	public class SimpleCustomTask : CustomTask	{		private string name;		private string description;		public SimpleCustomTask()		{			name = "";			description = "SimpleCustomTask description";		}		public void Execute(object pPackage, object pPackageEvents, object pPackageLog, ref Microsoft.SQLServer.DTSPkg80.DTSTaskExecResult pTaskResult) 		{				try 		  { 			  DoExecute(pPackage, pPackageEvents, pPackageLog, ref pTaskResult); 		  } 		  finally 		  { 			  if ( pPackageLog != null && Marshal.IsComObject(pPackageLog) ) 				  Marshal.ReleaseComObject(pPackageLog); 			  if ( pPackageEvents != null && Marshal.IsComObject(pPackageEvents) ) 				  Marshal.ReleaseComObject(pPackageEvents); 		  } 		} 					public void DoExecute(object pPackage, object pPackageEvents, object pPackageLog, ref Microsoft.SQLServer.DTSPkg80.DTSTaskExecResult pTaskResult) 		{ 			//Assume failure at the outset 			pTaskResult = DTSTaskExecResult.DTSTaskExecResult_Failure; 			try 			{					Package2 package = (Package2) pPackage; 				PackageEvents packageEvents = (PackageEvents) pPackageEvents; 				PackageLog packageLog = (PackageLog) pPackageLog; 				MessageBox.Show(description); 			} 				//First catch COM exceptions and then all other exceptions 			catch(System.Runtime.InteropServices.COMException e) 			{ 				Console.WriteLine(e); 			} 			catch(System.Exception e) 			{ 				Console.WriteLine(e); 			} 			//Return success 			pTaskResult = DTSTaskExecResult.DTSTaskExecResult_Success; 		}		public string Description		{			get { return this.description; }			set { this.description = value; }		}		public string Name		{			get { return name; }			set { this.name = value; }		}				public Microsoft.SQLServer.DTSPkg80.Properties Properties		{			get { return null; }		}		[System.Runtime.InteropServices.ComVisible(false)]		override public string ToString()		{			return base.ToString();		}			const string TASK_CACHE = "Software\\Microsoft\\Microsoft SQL Server\\80\\DTS\\Enumeration\\Tasks";		const string CATID_DTSCustomTask = "{10020200-EB1C-11CF-AE6E-00AA004A34D5}";		//Registration function for custom task.		[System.Runtime.InteropServices.ComRegisterFunctionAttribute()]		static void RegisterServer(Type t)		{			try			{								string guid = "{" + t.GUID.ToString() + "}";				guid = guid.ToUpper();				Console.WriteLine("RegisterServer {0}", guid);				RegistryKey root;				RegistryKey rk;				RegistryKey nrk;								// Add COM Category in HKEY_CLASSES_ROOT				root = Registry.ClassesRoot;				rk = root.OpenSubKey("CLSID\\" + guid + "\\Implemented Categories", true);				nrk = rk.CreateSubKey(CATID_DTSCustomTask);				nrk.Close();				rk.Close();				root.Close();								// Add to DTS Cache in HKEY_CURRENT_USER				root = Registry.CurrentUser;				rk = root.OpenSubKey(TASK_CACHE, true);				nrk = rk.CreateSubKey(guid);				nrk.SetValue("", t.FullName);								nrk.Close();				rk.Close();				root.Close();				SimpleCustomTask ct = new SimpleCustomTask();				root = Registry.ClassesRoot;				rk = root.OpenSubKey("CLSID\\" + guid, true);				rk.SetValue("DTSTaskDescription", ct.description);				nrk.Close();				rk.Close();				root.Close();			}			catch(Exception e)			{				System.Console.WriteLine(e.ToString());			}		}		//Unregistration function for custom task		[System.Runtime.InteropServices.ComUnregisterFunctionAttribute()]		static void UnregisterServer(Type t)		{			try			{				string guid = "{" + t.GUID.ToString() + "}";				guid = guid.ToUpper();				Console.WriteLine("UnregisterServer {0}", guid);				RegistryKey root;				RegistryKey rk;				// Delete from DTS Cache in HKEY_CURRENT_USER				root = Registry.CurrentUser;				rk = root.OpenSubKey(TASK_CACHE, true);				rk.DeleteSubKey(guid, false);				rk.Close();				root.Close();				//Delete task related keys from HKEY_CLASSES_ROOT				root = Registry.ClassesRoot;				rk = root.OpenSubKey("CLSID\\" + guid + "\\Implemented Categories", true);				rk.DeleteSubKey(CATID_DTSCustomTask, false);				rk.Close();				root.Close();											root = Registry.ClassesRoot;				rk = root.OpenSubKey("CLSID\\" + guid, true);				rk.DeleteValue("DTSTaskDescription");				rk.Close();				root.Close();				root = Registry.ClassesRoot;				rk = root.OpenSubKey("CLSID\\" + guid, true);				rk.DeleteSubKey(guid, false);				rk.Close();				root.Close();						}			catch(Exception e)			{				System.Console.WriteLine(e.ToString());			}		}		}}					
  5. Adicionar uma referência ao RCW que você criou na etapa 1 e, em seguida, adicione uma referência a System.Windows.Forms.dll .
  6. Crie tarefas personalizadas. O resultado é um assembly .NET.
  7. Registrar e instalar o assembly de tarefas personalizado. Esse procedimento é explicado na seção "Criar, registro e instalar a tarefa personalizada" neste artigo.
  8. Criar um novo pacote DTS usando DTS Designer no SQL Server Enterprise Manager e, em seguida, coloque a tarefa na superfície de design.
  9. Execute o pacote.
back to the top

Informações adicionais

Remover uma tarefa personalizada

Para remover uma tarefa personalizada, removê-lo do GAC e, em seguida, usar a ferramenta de assembly do Registro para remover as entradas de registro apropriadas:
/u Gacutil.exe CustomTask
regasm.exe /u "CustomTask.dll"
GACutil.exe espera que o nome do assembly como ele aparece no cache e não o nome do arquivo real. Para verificar esse nome, inicie o Windows Explorer e, em seguida, localize a pasta %SystemRoot%\Assembly.

back to the top

Suporte de log de pacote

O método execute contém o parâmetro pPackageLog que é uma referência ao arquivo de log de pacote. Para gravar o arquivo de log, chame PackageLog.WriteTaskRecord() no método execute . Esse método grava uma mensagem definida pelo usuário para o arquivo de log de pacote e tabelas do SQL Server. No SQL Server Enterprise Manager, certifique-se que você habilite logon as propriedades do pacote DTS. Após ativar o log, use o código para verificar que o log está ativado antes de realmente escrever para o log:
if !(pPackageLog == null){	pPackageLog.WriteTaskRecord(0, "Finished executing custom task.");}				
back to the top

Variáveis globais

Você pode usar a referência ao objeto Package2 no método execute para acessar variáveis globais. Use o seguinte translation from VPE for Csharp Visual código de exemplo .NET para fazer isso:
string s = (string)package.GlobalVariables.Item("GlobalVariableName").Value;				
back to the top

Alterar as propriedades de outras tarefas

Você pode usar a referência ao objeto Package2 no método execute para alterar as propriedades de outras tarefas DTS. O código de Visual translation from VPE for Csharp .NET a seguir define a instrução Transact-SQL que executa a tarefa Execute SQL:
Task task = package.Tasks.Item("TaskName");CustomTask cutask = task.CustomTask;cutask.Properties.Item("SQLStatement").Value = "select * from orders";				
back to the top

Alterar propriedades de tarefa personalizados por meio de uma tarefa de Script ActiveX

Como as tarefas DTS padrão, você pode alterar as propriedades de uma tarefa personalizada usando uma tarefa de Script ActiveX. O exemplo Visual Basic script a seguir demonstra duas maneiras de alterar a propriedade Description de tarefas personalizado:
Function Main()	set pkg = DTSGlobalVariables.Parent	set tsk = pkg.Tasks("CustomTaskName")	set cus = tsk.CustomTask	'using the Properties collection to change the Description property	tsk.Properties("Description").Value = "Description of custom task"	'directly referencing the property also works	tsk.Description ="Description of custom task"	Main = DTSTaskExecResult_SuccessEnd Function				
back to the top

Eventos

Para obter mais informações sobre como manipular eventos de pacote DTS, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
319985Como manipular eventos de pacote Data Transformation Services no Visual translation from VPE for Csharp .NET
back to the top

Modelo de Threading

Não é necessário que executar tarefas personalizadas que você criou usando Visual translation from VPE for Csharp .NET no thread principal. Se você executar um pacote que contém uma tarefa personalizada com uma tarefa Executar pacote, não é necessário usar o interno ou as etapas de pacote externo para executar no thread principal.

back to the top
Referências
Para exemplos de tarefas personalizados escritos em versões anteriores do Microsoft Visual Basic e do Microsoft Visual C++, visite o seguinte da Microsoft: back to the top
DTS Data Transformation Services

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 326909 - Última Revisão: 12/07/2015 12:03:41 - Revisão: 5.6

Microsoft SQL Server 2000 64-bit Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowtomaster KB326909 KbMtpt
Comentários