Kodowanie i debugowanie zadania skryptu

Dotyczy:SQL Server Środowisko SSIS Integration Runtime w usłudze Azure Data Factory

Po skonfigurowaniu zadania skryptowego w edytorze zadań skryptowych, piszesz własny kod w środowisku tworzenia zadań skryptowych.

Środowisko tworzenia zadań skryptowych

Zadanie skryptu wykorzystuje Microsoft Visual Studio Tools for Applications (VSTA) jako środowisko programistyczne dla samego skryptu.

Kod skryptowy jest pisany w Microsoft Visual Basic lub Microsoft Visual C#. Język skryptu określasz, ustawiając właściwość ScriptLanguage w Edytorze Zadań Skryptów. Jeśli wolisz używać innego języka programowania, możesz opracować niestandardowy asembler w wybranym języku i wywołać jego funkcjonalność z kodu w zadaniu skryptowym.

Skrypt, który tworzysz w zadaniu skryptowym, jest przechowywany w definicji pakietu. Nie ma osobnego pliku skryptowego. Dlatego użycie zadania skryptowego nie wpływa na wdrażanie pakietów.

Note

Gdy projektujesz pakiet i debugujesz skrypt, kod skryptu jest tymczasowo zapisywany w pliku projektu. Ponieważ przechowywanie wrażliwych informacji w pliku stanowi potencjalne zagrożenie dla bezpieczeństwa, zalecamy, abyś nie umieszczał wrażliwych informacji, takich jak hasła, w kodzie skryptu.

Domyślnie opcja Strict jest wyłączona w IDE.

Struktura Script Task Project

Gdy tworzysz lub modyfikujesz skrypt zawarty w zadaniu skryptowym, VSTA otwiera pusty nowy projekt lub ponownie otwiera istniejący. Utworzenie tego projektu VSTA nie wpływa na wdrożenie pakietu, ponieważ projekt jest zapisywany wewnątrz pliku pakietu; zadanie skryptowe nie tworzy dodatkowych plików.

Elementy i klasy Project w Script Task Project

Domyślnie projekt zadania Script wyświetlany w oknie VSTA Project Explorer zawiera pojedynczy element, ScriptMain. Element ScriptMain z kolei zawiera jedną klasę, również nazwaną ScriptMain. Elementy kodu na zajęciach różnią się w zależności od wybranego języka programowania do zadania Script:

  • Gdy zadanie Script jest skonfigurowane dla języka programowania Visual Basic, klasa ScriptMain ma publiczny podprogram Main. Podprogram ScriptMain.Main to metoda, którą wywołuje czas wykonywania podczas wykonywania zadania skryptowego.

    Domyślnie jedynym kodem w głównej podprogramie nowego skryptu jest linia Dts.TaskResult = ScriptResults.Success. Ta linia informuje czas, że zadanie zakończyło się sukcesem. Właściwość Dts.TaskResult jest omówiona w artykule Returning Results from the Script Task.

  • Gdy zadanie Script jest skonfigurowane dla języka Visual C#, klasa ScriptMain ma publiczną metodę Main. Metoda jest wywoływana podczas uruchamiania zadania skryptowego.

    Domyślnie metoda główna zawiera linię Dts.TaskResult = (int)ScriptResults.Success. Ta linia informuje czas, że zadanie zakończyło się sukcesem.

Element ScriptMain może zawierać klasy inne niż klasa ScriptMain . Klasy są dostępne tylko dla zadania skryptowego, w którym się znajdują.

Domyślnie element projektu ScriptMain zawiera następujący automatycznie generowany kod. Szablon kodu zawiera również przegląd zadania skryptowego oraz dodatkowe informacje o tym, jak pobierać i manipulować obiektami SSIS, takimi jak zmienne, zdarzenia i połączenia.

' Microsoft SQL Server Integration Services Script Task  
' Write scripts using Microsoft Visual Basic 2008.  
' The ScriptMain is the entry point class of the script.  
  
Imports System  
Imports System.Data  
Imports System.Math  
Imports Microsoft.SqlServer.Dts.Runtime.VSTAProxy  
  
