Desarrollar una interfaz de usuario para una tarea personalizada
El modelo de objetos de Integration Services permite a los programadores de tareas personalizadas crear con facilidad una interfaz de usuario personalizada para una tarea que posteriormente se puede integrar y mostrar en Business Intelligence Development Studio. 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 |
---|---|
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. |
|
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 para 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 Business Intelligence Development Studio.
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 |
---|---|
Muestra el nombre de tarea en el cuadro de herramientas Flujo de control. |
|
La descripción de la tarea (se hereda de DtsLocalizableAttribute). Esta propiedad se muestra en la información sobre herramientas. |
|
El icono que se muestra en el Diseñador SSIS. |
|
Si se utiliza, establézcala en uno de los valores de la enumeración DTSProductLevel. Por ejemplo, RequiredProductLevel = DTSProductLevel.None. |
|
Contiene información de contacto para las ocasiones en que la tarea requiere soporte técnico. |
|
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. |
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 OK, el Diseñador SSIS llama a los métodos de persistencia de la tarea para guardar los cambios; de lo contrario, se descartan los 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
|