Jazyk
Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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