Developing a User Interface for a Data Flow Component
Deweloperzy składników może dostarczyć niestandardowy interfejs dla składnika, który jest wyświetlany w Business Intelligence Development Studio gdy składnik jest edytowany. Implementowania interfejs użytkownika niestandardowego zapewnia powiadomienie, gdy składnik zostanie dodany do lub usunięty z zadanie przepływ danych, a kiedy pomoc jest wymagane dla składnika.
Jeśli nie zapewniają interfejs użytkownika niestandardowego składnika, użytkownicy nadal mogą skonfigurować składnika i jego właściwości niestandardowe za pomocą zaawansowanego edytora.Można zapewnić, że Zaawansowany edytor pozwala użytkownikom na edytowanie wartości właściwość niestandardowych, odpowiednio za pomocą TypeConverter() i UITypeEditor() właściwość IDTSCustomProperty100 w razie potrzeby. Aby uzyskać więcej informacji zobacz temat "" Tworzenie niestandardowych właściwości"w Metody czasu projektowania składnik przepływu danych.
Ustawienie właściwość UITypeName
Aby udostępnić interfejs użytkownika niestandardowego, programista musi zestaw UITypeName() Właściwość DtsPipelineComponentAttribute Nazwa klasy, która implementuje IDtsComponentUI interfejs. When this property is set by the component, SQL Server Integration Services loads and calls the custom user interface when the component is edited in SSIS Designer.
The UITypeName() właściwość is a comma-delimited ciąg that identifies the fully qualified name of the type. Na poniższej liście przedstawiono w kolejności elementów, które umożliwia zidentyfikowanie typu:
Nazwa typu
Nazwa wirtualny plik dziennika
Wersja pliku
Kultura
Token klucz publicznego
Poniższy przykład kodu pokazuje klasy, która wynika z PipelineComponent utworzyć klasę i określa UITypeName() Właściwość.
[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
Interfejs IDtsComponentUI wykonania
The IDtsComponentUI interfejs contains methods that SSIS Designer calls when a component is added, deleted, and edited. Deweloperzy składników może dostarczyć kod w realizacji tych metod, aby aktywnie współpracować z użytkowników składnika.
Ta klasa jest zazwyczaj realizowane w wirtualny plik dziennika oddzielnie od sam składnik.Chociaż użycie oddzielnych zestawów nie jest wymagane, to umożliwia projektantowi tworzenie oraz rozmieszczanie składnika i interfejs użytkownika, niezależnie od siebie i zachowuje małych binarne wyświetlacz składnika.
Deweloper składnika implementowania interfejs użytkownika niestandardowego zapewnia większą kontrolę nad składnikiem jest edycji w SSIS Projektant. Na przykład, składnik można dodać kod New(IWin32Window) Metoda, która jest wywoływane, gdy składnik początkowo jest dodawany do zadanie przepływu danych i wyświetlić kreatora, który prowadzi użytkownika przez wstępnej konfiguracja składnika.
Po utworzeniu klasy, która implementuje IDtsComponentUI interfejs, należy dodać kod, aby odpowiedzieć na posługiwanie składnika. The Initialize(IDTSComponentMetaData100, IServiceProvider) metoda provides the IDTSComponentMetaData100 interfejs of the component, and is called before the New(IWin32Window) and Edit(IWin32Window, Variables, Connections) methods. To odwołanie powinny być przechowywane w zmiennej element członkowski członkowski prywatnego i można później modyfikować metadane składnika.
Modyfikowanie składnika i pozostające zmiany
The IDTSComponentMetaData100 interfejs is provided as a parameter to the Initialize(IDTSComponentMetaData100, IServiceProvider) metoda. Odwołanie do tego należy w pamięci podręcznej zmienna element członkowski członkowski przez kod interfejs użytkownika i następnie używać do modyfikowania składnika w odpowiedzi na interakcji użytkownika z interfejs użytkownika.
Chociaż można modyfikować bezpośrednio za pomocą składnika IDTSComponentMetaData100 interfejs, lepiej jest utworzyć wystąpienie CManagedComponentWrapper za pomocą Instantiate() Metoda. Podczas edytowania składnika bezpośrednio przy użyciu interfejs, należy pominąć składnika sprawdzania poprawności zabezpieczeń.Zaletą stosowania czas projektowania wystąpienie składnika za pomocą CManagedComponentWrapper to, że upewnij się, że składnik ma kontrolę nad zmian wprowadzonych do niego.
Wartość zwracana przez Edit(IWin32Window, Variables, Connections) Metoda określa, czy zmiany wprowadzone w składniku są zachowywane lub odrzucone. Po powrocie tej metoda false, wszystkie zmiany zostaną odrzucone. true będzie się powtarzał zmian do składnika i oznacza pakiet jako wymagające do zapisania.
Korzystając z projektanta SSIS usług
The IServiceProvider parameter of the Initialize(IDTSComponentMetaData100, IServiceProvider) metoda provides access to the following services of SSIS Designer:
usługa |
Description |
---|---|
IDtsClipboardService |
Służy do określenia, czy składnik został wygenerowany jako część kopiowania/wklejania lub Wytnij/Wklej operacji. |
IDtsConnectionService |
Używane do dostępu do istniejących połączeń lub do tworzenia nowych połączeń w pakiet. |
IErrorCollectionService |
Służy do przechwytywania zdarzeń ze składników przepływ danych, gdy zachodzi potrzeba przechwytywania błędów i ostrzeżeń wywoływane przez składnik zamiast odbiera tylko ostatni błąd lub ostrzeżenie. |
IDtsVariableService |
Używane do dostępu do istniejących zmiennych lub tworzyć nowe zmienne w pakiet. |
IDtsPipelineEnvironmentService |
Używany przez składniki przepływ danych do dostępu do obiektu nadrzędnego zadanie przepływ danych i innych składników w przepływie danych.Opracowanie składników takich jak powoli zmienny wymiar Kreator, który tworzy i łączy składniki przepływu dodatkowych danych w razie potrzeby można można użyć tej funkcji. |
Usługi te zapewniają Deweloperzy składników możliwość uzyskania dostępu i tworzenia obiektów w pakiecie, w której jest ładowany do składnika.
Przykład
Poniższy przykład kodu pokazuje integracja klasy interfejsu użytkownika niestandardowego, który implementuje IDtsComponentUI interfejs i formularzy systemu Windows, który służy jako edytor dla składnika.
Niestandardowa klasa interfejs użytkownika
W poniższym kodzie pokazano klasy, która implementuje IDtsComponentUI interfejs. The Edit(IWin32Window, Variables, Connections) metoda creates the component editor and then displays the form. Wartość zwracana przez formularz określa, czy zmiany wprowadzone w składniku są zachowywane.
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
Edytor niestandardowe
W poniższym kodzie pokazano wykonania formularza systemu Windows, który jest wyświetlany podczas wywołania Edit(IWin32Window, Variables, Connections) Metoda.
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
|