Sviluppo di un'interfaccia utente per un'attività personalizzataDeveloping a User Interface for a Custom Task

Il modello a oggetti di Integration ServicesIntegration Services offre agli sviluppatori di attività la possibilità di creare facilmente un'interfaccia utente personalizzata per un'attività da integrare e visualizzare in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT).The Integration ServicesIntegration Services object model provides custom task developers the ability to easily create a custom user interface for a task that can then be integrated and displayed in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT). L'interfaccia utente può fornire informazioni utili all'utente in Progettazione SSISSSIS oltre a indicazioni su come configurare correttamente le proprietà e le impostazioni dell'attività personalizzata.The user interface can provide helpful information to the user in SSISSSIS Designer, and guide users to correctly configure the properties and settings of the custom task.

Per sviluppare un'interfaccia utente personalizzata per un'attività, è necessario utilizzare due classi importanti,Developing a custom user interface for a task involves using two important classes. descritte nella tabella seguente.The following table describes those classes.

ClasseClass DescriptionDescription
DtsTaskAttribute Attributo che identifica un'attività gestita e fornisce informazioni della fase di progettazione tramite le proprietà per controllare le modalità di visualizzazione e di interazione di Progettazione SSISSSIS con l'oggetto.An attribute that identifies a managed task, and supplies design-time information through its properties to control how SSISSSIS Designer displays and interacts with the object.
IDtsTaskUI Interfaccia utilizzata dall'attività per associare l'attività alla relativa interfaccia utente personalizzata.An interface used by the task to associate the task with its custom user interface.

In questa sezione viene descritto il ruolo dell'attributo DtsTaskAttribute e dell'interfaccia IDtsTaskUI durante lo sviluppo di un'interfaccia utente per un'attività personalizzata e vengono fornite informazioni su come creare, integrare, distribuire e sottoporre a debug l'attività all'interno di Progettazione SSISSSIS.This section describes the role of the DtsTaskAttribute attribute and the IDtsTaskUI interface when you are developing a user interface for a custom task, and provides details about how to create, integrate, deploy, and debug the task within SSISSSIS Designer.

Il SSISSSIS finestra di progettazione fornisce più punti di ingresso all'interfaccia utente per l'attività: l'utente può selezionare modifica il menu di scelta rapida, fare doppio clic su attività, oppure fare clic su di Visualizza Editor collegamento nella parte inferiore della finestra delle proprietà.The SSISSSIS Designer provides multiple entry points to the user interface for the task: the user can select Edit on the shortcut menu, double-click the task, or click the Show Editor link at the bottom of the property sheet. Quando l'utente accede a uno di questi punti di ingresso, Progettazione SSISSSIS trova e carica l'assembly che contiene l'interfaccia utente per l'attività.When the user accesses one of these entry points, SSISSSIS Designer locates and loads the assembly that contains the user interface for the task. L'interfaccia utente per l'attività è responsabile della creazione della finestra di dialogo delle proprietà che l'utente visualizza in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT).The user interface for the task is responsible for creating the properties dialog box that is displayed to the user in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT).

L'attività e la relativa interfaccia utente sono entità separateA task and its user interface are separate entities. che devono essere implementate in assembly distinti per ridurre gli interventi di localizzazione, distribuzione e manutenzione.They should be implemented in separate assemblies to reduce localization, deployment, and maintenance work. La DLL dell'attività non carica, chiama né in genere contiene informazioni sulla relativa interfaccia utente, ad eccezione delle informazioni contenute nei valori dell'attributo DtsTaskAttribute codificati nell'attività.The task DLL does not load, call, or generally contain any knowledge of its user interface, except for the information that is contained in the DtsTaskAttribute attribute values coded in the task. Questo è l'unico modo in cui un'attività è associata alla propria interfaccia utente.This is the only way that a task and its user interface are associated.

Attributo DtsTaskThe DtsTask Attribute

