Desarrollar una interfaz de usuario para una tarea personalizada

Se aplica a:SQL Server SSIS Integration Runtime en Azure Data Factory

El modelo de objetos de Integration Services permite a los desarrolladores de tareas personalizadas crear con facilidad una interfaz de usuario personalizada para una tarea que posteriormente se puede integrar y mostrar en SQL Server Data Tools (SSDT). La interfaz de usuario puede proporcionar información útil al usuario en el Diseñador de SSIS y guiar a los usuarios para configurar correctamente las propiedades y los valores de la tarea personalizada.

El desarrollo de una interfaz de usuario personalizada para una tarea implica la utilización de dos clases importantes. En la siguiente tabla se describen estas clases.

Clase Descripción
DtsTaskAttribute Un atributo que identifica una tarea administrada y proporciona información en tiempo de diseño a través de sus propiedades para controlar cómo el Diseñador de SSIS muestra e interactúa con el objeto.
IDtsTaskUI Una interfaz que utiliza la tarea para asociar ésta a su interfaz de usuario personalizada.

En esta sección se describe el rol del atributo DtsTaskAttribute y la interfaz IDtsTaskUI cuando se está desarrollando una interfaz de usuario para una tarea personalizada y se proporcionan detalles sobre cómo crear, integrar, implementar y depurar la tarea en el Diseñador de SSIS.

El Diseñador SSIS proporciona varios puntos de entrada a la interfaz de usuario de la tarea: el usuario puede seleccionar Editar en el menú contextual, hacer doble clic en la tarea o hacer clic en el vínculo Mostrar editor en la parte inferior de la hoja de propiedades. Cuando el usuario tiene acceso a uno de estos puntos de entrada, el Diseñador SSIS busca y carga el ensamblado que contiene la interfaz de usuario para la tarea. Ésta es responsable de la creación del cuadro de diálogo de propiedades que se muestra al usuario en SQL Server Data Tools (SSDT).

Una tarea y su interfaz de usuario son entidades independientes. Se deben implementar en ensamblados independientes para reducir el trabajo de localización, implementación y mantenimiento. La DLL de la tarea no carga, llama ni generalmente contiene ningún conocimiento de su interfaz de usuario, salvo la información que se incluye en los valores de atributo DtsTaskAttribute codificados en la tarea. Ésta es la única manera en que se asocian una tarea y su interfaz de usuario.

El atributo DtsTask

El atributo DtsTaskAttribute se incluye en el código de clase de la tarea para asociar una tarea a su interfaz de usuario. El Diseñador SSIS utiliza las propiedades del atributo para determinar cómo se muestra la tarea en el diseñador. Estas propiedades incluyen el nombre para mostrar y el icono, si existe.

En la tabla siguiente se describen las propiedades del atributo DtsTaskAttribute.

Propiedad Descripción
DisplayName Muestra el nombre de tarea en el cuadro de herramientas Flujo de control.
Description La descripción de la tarea (se hereda de DtsLocalizableAttribute). Esta propiedad se muestra en la información sobre herramientas.
IconResource El icono que se muestra en el Diseñador SSIS.
RequiredProductLevel Si se utiliza, establézcala en uno de los valores de la enumeración DTSProductLevel. Por ejemplo: RequiredProductLevel = DTSProductLevel.None.
TaskContact Contiene información de contacto para las ocasiones en que la tarea requiere soporte técnico.
TaskType Asigna un tipo a la tarea.
Attribute.TypeId Cuando se implementa en una clase derivada, obtiene un identificador único para este atributo. Para obtener más información, vea la propiedad Attribute.TypeID en la biblioteca de clases de .NET Framework.
UITypeName El nombre de tipo del ensamblado que utiliza el Diseñador SSIS para cargar el ensamblado. Esta propiedad se utiliza para buscar el ensamblado de interfaz de usuario para la tarea.

En el ejemplo de código siguiente se muestra DtsTaskAttribute tal como aparecería, codificado sobre la definición de clase.

using System;  
using Microsoft.SqlServer.Dts.Runtime;  
namespace Microsoft.SSIS.Samples  
{  
  [DtsTask  
  (  
   DisplayName = "MyTask",  
   IconResource = "MyTask.MyTaskIcon.ico",  
   UITypeName = "My Custom Task," +  
   "Version=1.0.0.0," +  
   "Culture = Neutral," +  
   "PublicKeyToken = 12345abc6789de01",  
   TaskType = "PackageMaintenance",  
   TaskContact = "MyTask; company name; any other information",  
   RequiredProductLevel = DTSProductLevel.None  
   )]  
  public class MyTask : Task  
  {  
    // Your code here.  
  }  
}  
Imports System  
Imports Microsoft.SqlServer.Dts.Runtime  
  
<DtsTask(DisplayName:="MyTask", _  
 IconResource:="MyTask.MyTaskIcon.ico", _  
 UITypeName:="My Custom Task," & _  
 "Version=1.0.0.0,Culture=Neutral," & _  
 "PublicKeyToken=12345abc6789de01", _  
 TaskType:="PackageMaintenance", _  
 TaskContact:="MyTask; company name; any other information", _  
 RequiredProductLevel:=DTSProductLevel.None)> _  
