Jazyk

Vývoj uživatelského rozhraní pro komponentu toku dat

Platí pro:SQL Server SSIS Integration Runtime v rámci Azure Data Factory

Vývojáři komponent mohou poskytnout vlastní uživatelské rozhraní pro komponentu, které se zobrazí v SQL Server Data Tools (SSDT) při úpravě komponenty. Implementace vlastního uživatelského rozhraní vám poskytne upozornění, kdy je komponenta přidána nebo odstraněna z úlohy datového toku a kdy je pro komponentu požádána o pomoc.

Pokud pro svou komponentu neposkytnete vlastní uživatelské rozhraní, uživatelé ji mohou stále konfigurovat pomocí Rozšířený editor. Můžete zajistit, že Rozšířený editor umožní uživatelům správně upravovat vlastní hodnoty vlastností, když použijete TypeConverter vlastnosti IDTSCustomProperty100 a UITypeEditor podle potřeby. Pro více informací viz "Vytváření vlastních vlastností" v Design-time Methods of a Tok dat Component.

Nastavení vlastnosti UITypeName

Pro vytvoření vlastního uživatelského rozhraní musí vývojář nastavit UITypeName vlastnost na DtsPipelineComponentAttribute název třídy, která rozhraní IDtsComponentUI implementuje. Když je tato vlastnost nastavena komponentou, Služby Integrace SQL Serveru načte a volá vlastní uživatelské rozhraní při úpravě komponenty v SSIS Designeru.

Vlastností UITypeName je řetězec oddělený čárkou, který identifikuje plně kvalifikované jméno typu. Následující seznam ukazuje v pořadí prvky, které typ identifikují:

  • Název typu

  • Název sestavení

  • Verze souboru

  • Kultura

  • Token veřejného klíče

Následující příklad kódu ukazuje třídu, která pochází ze základní třídy PipelineComponent a specifikuje vlastnost UITypeName .

[DtsPipelineComponent(  
DisplayName="SampleComponent",  
UITypeName="MyNamespace.MyComponentUIClassName,MyAssemblyName,Version=1.0.0.0,Culture=neutral,PublicKeyToken=abcd...",  
ComponentType = ComponentType.Transform)]  
public class SampleComponent : PipelineComponent  
{  
//TODO: Implement the component here.  
}  
<DtsPipelineComponent(DisplayName="SampleComponent", _  
UITypeName="MyNamespace.MyComponentUIClassName,MyAssemblyName,Version=1.0.0.0,Culture=neutral,PublicKeyToken=abcd...", ComponentType=ComponentType.Transform)> _   
Public Class SampleComponent   
 Inherits PipelineComponent   
End Class  

Implementace rozhraní IDtsComponentUI

Rozhraní IDtsComponentUI obsahuje metody, které SSIS Designer volá při přidávání, mazání a úpravě komponenty. Vývojáři komponent mohou do své implementace těchto metod poskytovat kód pro interakci s uživateli komponenty.

Tato třída je obvykle implementována v assembleru odděleném od samotné komponenty. Ačkoli není nutné použít samostatnou sestavu, umožňuje to vývojáři sestavit a nasadit komponentu a uživatelské rozhraní nezávisle na sobě a zároveň udržuje binární rozměr komponenty malý.

Implementace vlastního uživatelského rozhraní dává vývojáři komponenty větší kontrolu nad komponentou při jejím editování v SSIS Designeru. Například komponenta může přidat kód do metody New , což se vyvolá při prvním přidání komponenty do úlohy datového toku, a zobrazit průvodce, který uživatele provede počáteční konfigurací komponenty.

Poté, co vytvoříte třídu, která implementuje IDtsComponentUI rozhraní, musíte přidat kód, který reaguje na interakci uživatele s komponentou. Metoda Initialize poskytuje IDTSComponentMetaData100 rozhraní komponenty a je volána před a NewEdit metodami. Tato reference by měla být uložena v soukromé členské proměnné a následně použita k úpravě metadat komponenty.

Úprava komponenty a zachování změn