L'attributo DtsTaskAttribute è incluso nel codice della classe dell'attività per associare un'attività alla relativa interfaccia utente.The DtsTaskAttribute attribute is included in the task class code to associate a task with its user interface. Progettazione SSISSSIS utilizza le proprietà dell'attributo per determinare la modalità di visualizzazione dell'attività nella finestra di progettazione.The SSISSSIS Designer uses the properties of the attribute to determine how to display the task in the designer. Queste proprietà includono il nome da visualizzare e l'icona, se presente.These properties include the name to display and the icon, if any.

Nella tabella seguente sono descritte le proprietà dell'attributo DtsTaskAttribute.The following table describes the properties of the DtsTaskAttribute attribute.

ProprietàProperty DescriptionDescription
DisplayName Visualizza il nome dell'attività nella casella degli strumenti del Flusso di controllo.Displays the task name in the Control Flow toolbox.
Description Descrizione dell'attività (ereditata da DtsLocalizableAttribute).The task description (inherited from DtsLocalizableAttribute). Questa proprietà è visualizzata nelle descrizioni comandi.This property is shown in ToolTips.
IconResource Icona visualizzata in Progettazione SSISSSIS.The icon displayed in SSISSSIS Designer.
RequiredProductLevel Se utilizzata, impostarla su uno dei valori dell'enumerazione DTSProductLevel.If used, set it to one of the values in the DTSProductLevel enumeration. Ad esempio, RequiredProductLevel = DTSProductLevel.None.For example, RequiredProductLevel = DTSProductLevel.None.
TaskContact Contiene informazioni di contatto per i casi in cui l'attività richiede supporto tecnico.Holds contact information for occasions when the task requires technical support.
TaskType Assegna un tipo all'attività.Assigns a type to the task.
Attribute.TypeIdAttribute.TypeId Se implementata in una classe derivata, ottiene un identificatore univoco per questo attributo.When implemented in a derived class, gets a unique identifier for this Attribute. Per ulteriori informazioni, vedere Attribute.TypeID proprietà nella libreria di classi .NET Framework.For more information, see Attribute.TypeID property in the .NET Framework Class Library.
UITypeName Nome di tipo dell'assembly utilizzato da Progettazione SSISSSIS per caricare l'assembly.The type name of the assembly that is used by SSISSSIS Designer to load the assembly. Questa proprietà viene utilizzata per trovare l'assembly dell'interfaccia utente per l'attività.This property is used to find the user interface assembly for the task.

Nell'esempio di codice seguente è illustrato l'aspetto di DtsTaskAttribute codificato sopra la definizione della classe.The following code example shows the DtsTaskAttribute as it would look, coded above the class definition.

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  

Progettazione SSISSSIS utilizza la proprietà UITypeName dell'attributo che include il nome dell'assembly, il nome del tipo, la versione, la lingua e il token di chiave pubblica per individuare l'assembly nella Global Assembly Cache (GAC) e caricarlo per l'utilizzo nella finestra di progettazione.The SSISSSIS Designer uses the UITypeName property of the attribute that includes the assembly name, type name, version, culture, and public key token, to locate the assembly in the Global Assembly Cache (GAC) and load it for use by the designer.

Dopo l'individuazione dell'assembly, Progettazione SSISSSIS utilizza le altre proprietà dell'attributo per visualizzare informazioni aggiuntive sull'attività in Progettazione SSISSSIS, ad esempio il nome, l'icona e la descrizione dell'attività.After the assembly has been located, SSISSSIS Designer uses the other properties in the attribute to display additional information about the task in SSISSSIS Designer, such as the name, icon, and description of the task.