Public Class MyTask  
  Inherits Task  
  
  ' Your code here.  
  
End Class 'MyTask  

El Diseñador SSIS utiliza la propiedad UITypeName del atributo que incluye el nombre del ensamblado, nombre de tipo, versión, referencia cultural y token de clave pública, para buscar el ensamblado en la Caché de ensamblados global (GAC) y cargarlo para que lo utilice el diseñador.

Una vez encontrado el ensamblado, el Diseñador SSIS utiliza las demás propiedades del atributo para mostrar información adicional sobre la tarea en el Diseñador SSIS, como el nombre, icono y descripción de la tarea.

Las propiedades DisplayName, Description y IconResource especifican cómo se presenta la tarea al usuario. La propiedad IconResource contiene el identificador de recurso del icono incrustado en el ensamblado de interfaz de usuario. El diseñador carga el recurso de icono por identificador del ensamblado y lo muestra junto al nombre de tarea en el cuadro de herramientas y en la superficie del diseñador cuando la tarea se agrega a un paquete. Si una tarea no proporciona un recurso de icono, el diseñador utiliza un icono predeterminado para la tarea.

La interfaz IDTSTaskUI

La interfaz IDtsTaskUI define la colección de métodos y propiedades invocada por el Diseñador SSIS para inicializar y mostrar la interfaz de usuario asociada a la tarea. Cuando se invoca la interfaz de usuario de una tarea, el diseñador llama al método Initialize, que implementa la interfaz de usuario de la tarea al escribirla y, a continuación, proporciona las colecciones TaskHost y Connections de la tarea y el paquete, respectivamente, como parámetros. Estas colecciones se almacenan localmente y se utilizan posteriormente en el método GetView.

El diseñador llama al método GetView para solicitar la ventana que se muestra en el Diseñador SSIS. La tarea crea una instancia de la ventana que contiene la interfaz de usuario para la tarea y devuelve la interfaz de usuario al diseñador para mostrarla. Normalmente, los objetos TaskHost y Connections se proporcionan a la ventana a través de un constructor sobrecargado de modo que se puedan utilizar para configurar la tarea.

El Diseñador SSIS llama al método GetView de la UI de la tarea para mostrar la interfaz de usuario para la tarea. La interfaz de usuario de la tarea devuelve el formulario Windows Forms de este método y el Diseñador SSIS muestra este formulario como un cuadro de diálogo modal. Cuando se cierra el formulario, el Diseñador SSIS examina el valor de la propiedad DialogResult del formulario para determinar si se ha modificado la tarea y si estas modificaciones se deben guardar. Si el valor de la propiedad DialogResult es correcto, el Diseñador SSIS llama a los métodos de persistencia de la tarea para guardar los cambios; de lo contrario, se descartan esos cambios.

En el ejemplo de código siguiente se implementa la interfaz IDtsTaskUI y se supone la existencia de una clase de formulario Windows Forms denominada SampleTaskForm.

using System;  
using System.Windows.Forms;  
using Microsoft.SqlServer.Dts.Runtime;  
using Microsoft.SqlServer.Dts.Runtime.Design;  
  
namespace Sample  
{  
   public class HelloWorldTaskUI : IDtsTaskUI  
   {  
      TaskHost   taskHost;  
      Connections connections;  
      public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)  
      {  
         this.taskHost = taskHost;  
         IDtsConnectionService cs = serviceProvider.GetService  
         ( typeof( IDtsConnectionService ) ) as   IDtsConnectionService;   
         this.connections = cs.GetConnections();  
      }  
      public ContainerControl GetView()  
      {  
        return new HelloWorldTaskForm(this.taskHost, this.connections);  
      }  
     public void Delete(IWin32Window parentWindow)  
     {  
     }  
     public void New(IWin32Window parentWindow)  
     {  
     }  
   }  
}  
Imports System  
Imports Microsoft.SqlServer.Dts.Runtime  
Imports Microsoft.SqlServer.Dts.Runtime.Design  
Imports System.Windows.Forms  
  
Public Class HelloWorldTaskUI  
  Implements IDtsTaskUI  
  
  Dim taskHost As TaskHost  
  Dim connections As Connections  
  
  Public Sub Initialize(ByVal taskHost As TaskHost, ByVal serviceProvider As IServiceProvider) _  
    Implements IDtsTaskUI.Initialize  
  
    Dim cs As IDtsConnectionService  
  
    Me.taskHost = taskHost  
    cs = DirectCast(serviceProvider.GetService(GetType(IDtsConnectionService)), IDtsConnectionService)  
    Me.connections = cs.GetConnections()  
  
  End Sub  
  
  Public Function GetView() As ContainerControl _  
    Implements IDtsTaskUI.GetView  
  
    Return New HelloWorldTaskForm(Me.taskHost, Me.connections)  
  
  End Function  
  
  Public Sub Delete(ByVal parentWindow As IWin32Window) _  
    Implements IDtsTaskUI.Delete  
  
  End Sub  
  
  Public Sub [New](ByVal parentWindow As IWin32Window) _  
    Implements IDtsTaskUI.[New]  
  
  End Sub  
  
End Class  

Consulte también

Crear una tarea personalizada
Codificar una tarea personalizada
Desarrollar una interfaz de usuario para una tarea personalizada