Rozhraní IDTSComponentMetaData100 je poskytováno jako parametr metody Initialize . Tato reference by měla být uložena v členské proměnné kódem uživatelského rozhraní a poté použita k úpravě komponenty v reakci na interakci uživatele s uživatelským rozhraním.

Ačkoliv můžete komponentu upravovat přímo přes IDTSComponentMetaData100 rozhraní, je lepší vytvořit instanci CManagedComponentWrapper pomocí Instantiate této metody. Když komponentu upravujete přímo pomocí rozhraní, obecházíte validační opatření komponenty. Výhodou použití návrhové instance komponenty CManagedComponentWrapper je, že zajistíte, že komponenta má kontrolu nad změnami, které na ní provádějí.

Návratová hodnota Edit metody určuje, zda jsou změny provedené v komponentě zachovány nebo zahozeny. Když tato metoda vrací false, všechny změny jsou zamítnuty; True zachovává změny komponenty a označuje balíček jako potřebný uložit.

Využití služeb návrháře SSIS

Parametr InitializeIServiceProvider této metody poskytuje přístup k následujícím službám SSIS Designer:

Service Description
IDtsClipboardService Používá se k určení, zda byla komponenta generována jako součást operace kopírování/vkládání nebo vystřihování/vložení.
IDtsConnectionService Používá se k přístupu k existujícím spojením nebo k vytváření nových spojení v balíčku.
IErrorCollectionService Používá se k zachycení událostí z komponent datového toku, když potřebujete zachytit všechny chyby a varování způsobené komponentou, místo abyste obdrželi pouze poslední chybu nebo varování.
IDtsVariableService Používá se k přístupu k existujícím proměnným nebo k vytváření nových proměnných v balíčku.
IDtsPipelineEnvironmentService Používají ho komponenty data flow k přístupu k nadřazenému úkolu Tok dat a dalším komponentám v data flow. Tato funkce by mohla být použita k vývoji komponenty, jako je Průvodce pomalu se měnící dimenzí, která vytváří a propojuje další komponenty datového toku podle potřeby.

Tyto služby poskytují vývojářům komponent přístup k objektům a vytváření objektů v balíčku, ve kterém je komponenta načtena.

Sample

Následující příklad kódu ukazuje integraci vlastní uživatelské třídy, která rozhraní IDtsComponentUI implementuje, a Windows formuláře, který slouží jako editor pro komponentu.

Třída vlastního uživatelského rozhraní

Následující kód ukazuje třídu, která rozhraní implementuje IDtsComponentUI . Metoda Edit vytvoří editor komponent a poté zobrazí formulář. Návratová hodnota formuláře určuje, zda jsou změny komponenty zachovány.

using System;  
using System.Windows.Forms;  
using Microsoft.SqlServer.Dts.Runtime;  
using Microsoft.SqlServer.Dts.Pipeline.Design;  
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;  
  
namespace Microsoft.Samples.SqlServer.Dts  
{  
    public class SampleComponentUI : IDtsComponentUI  
    {  
        IDTSComponentMetaData100 md;  
        IServiceProvider sp;  
  
        public void Help(System.Windows.Forms.IWin32Window parentWindow)  
        {  
        }  
        public void New(System.Windows.Forms.IWin32Window parentWindow)  
        {  
        }  
        public void Delete(System.Windows.Forms.IWin32Window parentWindow)  
        {  
        }  
        public bool Edit(System.Windows.Forms.IWin32Window parentWindow, Variables vars, Connections cons)  
        {  
            // Create and display the form for the user interface.  
            SampleComponentUIForm componentEditor = new SampleComponentUIForm(cons, vars, md);  
  
            DialogResult result  = componentEditor.ShowDialog(parentWindow);  
  
            if (result == DialogResult.OK)  
                return true;  
  
            return false;  
        }  
        public void Initialize(IDTSComponentMetaData100 dtsComponentMetadata, IServiceProvider serviceProvider)  
        {  
            // Store the component metadata.  
            this.md = dtsComponentMetadata;  
        }  
    }  
}  
Imports System   
Imports System.Windows.Forms   
Imports Microsoft.SqlServer.Dts.Runtime   
Imports Microsoft.SqlServer.Dts.Pipeline.Design   
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper   
  