<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _  
Partial Class ScriptMain  
  
Private Sub ScriptMain_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup  
  
End Sub  
  
Private Sub ScriptMain_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown  
Try  
' Unlock variables from the read-only and read-write variable collection properties  
If (Dts.Variables.Count <> 0) Then  
Dts.Variables.Unlock()  
End If  
Catch ex As Exception  
        End Try  
End Sub  
  
Enum ScriptResults  
Success = DTSExecResult.Success  
Failure = DTSExecResult.Failure  
End Enum  
  
' The execution engine calls this method when the task executes.  
' To access the object model, use the Dts property. Connections, variables, events,  
' and logging features are available as members of the Dts property as shown in the following examples.  
'  
' To reference a variable, call Dts.Variables("MyCaseSensitiveVariableName").Value  
' To post a log entry, call Dts.Log("This is my log text", 999, Nothing)  
' To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, True)  
'  
' To use the connections collection use something like the following:  
' ConnectionManager cm = Dts.Connections.Add("OLEDB")  
' cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;"  
'  
' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.  
'   
' To open Help, press F1.  
  
Public Sub Main()  
'  
' Add your code here  
'  
Dts.TaskResult = ScriptResults.Success  
End Sub  
  
End Class  
/*  
   Microsoft SQL Server Integration Services Script Task  
   Write scripts using Microsoft Visual C# 2008.  
   The ScriptMain is the entry point class of the script.  
*/  
  
using System;  
using System.Data;  
using Microsoft.SqlServer.Dts.Runtime.VSTAProxy;  
using System.Windows.Forms;  
  
namespace ST_1bcfdbad36d94f8ba9f23a10375abe53.csproj  
{  
    [System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]  
    public partial class ScriptMain  
    {  
        private void ScriptMain_Startup(object sender, EventArgs e)  
        {  
  
        }  
  
        private void ScriptMain_Shutdown(object sender, EventArgs e)  
        {  
            try  
            {  
                // Unlock variables from the read-only and read-write variable collection properties  
                if (Dts.Variables.Count != 0)  
                {  
                    Dts.Variables.Unlock();  
                }  
            }  
            catch  
            {  
            }  
        }  
  
        #region VSTA generated code  
        private void InternalStartup()  
        {  
            this.Startup += new System.EventHandler(ScriptMain_Startup);  
            this.Shutdown += new System.EventHandler(ScriptMain_Shutdown);  
        }  
        enum ScriptResults  
        {  
            Success = DTSExecResult.Success,  
            Failure = DTSExecResult.Failure  
        };  
  
        #endregion  
  
        /*  
The execution engine calls this method when the task executes.  
To access the object model, use the Dts property. Connections, variables, events,  
and logging features are available as members of the Dts property as shown in the following examples.  
  
To reference a variable, call Dts.Variables["MyCaseSensitiveVariableName"].Value;  
To post a log entry, call Dts.Log("This is my log text", 999, null);  
To fire an event, call Dts.Events.FireInformation(99, "test", "hit the help message", "", 0, true);  
  
To use the connections collection use something like the following:  
ConnectionManager cm = Dts.Connections.Add("OLEDB");  
cm.ConnectionString = "Data Source=localhost;Initial Catalog=AdventureWorks;Provider=SQLNCLI10;Integrated Security=SSPI;Auto Translate=False;";  
  
Before returning from this method, set the value of Dts.TaskResult to indicate success or failure.  
  
To open Help, press F1.  
*/  
  
