Partager via


Développement d'une interface utilisateur pour une tâche personnalisée

S’applique à : SQL Server SSIS Integration Runtime dans Azure Data Factory

Le modèle objet Integration Services fournit aux développeurs de tâches personnalisées la capacité de créer facilement une interface utilisateur personnalisée pour une tâche, qui peut ensuite être intégrée et affichée dans SQL Server Data Tools (SSDT). L'interface utilisateur fournit des informations utiles dans le concepteur SSIS et aide les utilisateurs à configurer correctement les propriétés et les paramètres de la tâche personnalisée.

Le développement d'une interface utilisateur personnalisée pour une tâche implique l'utilisation de deux classes importantes. Le tableau suivant décrit ces classes.

Classe Description
DtsTaskAttribute Attribut qui identifie une tâche managée et fournit des informations au moment de la conception par le biais de ses propriétés pour contrôler la manière dont le concepteur SSIS affiche les objets et interagit avec eux.
IDtsTaskUI Interface utilisée par la tâche pour s'associer à son interface utilisateur personnalisée.

Cette section décrit le rôle de l'attribut DtsTaskAttribute et de l'interface IDtsTaskUI lorsque vous développez une interface utilisateur pour une tâche personnalisée. Elle fournit également des informations sur la manière de créer, intégrer, déployer et déboguer la tâche dans le concepteur SSIS.

Le concepteur SSIS fournit plusieurs points d’entrée dans l’interface utilisateur pour la tâche : l’utilisateur peut sélectionner Modifier dans le menu contextuel, double-cliquer sur la tâche ou cliquer sur le lien Afficher l’éditeur en bas de la feuille de propriétés. Lorsque l'utilisateur accède à l'un de ces points d'entrée, le concepteur SSIS recherche et charge l'assembly qui contient l'interface utilisateur pour la tâche. L'interface utilisateur de la tâche est chargée de créer la boîte de dialogue des propriétés affichée pour l'utilisateur dans SQL Server Data Tools (SSDT).

Une tâche et son interface utilisateur sont des entités distinctes. Elles doivent être implémentées dans des assemblys séparés pour réduire les tâches de localisation, de déploiement et de maintenance. La DLL n'a généralement pas connaissance de son interface utilisateur et ne charge ni n'appelle de données la concernant, à l'exception des informations contenues dans les valeurs d'attribut DtsTaskAttribute codées dans la tâche. Il s'agit du seul lien qui unit une tâche et son interface utilisateur.

Attribut DtsTask

L'attribut DtsTaskAttribute est inclus dans le code de classe de tâche pour associer une tâche à son interface utilisateur. Le concepteur SSIS utilise les propriétés de l'attribut pour déterminer comment afficher la tâche. Ces propriétés incluent le nom à afficher et l'icône, le cas échéant.

Le tableau suivant décrit les propriétés de l'attribut DtsTaskAttribute.

Property Description
DisplayName Affiche le nom de la tâche dans la boîte à outils Flux de contrôle.
Description Description de la tâche (héritée de DtsLocalizableAttribute). Cette propriété est affichée dans des info-bulles.
IconResource Icône affichée dans le concepteur SSIS.
RequiredProductLevel Si vous utilisez cette propriété, attribuez-lui l'une des valeurs de l'énumération DTSProductLevel. Par exemple, RequiredProductLevel = DTSProductLevel.None.
TaskContact Contient des informations de contact au cas où la tâche nécessite un support technique.
TaskType Assigne un type à la tâche.
Attribute.TypeId Dans le cadre d'une implémentation dans une classe dérivée, obtient un identificateur unique pour cet attribut. Pour plus d’informations, consultez la propriété Attribute.TypeID dans la bibliothèque de classes .NET Framework.
UITypeName Nom de type de l'assembly utilisé par le concepteur SSIS pour charger l'assembly. Cette propriété permet de rechercher l'assembly de l'interface utilisateur pour la tâche.

L'exemple de code suivant présente le DtsTaskAttribute, au-dessus de la définition de classe.

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  

Le concepteur SSIS utilise la propriété UITypeName de l'attribut qui inclut le nom, le nom de type, la version, la culture et le jeton de clé publique de l'assembly, pour rechercher l'assembly dans le Global Assembly Cache (GAC) et le charger à l'usage du concepteur.

Une fois que l'assembly a été trouvé, le concepteur SSIS utilise les autres propriétés de l'attribut pour afficher des informations supplémentaires sur la tâche dans le concepteur SSIS, telles que le nom, l'icône et la description de la tâche.

Les propriétés DisplayName, Description et IconResource spécifient la manière dont la tâche est présentée à l'utilisateur. La propriété IconResource contient l'ID de ressource de l'icône incorporé dans l'assembly de l'interface utilisateur. Le concepteur charge la ressource icône par ID à partir de l'assembly et l'affiche en regard du nom de la tâche dans la boîte à outils et dans l'aire du concepteur lorsque la tâche est ajoutée à un package. Si une tâche ne fournit pas de ressource icône, le concepteur utilise une icône par défaut pour la tâche.

Interface IDTSTaskUI

L'interface IDtsTaskUI définit la collection de méthodes et de propriétés appelées par le concepteur SSIS pour initialiser et afficher l'interface utilisateur associée à la tâche. Lorsque l'interface utilisateur d'une tâche est appelée, le concepteur appelle la méthode Initialize, implémentée par l'interface utilisateur de la tâche lorsque vous l'avez écrite, puis fournit les collections TaskHost et Connections de la tâche et du package, respectivement, en tant que paramètres. Ces collections sont stockées localement et utilisées par la suite dans la méthode GetView.

Le concepteur appelle la méthode GetView pour demander la fenêtre affichée dans le concepteur SSIS. La tâche crée une instance de la fenêtre qui contient l'interface utilisateur de la tâche et retourne l'interface utilisateur au concepteur afin qu'elle soit affichée. En général, les objets TaskHost et Connections sont fournis à la fenêtre par le biais d'un constructeur surchargé afin qu'ils puissent être utilisés pour configurer la tâche.

Pour afficher l'interface utilisateur de la tâche, le concepteur SSIS appelle la méthode GetView associée. L'interface utilisateur de la tâche retourne le Windows Form de cette méthode et le concepteur SSIS affiche ce formulaire sous le forme d'une boîte de dialogue modale. Lorsque le formulaire est fermé, le concepteur SSIS examine la valeur de la propriété DialogResult du formulaire pour déterminer si la tâche a été modifiée et si ces modifications doivent être enregistrées. Si la propriété DialogResult a la valeur OK, le concepteur SSIS appelle les méthodes de persistance de la tâche pour enregistrer les modifications ; sinon, les modifications sont supprimées.

L'exemple de code suivant implémente l'interface IDtsTaskUI et suppose l'existence d'une classe Windows Form nommée 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  

Voir aussi

Création d’une tâche personnalisée
Codage d’une tâche personnalisée
Développement d’une interface utilisateur pour une tâche personnalisée