Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
SSIS Integration Runtime i Azure Data Factory
Komponentutvecklare kan tillhandahålla ett anpassat användargränssnitt för en komponent, vilket visas i SQL Server Data Tools (SSDT) när komponenten redigeras. Att implementera ett anpassat användargränssnitt ger dig notis när komponenten läggs till eller tas bort från en dataflödesuppgift, och när hjälp begärs för komponenten.
Om du inte tillhandahåller ett anpassat användargränssnitt för din komponent kan användare ändå konfigurera komponenten och dess anpassade egenskaper genom att använda Rozšírený editor. Du kan säkerställa att Rozšírený editor låter användare redigera anpassade egenskapsvärden på lämpligt sätt genom att använda TypeConverter och UITypeEditor egenskaperna när IDTSCustomProperty100 det är lämpligt. För mer information, se "Skapa anpassade egenskaper" i Design-time Methods of a Data Flow Component.
Att sätta UITypeName-egenskapen
För att tillhandahålla ett anpassat användargränssnitt måste utvecklaren sätta egenskapen UITypeName för till DtsPipelineComponentAttribute namnet på en klass som implementerar gränssnittet IDtsComponentUI . När denna egenskap sätts av komponenten laddas služba SSIS och anropar det anpassade användargränssnittet när komponenten redigeras i SSIS Designer.
Egenskapen UITypeName är en kommaavgränsad sträng som identifierar det fullt kvalificerade namnet på typen. Följande lista visar, i ordning, de element som identifierar typen:
Typnamn
Sammansättningsnamn
Filversion
Kultur
Publik nyckeltoken
Följande kodexempel visar en klass som härstammar PipelineComponent från basklassen och specificerar egenskapen 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
Implementering av IDtsComponentUI-gränssnittet
Gränssnittet IDtsComponentUI innehåller metoder som SSIS Designer anropar när en komponent läggs till, raderas och redigeras. Komponentutvecklare kan tillhandahålla kod i sin implementation av dessa metoder för att interagera med användarna av komponenten.
Denna klass implementeras vanligtvis i en sammansättning separat från själva komponenten. Även om användning av en separat assembly inte krävs, gör detta det möjligt för utvecklaren att bygga och distribuera komponenten och användargränssnittet oberoende av varandra, och håller komponentens binära fotavtryck litet.
Att implementera ett anpassat användargränssnitt ger komponentutvecklaren mer kontroll över komponenten när den redigeras i SSIS Designer. Till exempel kan en komponent lägga till kod i metoden New , som anropas när en komponent initialt läggs till i en dataflödesuppgift, och visa en guide som guidar användaren genom komponentens initiala konfiguration.
Efter att du har skapat en klass som implementerar gränssnittet IDtsComponentUI måste du lägga till kod som svarar på användarinteraktion med komponenten. Metoden Initialize tillhandahåller gränssnittet IDTSComponentMetaData100 för komponenten och anropas före New och-metoderna Edit . Denna referens bör lagras i en privat medlemsvariabel och användas för att därefter modifiera komponentens metadata.
Modifiering av en komponent och bestående ändringar
Gränssnittet IDTSComponentMetaData100 tillhandahålls som en parameter till metoden Initialize . Denna referens bör cachelagras i en medlemsvariabel av användargränssnittets kod och sedan användas för att modifiera komponenten som svar på användarinteraktion med användargränssnittet.
Även om du kan modifiera komponenten direkt via gränssnittet IDTSComponentMetaData100 , är det bättre att skapa en instans av genom CManagedComponentWrapper att använda metoden Instantiate . När du redigerar komponenten direkt via gränssnittet kringgår du komponentens valideringsskydd. Fördelen med att använda designtidsinstansen av komponenten är CManagedComponentWrapper att du säkerställer att komponenten har kontroll över de ändringar som gjorts i den.
Metodens Edit returvärde avgör om ändringar som gjorts i en komponent behålls eller kasseras. När denna metod returnerar falskt kastas alla ändringar; true behåller ändringarna i komponenten och markerar paketet som behövande att sparas.
Användning av SSIS-konstruktörens tjänster
IServiceProvider-parameternInitialize för metoden ger tillgång till följande tjänster i SSIS Designer:
| Service | Description |
|---|---|
| IDtsClipboardService | Används för att avgöra om komponenten genererats som en del av en kopiera/klistra in eller klippa/klistra in. |
| IDtsConnectionService | Används för att komma åt befintliga anslutningar eller skapa nya anslutningar i paketet. |
| IErrorCollectionService | Används för att fånga händelser från dataflödeskomponenter när du behöver fånga alla fel och varningar som komponenten ger istället för att bara ta emot det senaste felet eller varningen. |
| IDtsVariableService | Används för att komma åt befintliga variabler eller skapa nya variabler i paketet. |
| IDtsPipelineEnvironmentService | Används av data flow-komponenter för att komma åt den föräldrabaserade Data Flow-uppgiften och andra komponenter i data flow. Denna funktion kan användas för att utveckla en komponent som Slowly Changing Dimension Wizard som skapar och kopplar ihop ytterligare dataflödeskomponenter vid behov. |
Dessa tjänster ger komponentutvecklare möjlighet att komma åt och skapa objekt i paketet där komponenten laddas.
Sample
Följande kodexempel visar integrationen av en anpassad användargränssnittsklass som implementerar IDtsComponentUI gränssnittet, och ett Windows-formulär som fungerar som editor för en komponent.
Anpassad användargränssnittsklass
Följande kod visar klassen som implementerar gränssnittet IDtsComponentUI . Metoden Edit skapar komponentredigeraren och visar sedan formuläret. Returvärdet för formen avgör om ändringar i komponenten bevaras.
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
Anpassad redigerare
Följande kod visar implementeringen av Windows-formuläret som visas under anropet av Edit metoden.
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