        public void Main()  
        {  
            // TODO: Add your code here  
            Dts.TaskResult = (int)ScriptResults.Success;  
        }  
    }  

Dodatkowe elementy Project w Script Task Project

Projekt zadania Script może zawierać elementy inne niż domyślny element ScriptMain . Możesz dodawać klasy, moduły i pliki kodu do projektu. Możesz też używać folderów do organizacji grup przedmiotów. Wszystkie dodane przedmioty są przechowywane w pakiecie.

Odniesienia w Script Task Project

Możesz dodać odniesienia do zarządzanych asembli, klikając prawym przyciskiem myszy na Script task project w Project Explorer, a następnie kliknij Dodaj Referencję. Więcej informacji można znaleźć w artykule Referencowanie innych asembli w rozwiązaniach skryptowych.

Note

Możesz przeglądać odniesienia do projektów w IDE VSTA w Class View lub w Project Explorer. Otwierasz jedno z tych okien z menu Widok. Możesz dodać nowe odniesienie z menu Project, z Project Explorer lub z Class View.

Interakcja z pakietem w zadaniu skryptowym

Zadanie skryptowe wykorzystuje globalny obiekt DTS , będący instancją klasy ScriptObjectModel , oraz jego członków do interakcji z zawartym pakietem oraz z runtime Integration Services.

Poniższa tabela przedstawia głównych publicznych członków klasy ScriptObjectModel , która jest wystawiona na kod zadań skryptowych poprzez globalny obiekt DTS . Tematy w tej sekcji omawiają bardziej szczegółowo wykorzystanie tych członków.

Członek Purpose
Connections Zapewnia dostęp do menedżerów połączeń zdefiniowanych w pakiecie.
Events Zapewnia interfejs zdarzeń, który pozwala zadaniu skryptowemu generować błędy, ostrzeżenia i komunikaty informacyjne.
ExecutionValue Zapewnia prosty sposób na zwrócenie pojedynczego obiektu do środowiska wykonywania (oprócz TaskResult), który może być również używany do rozgałęziania workflow.
Log Rejestruje informacje takie jak postęp zadań i wyniki do włączonych dostawców logów.
TaskResult Raportuje sukces lub porażkę zadania.
Transaction Dostarcza transakcję, jeśli istnieje, w której działa kontener zadania.
Variables Zapewnia dostęp do zmiennych wymienionych w właściwościach zadań ReadOnlyVariables i ReadWriteVariables do wykorzystania w skrypcie.

Zajęcia ScriptObjectModel zawierają także członków z grupy publicznej, których prawdopodobnie nie wykorzystasz.

Członek Description
VariableDispenser Własność ta Variables zapewnia wygodniejszy dostęp do zmiennych. Chociaż możesz użyć , VariableDispensermusisz wyraźnie wywołać metody blokowania i odblokowywania zmiennych do odczytu i zapisu. Zadanie skryptu zajmuje się semantyką blokowania za ciebie, gdy używasz Variables tej właściwości.

Debugowanie zadania skryptowego

Aby debugować kod w zadaniu skryptowym, ustaw przynajmniej jeden punkt przerwania w kodzie, a następnie zamknij VSTA IDE, aby uruchomić pakiet w SQL Server Data Tools (SSDT). Gdy wykonanie pakietu wchodzi w zadanie skryptu, IDE VSTA ponownie się otwiera i wyświetla Twój kod w trybie tylko do odczytu. Po osiągnięciu punktu przerwania możesz przeanalizować wartości zmiennych i przejść przez pozostały kod.

Warning

Nie można debugować zadania skryptu, gdy uruchamiasz pakiet w trybie 64-bitowym.

Note

Musisz uruchomić pakiet, aby debugować do zadania skryptowego. Jeśli wykonasz tylko poszczególne zadanie, punkty przerwania w kodzie zadania skryptowego są ignorowane.

Note

Nie można debugować zadania skryptowego, gdy uruchamiasz zadanie skryptowe jako część pakietu podzespołowego uruchamianego z zadania Wykonaj pakiet. Punkty przerwania ustawione w zadaniu skryptowym w pakiecie podrzędnym są w takich sytuacjach pomijane. Możesz normalnie debugować pakiet potomny, uruchamiając go osobno.

Note

Gdy debugujesz pakiet zawierający wiele zadań skryptowych, debugger debuguje jedno zadanie skryptowe. System może debugować inne zadanie skryptu, jeśli debugger zostanie ukończony, jak w przypadku kontenera Foreach Loop lub For Loop.