Namespace Microsoft.Samples.SqlServer.Dts   
  
 Public Class SampleComponentUI   
 Implements IDtsComponentUI   
   Private md As IDTSComponentMetaData100   
   Private sp As IServiceProvider   
  
   Public Sub Help(ByVal parentWindow As System.Windows.Forms.IWin32Window)   
   End Sub   
  
   Public Sub New(ByVal parentWindow As System.Windows.Forms.IWin32Window)   
   End Sub   
  
   Public Sub Delete(ByVal parentWindow As System.Windows.Forms.IWin32Window)   
   End Sub   
  
   Public Function Edit(ByVal parentWindow As System.Windows.Forms.IWin32Window, ByVal vars As Variables, ByVal cons As Connections) As Boolean   
     ' Create and display the form for the user interface.  
     Dim componentEditor As SampleComponentUIForm = New SampleComponentUIForm(cons, vars, md)   
     Dim result As DialogResult = componentEditor.ShowDialog(parentWindow)   
     If result = DialogResult.OK Then   
       Return True   
     End If   
     Return False   
   End Function   
  
   Public Sub Initialize(ByVal dtsComponentMetadata As IDTSComponentMetaData100, ByVal serviceProvider As IServiceProvider)   
     Me.md = dtsComponentMetadata   
   End Sub   
 End Class   
  
End Namespace  

Vlastní editor

Následující kód ukazuje implementaci Windows formuláře, který je zobrazen během volání metodyEdit.

using System;  
using System.Drawing;  
using System.Collections;  
using System.ComponentModel;  
using System.Windows.Forms;  
using System.Data;  
  
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;  
using Microsoft.SqlServer.Dts.Runtime;  
  
namespace Microsoft.Samples.SqlServer.Dts  
{  
    public partial class SampleComponentUIForm : System.Windows.Forms.Form  
    {  
        private Connections connections;  
        private Variables variables;  
        private IDTSComponentMetaData100 metaData;  
        private CManagedComponentWrapper designTimeInstance;  
        private System.ComponentModel.IContainer components = null;  
  
        public SampleComponentUIForm( Connections cons, Variables vars, IDTSComponentMetaData100 md)  
        {  
            variables = vars;  
            connections = cons;  
            metaData = md;  
        }  
  
        private void btnOk_Click(object sender, System.EventArgs e)  
        {  
            if (designTimeInstance == null)  
                designTimeInstance = metaData.Instantiate();  
  
            designTimeInstance.SetComponentProperty( "CustomProperty", txtCustomPropertyValue.Text);  
  
            this.Close();  
        }  
  
        private void btnCancel_Click(object sender, System.EventArgs e)  
        {  
            this.Close();  
        }  
    }  
}  
Imports System   
Imports System.Drawing   
Imports System.Collections   
Imports System.ComponentModel   
Imports System.Windows.Forms   
Imports System.Data   
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper   
Imports Microsoft.SqlServer.Dts.Runtime   
  
Namespace Microsoft.Samples.SqlServer.Dts   
  
 Public Partial Class SampleComponentUIForm   
  Inherits System.Windows.Forms.Form   
   Private connections As Connections   
   Private variables As Variables   
   Private metaData As IDTSComponentMetaData100   
   Private designTimeInstance As CManagedComponentWrapper   
   Private components As System.ComponentModel.IContainer = Nothing   
  
   Public Sub New(ByVal cons As Connections, ByVal vars As Variables, ByVal md As IDTSComponentMetaData100)   
     variables = vars   
     connections = cons   
     metaData = md   
   End Sub   
  
   Private Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs)   
     If designTimeInstance Is Nothing Then   
       designTimeInstance = metaData.Instantiate   
     End If   
     designTimeInstance.SetComponentProperty("CustomProperty", txtCustomPropertyValue.Text)   
     Me.Close   
   End Sub   
  
   Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs)   
     Me.Close   
   End Sub   
 End Class   
  
End Namespace