Le proprietà DisplayName, Description e IconResource specificano la modalità con cui l'attività viene presentata all'utente.The DisplayName, Description, and IconResource properties specify how the task is presented to the user. La proprietà IconResource contiene l'ID di risorsa dell'icona incorporata nell'assembly dell'interfaccia utente.The IconResource property contains the resource ID of the icon embedded in the user interface assembly. La finestra di progettazione carica la risorsa dell'icona in base all'ID dall'assembly e la visualizza accanto al nome dell'attività nella casella degli strumenti e nell'area di progettazione quando l'attività viene aggiunta al pacchetto.The designer loads the icon resource by ID from the assembly, and displays it next to the task name in the toolbox and on the designer surface when the task is added to a package. Se un'attività non prevede una risorsa di icona, la finestra di progettazione utilizza un'icona predefinita per l'attività.If a task does not provide an icon resource, the designer uses a default icon for the task.

Interfaccia IDTSTaskUIThe IDTSTaskUI Interface

L'interfaccia IDtsTaskUI definisce la raccolta di metodi e proprietà chiamati da Progettazione SSISSSIS per inizializzare e visualizzare l'interfaccia utente associata all'attività.The IDtsTaskUI interface defines the collection of methods and properties called by SSISSSIS Designer to initialize and display the user interface associated with the task. Quando viene richiamata l'interfaccia utente per un'attività, la finestra di progettazione chiama il metodo Initialize, implementato dall'interfaccia utente dell'attività quando è stata scritta, quindi fornisce le raccolte TaskHost e Connections rispettivamente dell'attività e del pacchetto come parametri.When the user interface for a task is invoked, the designer calls the Initialize method, implemented by the task user interface when you wrote it, and then provides the TaskHost and Connections collections of the task and package, respectively, as parameters. Queste raccolte vengono archiviate in locale e utilizzate successivamente nel metodo GetView.These collections are stored locally, and used subsequently in the GetView method.

La finestra di progettazione chiama il metodo GetView per richiedere la finestra visualizzata in Progettazione SSISSSIS.The designer calls the GetView method to request the window that is displayed in SSISSSIS Designer. L'attività crea un'istanza della finestra che contiene l'interfaccia utente per l'attività e restituisce l'interfaccia utente alla finestra di progettazione per la visualizzazione.The task creates an instance of the window that contains the user interface for the task, and returns the user interface to the designer for display. In genere, gli oggetti TaskHost e Connections vengono forniti alla finestra tramite un costruttore di overload, in modo che possano essere utilizzati per configurare l'attività.Typically, the TaskHost and Connections objects are provided to the window through an overloaded constructor so they can be used to configure the task.

Progettazione SSISSSIS chiama il metodo GetView dell'interfaccia utente dell'attività per visualizzare l'interfaccia utente per l'attività.The SSISSSIS Designer calls the GetView method of the task UI to display the user interface for the task. L'interfaccia utente dell'attività restituisce il Windows Form da questo metodo e Progettazione SSISSSIS visualizza questo form come finestra di dialogo modale.The task user interface returns the Windows form from this method, and SSISSSIS Designer shows this form as a modal dialog box. Quando il form viene chiuso, SSISSSIS Designer esamina il valore della DialogResult proprietà del form per determinare se l'attività è stato modificato e se queste modifiche devono essere salvate.When the form is closed, SSISSSIS Designer examines the value of the DialogResult property of the form to determine whether the task has been modified and if these modifications should be saved. Se il valore del DialogResult proprietà OK, SSISSSIS finestra di progettazione chiama i metodi di persistenza dell'attività per salvare le modifiche; in caso contrario, le modifiche vengono ignorate.If the value of the DialogResult property is OK, the SSISSSIS Designer calls the persistence methods of the task to save the changes; otherwise, the changes are discarded.

Nell'esempio di codice seguente viene implementata l'interfaccia IDtsTaskUI e si presuppone l'esistenza di una classe di Windows Form denominata SampleTaskForm.The following code sample implements the IDtsTaskUI interface, and assumes the existence of a Windows form class named 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  

Vedere ancheSee Also

Creazione di un'attività personalizzata Creating a Custom Task
La codifica di un'attività personalizzata Coding a Custom Task
Sviluppo di un'interfaccia utente per un'attività personalizzataDeveloping a User Interface for a Custom Task