Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
SSIS integrációs futtatókörnyezet az Azure Data Factory-ban
Miután létrehozott egy, a Microsoft.SqlServer.Dts.Runtime.Task base osztálytól öröklő osztályt, és alkalmazta az DtsTaskAttribute attribútumot az osztályra, felül kell bírálnia az alaposztály tulajdonságainak és metódusainak implementálását az egyéni funkciók biztosításához.
A feladat konfigurálása
A tevékenység érvényesítése
Az Integration Services-csomagok tervezésekor érvényesítéssel ellenőrizheti az egyes feladatok beállításait, így a helytelen vagy nem megfelelő beállításokat a beállítás után azonnal észlelheti, ahelyett, hogy csak futásidőben találna minden hibát. Az ellenőrzés célja annak meghatározása, hogy a tevékenység érvénytelen beállításokat vagy kapcsolatokat tartalmaz-e, amelyek megakadályozzák a sikeres futást. Ez biztosítja, hogy a csomag olyan feladatokat tartalmaz, amelyek jó eséllyel futnak az első futtatáskor.
Az érvényesítést az Ellenőrzés metódussal egyéni kódban valósíthatja meg. A futásidejű motor a tevékenység érvényesítési módszerének meghívásával ellenőrzi a tevékenységet. A feladatfejlesztő feladata meghatározni azokat a feltételeket, amelyek sikeres vagy sikertelen feladatérvényesítést biztosítanak, és értesíteni kell a futásidejű motort az értékelés eredményéről.
Tevékenység absztrakt alaposztálya
A Microsoft.SqlServer.Dts.Runtime.Task abstract base osztály biztosítja az érvényesítési módszert, amelyet az egyes tevékenységek felülbírálnak az érvényességi feltételek meghatározásához. Az SSIS Designer a csomagtervezés során automatikusan többször meghívja az Érvényesítési módszert, és vizuális jelzéseket jelenít meg a felhasználónak, amikor figyelmeztetések vagy hibák lépnek fel a feladat konfigurációjával kapcsolatos problémák azonosításához. A feladatok az enumerálásból származó érték visszaadásával, valamint a figyelmeztetési és hibaesemények növelésével biztosítják az DTSExecResult érvényesítési eredményeket. Ezek az események olyan információkat tartalmaznak, amelyek az SSIS Designerben jelennek meg a felhasználó számára.
Néhány példa az ellenőrzésre:
A kapcsolatkezelő ellenőrzi a megadott fájlnevet.
A kapcsolatkezelő ellenőrzi, hogy a bemenet típusa a várt típus-e, például egy XML-fájl.
Egy olyan feladat, amely adatbázis-bemenetre számít, ellenőrzi, hogy nem tud-e adatokat fogadni egy nem adatbázis-kapcsolatból.
A tevékenységek garantálják, hogy egyik tulajdonsága sem ütközik az ugyanazon tevékenységen beállított többi tulajdonsággal.
A tevékenységek garantálják, hogy a tevékenység által a végrehajtáskor használt összes szükséges erőforrás elérhető.
A teljesítmény megfontolandó annak meghatározásában, hogy mi van érvényesítve, és mi nem. Előfordulhat például, hogy egy feladat bemenete egy alacsony sávszélességű vagy nagy forgalmú hálózaton keresztüli kapcsolat. Az ellenőrzés feldolgozása több másodpercet is igénybe vehet, ha úgy dönt, hogy ellenőrzi, hogy az erőforrás elérhető-e. Egy másik ellenőrzés nagy igényű kiszolgálóra való utazást okozhat, és az ellenőrzési rutin lassú lehet. Bár számos tulajdonság és beállítás érvényesíthető, nem minden érvényesíthető.
- Az Ellenőrzés metódusban szereplő kódot a feladat futtatása előtt is meghívja TaskHost , és ha az ellenőrzés sikertelen, a TaskHost végrehajtás leáll.
A felhasználói felület szempontjai az ellenőrzés során
A Microsoft.SqlServer.Dts.Runtime.Task tartalmaz egy IDTSComponentEvents felületet paraméterként az Érvényesítési módszerhez. Az IDTSComponentEvents interfész tartalmazza azokat a metódusokat, amelyeket a feladat meghív annak érdekében, hogy eseményeket emeljen ki a futásidejű motor számára. A FireWarning rendszer meghívja a FireError metódusokat, amikor figyelmeztetés vagy hibaállapot lép fel az ellenőrzés során. Mindkét figyelmeztető módszer ugyanazokat a paramétereket igényli, például hibakódot, forrásösszetevőt, leírást, súgófájlt és súgókörnyezetet. Az SSIS Designer ezeket az információkat használja a vizuális jelek megjelenítésére a tervezési felületen. A tervező által biztosított vizuális jelek egy felkiáltójelet tartalmaznak, amely a tervezőfelületen a feladat mellett jelenik meg. Ez a vizualizáció jelzi a felhasználónak, hogy a feladat további konfigurációt igényel a végrehajtás folytatása előtt.
A felkiáltójel ikon egy hibaüzenetet tartalmazó elemleírást is megjelenít. A hibaüzenetet a feladat adja meg az esemény leírási paraméterében. A hibaüzenetek az SQL Server Data Tools (SSDT) Feladatlista paneljén is megjelennek, így a felhasználó központi helyet biztosít az összes érvényesítési hiba megtekintéséhez.
Érvényesítési példa
Az alábbi példakód egy UserName tulajdonsággal rendelkező feladatot mutat be. Ez a tulajdonság a sikeres ellenőrzéshez szükségesként lett megadva. Ha a tulajdonság nincs beállítva, a tevékenység hibát jelez, és az Failure enumerálásból ad visszaDTSExecResult. Az Érvényesítési módszer egy próba-/fogási blokkba van csomagolva, és kivétel esetén meghiúsul az ellenőrzés.
using System;
using Microsoft.SqlServer.Dts.Runtime;
public class SampleTask : Task
{
private string userName = "";
public override DTSExecResult Validate(Connections connections,
VariableDispenser variableDispenser, IDTSComponentEvents events,
IDTSLogging log)
{
try
{
if (this.userName == "")
{
// Raise an OnError event.
events.FireError(0, "SampleTask", "The UserName property must be configured.", "", 0);
// Fail validation.
return DTSExecResult.Failure;
}
// Return success.
return DTSExecResult.Success;
}
catch (System.Exception exception)
{
// Capture exceptions, post an error, and fail validation.
events.FireError(0, "Sampletask", exception.Message, "", 0);
return DTSExecResult.Failure;
}
}
public string UserName
{
get
{
return this.userName;
}
set
{
this.userName = value;
}
}
}
Imports System
Imports Microsoft.SqlServer.Dts.Runtime
Public Class SampleTask
Inherits Task
Private _userName As String = ""
Public Overrides Function Validate(ByVal connections As Connections, _
ByVal variableDispenser As VariableDispenser, _
ByVal events As IDTSComponentEvents, _
ByVal log As IDTSLogging) As DTSExecResult
Try
If Me._userName = "" Then
' Raise an OnError event.
events.FireError(0, "SampleTask", "The UserName property must be configured.", "", 0)
' Fail validation.
Return DTSExecResult.Failure
End If
' Return success.
Return DTSExecResult.Success
Catch exception As System.Exception
' Capture exceptions, post an error, and fail validation.
events.FireError(0, "Sampletask", exception.Message, "", 0)
Return DTSExecResult.Failure
End Try
End Function
Public Property UserName() As String
Get
Return Me._userName
End Get
Set(ByVal Value As String)
Me._userName = Value
End Set
End Property
End Class
A tevékenység megőrzése
Általában nem kell egyéni adatmegőrzést implementálnia egy tevékenységhez. Egyéni adatmegőrzésre csak akkor van szükség, ha egy objektum tulajdonságai összetett adattípusokat használnak. További információ: Egyéni objektumok fejlesztése az integrációs szolgáltatásokhoz.
A feladat végrehajtása
Ez a szakasz azt ismerteti, hogyan használhatja a tevékenységek által örökölt és felüldiírált Végrehajtási metódust. Ez a szakasz a tevékenységek végrehajtásának eredményeire vonatkozó információk különböző módjait is ismerteti.
Végrehajtási módszer
A csomagban található feladatok akkor futnak, amikor az Integration Services futtatókörnyezete meghívja az Execute metódust. A feladatok ebben a módszerben implementálják az alapvető üzleti logikájukat és működésüket, és üzenetek közzétételével, az enumerálás értékének DTSExecResult visszaadásával és a ExecutionValue tulajdonság tulajdonság értékének felülírásával biztosítják a végrehajtás eredményét.
A Microsoft.SqlServer.Dts.Runtime.Task base osztály biztosítja a Execute metódus alapértelmezett implementációját. Az egyéni tevékenységek felülbírálják ezt a metódust a futásidejű funkciók definiálásához. Az TaskHost objektum körbefuttatja a feladatot, és elkülöníti a futásidejű motortól és a csomag többi objektumától. Az elkülönítés miatt a feladat nem tud a csomagban elfoglalt helyéről a végrehajtási sorrend tekintetében, és csak akkor fut, ha a futtatókörnyezet meghívja. Ez az architektúra megakadályozza azokat a problémákat, amelyek akkor fordulhatnak elő, ha a tevékenységek a végrehajtás során módosítják a csomagot. A feladat csak a metódus paramétereiként megadott objektumokon keresztül fér hozzá a Execute csomag többi objektumához. Ezek a paraméterek lehetővé teszik, hogy a feladatok eseményeket emeljenek ki, bejegyzéseket írjanak az eseménynaplóba, hozzáférjenek a változók gyűjteményéhez, és kapcsolatokat létesíthessenek a tranzakciók adatforrásaihoz, miközben továbbra is fenntartják a csomag stabilitásának és megbízhatóságának biztosításához szükséges elkülönítést.
Az alábbi táblázat a metódusban a tevékenységhez megadott paramétereket sorolja fel Execute .
| Paraméter | Leírás |
|---|---|
| Connections | A feladat számára elérhető objektumok gyűjteményét ConnectionManager tartalmazza. |
| VariableDispenser | A tevékenység számára elérhető változókat tartalmazza. A tevékenységek változókat használnak a VariableDispenseren keresztül; a tevékenységek nem használnak közvetlenül változókat. A változóadagoló zárolja és feloldja a változókat, és megakadályozza a holtpontok vagy felülírások kialakulását. |
| IDTSComponentEvents | A feladat által meghívott metódusokat tartalmazza az események futásidejű motorra való emeléséhez. |
| IDTSLogging | Metódusokat és tulajdonságokat tartalmaz, amelyeket a tevékenység használ az eseménynaplóba való bejegyzések írásához. |
| Objektum | Tartalmazza azt a tranzakcióobjektumot, amely a tároló része, ha van ilyen. Ez az érték paraméterként lesz átadva egy AcquireConnectionConnectionManager objektum metódusának. |
Végrehajtási visszajelzés küldése
A feladatok a kódot kipróbálási/fogási blokkokban csomagolják, hogy megakadályozzák a kivételeket a futásidejű motoron. Ez biztosítja, hogy a csomag befejezze a végrehajtást, és ne állítsa le váratlanul. A futásidejű motor azonban más mechanizmusokat is biztosít a feladat végrehajtása során előforduló hibafeltételek kezelésére. Ezek közé tartoznak a közzétételi hibák és figyelmeztető üzenetek, egy érték visszaadása a DTSExecResult struktúrából, üzenetek közzététele, az DTSExecResult érték visszaadása, valamint a tevékenység végrehajtásának eredményeivel kapcsolatos információk közzététele a ExecutionValue tulajdonságon keresztül.
A IDTSComponentEvents felület tartalmazza azokat a FireWarning metódusokat és FireError metódusokat, amelyeket a feladat meghívhat a hiba- és figyelmeztető üzenetek futásidejű motorra való közzétételéhez. Mindkét módszerhez olyan paraméterek szükségesek, mint a hibakód, a forrásösszetevő, a leírás, a súgófájl és a súgókörnyezet adatai. A feladat konfigurációjától függően a futtatókörnyezet események és töréspontok emelésével vagy az eseménynaplóba való információ írásával válaszol ezekre az üzenetekre.
Az TaskHost is biztosítja a ExecutionValue tulajdonságot, amely a végrehajtás eredményével kapcsolatos további információk megadására használható. Ha például egy tevékenység sorokat töröl egy táblából az Execute metódus részeként, a tulajdonság értékeként ExecutionValue törölt sorok számát is visszaadhatja. Emellett a TaskHost tulajdonságot ExecValueVariable is biztosítja. Ez a tulajdonság lehetővé teszi, hogy a felhasználó leképozza a ExecutionValue feladatból visszaadott adatokat a tevékenység számára látható bármely változóra. A megadott változó ezután a tevékenységek közötti elsőbbségi korlátozások megállapítására használható.
Végrehajtási példa
Az alábbi példakód az Execute metódus implementációját mutatja be, és egy felülírt ExecutionValue tulajdonságot mutat be. A tevékenység törli a tevékenység fileName tulajdonsága által megadott fájlt. A feladat figyelmeztetést küld, ha a fájl nem létezik, vagy ha a fileName tulajdonság üres sztring. A feladat egy logikai értéket ad vissza a ExecutionValue tulajdonságban, amely jelzi, hogy a fájl törölve lett-e.
using System;
using Microsoft.SqlServer.Dts.Runtime;
public class SampleTask : Task
{
private string fileName = "";
private bool fileDeleted = false;
public override DTSExecResult Execute(Connections cons,
VariableDispenser vars, IDTSComponentEvents events,
IDTSLogging log, Object txn)
{
try
{
if (this.fileName == "")
{
events.FireWarning(0, "SampleTask", "No file specified.", "", 0);
this.fileDeleted = false;
}
else
{
if (System.IO.File.Exists(this.fileName))
{
System.IO.File.Delete(this.fileName);
this.fileDeleted = true;
}
else
this.fileDeleted = false;
}
return DTSExecResult.Success;
}
catch (System.Exception exception)
{
// Capture the exception and post an error.
events.FireError(0, "Sampletask", exception.Message, "", 0);
return DTSExecResult.Failure;
}
}
public string FileName
{
get { return this.fileName; }
set { this.fileName = value; }
}
public override object ExecutionValue
{
get { return this.fileDeleted; }
}
}
Imports System
Imports Microsoft.SqlServer.Dts.Runtime
Public Class SampleTask
Inherits Task
Private _fileName As String = ""
Private _fileDeleted As Boolean = False
Public Overrides Function Execute(ByVal cons As Connections, _
ByVal vars As VariableDispenser, ByVal events As IDTSComponentEvents, _
ByVal log As IDTSLogging, ByVal txn As Object) As DTSExecResult
Try
If Me._fileName = "" Then
events.FireWarning(0, "SampleTask", "No file specified.", "", 0)
Me._fileDeleted = False
Else
If System.IO.File.Exists(Me._fileName) Then
System.IO.File.Delete(Me._fileName)
Me._fileDeleted = True
Else
Me._fileDeleted = False
End If
End If
Return DTSExecResult.Success
Catch exception As System.Exception
' Capture the exception and post an error.
events.FireError(0, "Sampletask", exception.Message, "", 0)
Return DTSExecResult.Failure
End Try
End Function
Public Property FileName() As String
Get
Return Me._fileName
End Get
Set(ByVal Value As String)
Me._fileName = Value
End Set
End Property
Public Overrides ReadOnly Property ExecutionValue() As Object
Get
Return Me._fileDeleted
End Get
End Property
End Class
Lásd még:
Egyéni feladat létrehozása
Egyéni feladat kódolása
Felhasználói felület fejlesztése egyéni feladathoz