Entwickeln einer Benutzeroberfläche für einen benutzerdefinierten Task
Das Integration Services-Objektmodell bietet Entwicklern benutzerdefinierter Tasks eine einfache Möglichkeit, eine individuelle Benutzeroberfläche für einen Task zu erstellen, der dann in Business Intelligence Development Studio integriert und angezeigt werden kann. Die Benutzeroberfläche kann nützliche Informationen für den Benutzer im SSIS-Designer bereitstellen und den Benutzern Hinweise geben, wie sie die Eigenschaften und Einstellungen des benutzerdefinierten Tasks ordnungsgemäß konfigurieren können.
Bei der Entwicklung einer benutzerdefinierten Benutzeroberfläche für einen Task werden zwei wichtige Klassen verwendet. Diese Klassen werden in der folgenden Tabelle beschrieben.
Klasse |
Beschreibung |
---|---|
Ein Attribut, das einen verwalteten Task identifiziert und über seine Eigenschaften Informationen zur Entwurfszeit angibt, um zu kontrollieren, wie der SSIS-Designer das Objekt anzeigt, bzw. wie er mit ihm interagiert. |
|
Eine vom Task verwendete Schnittstelle, um den Task seiner benutzerdefinierten Benutzeroberfläche zuzuordnen. |
Dieser Abschnitt beschreibt die Rolle der DtsTaskAttribute-Attribute und der IDtsTaskUI-Schnittstelle bei der Entwicklung einer Benutzeroberfläche für einen benutzerdefinierten Task und enthält Einzelheiten zur Erstellung, Integration, Bereitstellung und dem Debuggen des Tasks innerhalb des SSIS-Designers.
Der SSIS-Designer stellt mehrere Einstiegspunkte zur Benutzeroberfläche für den Task bereit: Der Benutzer kann im Kontextmenü Bearbeiten wählen, auf den Task doppelklicken oder auf den Link Editor anzeigen unten auf dem Eigenschaftsblatt klicken. Wenn der Benutzer auf einen dieser Einstiegspunkte zugreift, dann sucht und lädt der SSIS-Designer die Assembly, die die Benutzeroberfläche für den Task enthält. Die Benutzeroberfläche für den Task ist für die Erstellung des Eigenschaftendialogfelds verantwortlich, das dem Benutzer in Business Intelligence Development Studio angezeigt wird.
Ein Task und seine Benutzeroberfläche sind separate Entitäten. Sie sollten in separaten Assemblys implementiert werden, um den Aufwand bei der Lokalisierung, der Bereitstellung und den Wartungsarbeiten zu reduzieren. Mit Ausnahme der Informationen, die in den im Task codiertenDtsTaskAttribute-Attributwerten enthalten sind, werden von der DLL keine Informationen zur Benutzeroerfläche geladen oder aufgerufen bzw. sind solche Informationen in der Regel nicht in ihr enthalten. Dies ist die einzige Möglichkeit der Zuordnung eines Task zu seiner Benutzeroberfläche.
Das DtsTask-Attribut
Das DtsTaskAttribute-Attribut ist im Code der Taskklasse enthalten, um den Task seiner Benutzeroberfläche zuzuordnen. Der SSIS-Designer nutzt die Eigenschaften des Attributs, um zu ermitteln, wie der Task im Designer angezeigt werden soll. Diese Eigenschaften schließen den anzuzeigenden Namen und ggf. das Symbol ein.
In der folgenden Tabelle werden die Eigenschaften des DtsTaskAttribute-Attributs beschrieben.
Eigenschaft |
Beschreibung |
---|---|
Zeigt den Tasknamen in der Toolbox der Ablaufsteuerung an. |
|
Die Taskbeschreibung (geerbt von DtsLocalizableAttribute). Diese Eigenschaft wird in QuickInfos angezeigt. |
|
Das im SSIS-Designer angezeigte Symbol. |
|
Sollte bei Verwendung auf einen der Werte in der DTSProductLevel-Enumeration festgelegt werden. Beispiel: RequiredProductLevel = DTSProductLevel.None. |
|
Enthält Kontaktinformationen, falls für den Task technischer Support benötigt wird. |
|
Weist dem Task einen Typ zu. |
|
Attribute.TypeId |
Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribut ab. Weitere Informationen finden Sie in der .NET Framework-Klassenbibliothek unter der Attribute.TypeID-Eigenschaft. |
Der Typname der Assembly, der vom SSIS-Designer zum Laden der Assembly verwendet wird. Diese Eigenschaft wird verwendet, um die Benutzeroberflächenassembly für den Task zu suchen. |
Im folgenden Codebeispiel wird das DtsTaskAttribute gezeigt, wie es aussehen würde, wenn es oberhalb der Klassendefinition codiert wäre.
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
Der SSIS-Designer sucht mithilfe der UITypeName-Eigenschaft des Attributs, das den Namen, den Typnamen, die Version, die Kultur und das öffentliche Schlüsseltoken der Assembly enthält, um die Assembly im globalen Assemblycache (GAC) zu suchen und sie für die Verwendung durch den Designer zu laden.
Wenn die Assembly gefunden wurde, verwendet der SSIS-Designer die anderen Eigenschaften im Attribut, um zusätzliche Informationen zum Task im SSIS-Designer, wie z. B. Namen, Symbol und Beschreibung des Tasks anzuzeigen.
Die Eigenschaften DisplayName, Description und IconResource geben an, wie dem Benutzer der Task präsentiert wird. Die IconResource-Eigenschaft enthält die Ressourcen-ID des in der Benutzeroberflächenassembly eingebetteten Symbols. Der Designer lädt die Symbolressource über die ID aus der Assembly und zeigt sie neben dem Tasknamen in der Toolbox sowie auf der Designeroberfläche an, wenn der Task zum Paket hinzugefügt wird. Wenn ein Task keine Symbolressource bereitstellt, dann verwendet der Designer für den Task ein Standardsymbol.
Die IDTSTaskUI-Schnittstelle
Die IDtsTaskUI-Schnittstelle definiert die Auflistung von Methoden und Eigenschaften, die vom SSIS-Designer aufgerufen werden, um die mit dem Task verbundene Benutzeroberfläche zu initialisieren und anzuzeigen. Wenn die Benutzeroberfläche für einen Task aufgerufen wird, dann ruft der Designer die Initialize-Methode auf, die von der Task-Benutzeroberfläche implementiert wurde, als Sie diese schrieben, und stellt dann die TaskHost- und Connections-Auflistungen des Tasks und des Pakets jeweils als Parameter bereit. Diese Auflistungen werden lokal gespeichert und anschließend in der GetView-Methode verwendet.
Der Designer ruft die GetView-Methode auf, um das Fenster anzufordern, das im SSIS-Designer angezeigt wird. Der Task erstellt eine Instanz des Fensters, das die Benutzeroberfläche für den Task enthält, und gibt die Benutzeroberfläche wieder zur Anzeige an den Designer zurück. In der Regel werden die TaskHost- und Connections-Objekte dem Fenster über einen überladenen Konstruktor bereitgestellt, sodass sie zum Konfigurieren des Tasks verwendet werden können.
Der SSIS-Designer ruft die GetView-Methode der Task-Benutzeroberfläche auf, um die Benutzeroberfläche für den Task anzuzeigen. Die Task-Benutzeroberfläche gibt das Windows Form von dieser Methode zurück, und der SSIS-Designer zeigt dieses Formular als modales Dialogfeld an. Wenn das Formular geschlossen ist, untersucht der SSIS-Designer den Wert der DialogResult-Eigenschaft des Formulars, um zu ermitteln, ob der Task geändert wurde und ob diese Änderungen gespeichert werde sollten. Wenn der Wert der DialogResult-Eigenschaft OK ist, dann ruft der SSIS-Designer die Dauerhaftigkeitsmethoden des Tasks auf, um die Änderungen zu speichern; andernfalls werden die Änderungen verworfen.
Das folgende Codebeispiel implementiert die IDtsTaskUI-Schnittstelle, wobei es von der Existenz einer Windows Form-Klasse mit dem Namen SampleTaskForm ausgeht.
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
|