Kódování a ladění úlohy skriptu

Platí pro:SQL Server SSIS Integration Runtime v rámci Azure Data Factory

Po nastavení Script úlohy v Script Task Editoru napíšete vlastní kód v prostředí Script task vývoje.

Prostředí pro vývoj skriptových úloh

Úloha Script používá Microsoft Visual Studio Tools for Applications (VSTA) jako vývojové prostředí pro samotný skript.

Skriptový kód je psán v Microsoft Visual Basic nebo Microsoft Visual C#. Skriptovací jazyk určujete nastavením vlastnosti ScriptLanguage v Editoru úloh skriptů. Pokud preferujete jiný programovací jazyk, můžete vyvinout vlastní assembler ve svém zvoleném jazyce a volat jeho funkčnost z kódu v úlohě Script.

Skript, který vytvoříte v úlohě Script, je uložen v definici balíčku. Neexistuje samostatný skriptový soubor. Proto použití skriptové úlohy neovlivňuje nasazení balíčku.

Note

Když navrhnete balíček a ladíte skript, kód skriptu je dočasně zapsán do projektového souboru. Protože ukládání citlivých informací do souboru představuje potenciální bezpečnostní riziko, doporučujeme nezařazovat citlivé informace, jako jsou hesla, do kódu skriptu.

Ve výchozím nastavení je v IDE zakázáno Option Strict .

Struktura skriptového úkolu Project

Když vytvoříte nebo upravíte skript, který je obsažen ve skriptové úlohě, VSTA otevře prázdný nový projekt nebo znovu otevře ten existující. Vytvoření tohoto projektu VSTA neovlivňuje nasazení balíčku, protože projekt je uložen uvnitř souboru balíčku; úloha Script nevytváří další soubory.

Project Items a třídy v Script Task Project

Ve výchozím nastavení project úloha Script zobrazena v okně VSTA Project Explorer obsahující jedinou položku, ScriptMain. Položka ScriptMain pak obsahuje jednu třídu, rovněž nazvanou ScriptMain. Prvky kódu ve třídě se liší podle toho, jaký programovací jazyk jste si vybrali pro skriptní úkol:

  • Když je úloha Script nakonfigurována pro programovací jazyk Visual Basic, třída ScriptMain má veřejnou podrutinu Main. Podprogram ScriptMain.Main je metoda, kterou runtime volá při spuštění vaší Script úlohy.

    Ve výchozím nastavení je jediným kódem v hlavní podprogramu nového skriptu řádek Dts.TaskResult = ScriptResults.Success. Tato linka informuje běžný čas, že úkol byl úspěšný ve svém provedení. Vlastnost Dts.TaskResult je popsána v sekci Returning Results from the Script Task.

  • Když je úloha Script nakonfigurována pro programovací jazyk Visual C#, třída ScriptMain má veřejnou metodu Main. Metoda se volá při spuštění skriptní úlohy.

    Výchozí je hlavní metoda zahrnuta do řádku Dts.TaskResult = (int)ScriptResults.Success. Tato linka informuje běžný čas, že úkol byl úspěšný ve svém provedení.

Položka ScriptMain může obsahovat i jiné třídy než třídu ScriptMain . Třídy jsou dostupné pouze pro úkol Script, ve kterém se nacházejí.

Ve výchozím nastavení obsahuje položka projektu ScriptMain následující automaticky generovaný kód. Šablona kódu také poskytuje přehled o úkolu Script a další informace o tom, jak načíst a manipulovat s objekty SSIS, jako jsou proměnné, události a spojení.

' 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;  
        }  
    }  

Další položky Project v Script Task Project

Projekt úlohy Script může obsahovat i jiné položky než výchozí položku ScriptMain . Do projektu můžete přidat třídy, moduly a kódové soubory. Složky můžete také použít k organizaci skupin položek. Všechny položky, které přidáte, zůstávají uloženy uvnitř balíčku.

Odkazy v Script Task Project

Odkazy na spravované assemble můžete přidat kliknutím pravým tlačítkem na Script task project v Project Exploreru a poté kliknutím na Přidat referenci. Pro více informací viz Odkazování na jiné sestavy ve skriptovacích řešeních.

Note

Odkazy na projekty můžete zobrazit v IDE VSTA v Class View nebo v Project Exploreru. Jedno z těchto oken otevřete v nabídce Zobrazit . Novou referenci můžete přidat z menu Project, z Project Explorer nebo z Class View.

Interakce s balíčkem v skriptové úlohě

Úloha Script využívá globální objekt DTS , což je instance třídy ScriptObjectModel , a její členy k interakci s obsahujícím balíčkem a s runtime Integration Services.

Následující tabulka uvádí hlavní veřejné členy třídy ScriptObjectModel , která je vystavena kódu úlohy Script prostřednictvím globálního objektu DTS . Témata v této části podrobněji rozebírají využití těchto členů.

Člen Purpose
Connections Poskytuje přístup ke správcům spojení definovaným v balíčku.
Events Poskytuje rozhraní pro události, které umožňuje úkolu Script zobrazovat chyby, varování a informační zprávy.
ExecutionValue Poskytuje jednoduchý způsob, jak vrátit jeden objekt do runtime (kromě TaskResult), který lze také použít pro větvení workflow.
Log Záznamy o tom, jako je průběh úkolů a výsledky, jsou povoleným poskytovatelům logů.
TaskResult Hlásí úspěch nebo neúspěch úkolu.
Transaction Poskytuje transakci, pokud existuje, v rámci které kontejner úkolu běží.
Variables Poskytuje přístup k proměnným uvedeným ve vlastnostech úloh ReadOnlyVariables a ReadWriteVariables pro použití ve skriptu.

Kurz ScriptObjectModel také obsahuje některé veřejné členy, které pravděpodobně nebudete využívat.

Člen Description
VariableDispenser Nemovitost Variables poskytuje pohodlnější přístup k proměnným. Ačkoliv můžete použít VariableDispenser, musíte explicitně volat metody pro zamykání a odemykání proměnných pro čtení a zápis. Úloha Script za vás řeší sémantiku zámků, když vlastnost Variables používáte.

Debugování skriptové úlohy

Pro ladění kódu ve vaší skriptové úlohě nastavte alespoň jeden breakpoint v kódu a poté zavřete VSTA IDE, abyste spustili balíček v SQL Server Data Tools (SSDT). Když spuštění balíčku vstoupí do úlohy Script, IDE VSTA se znovu otevře a zobrazí váš kód v režimu pouze pro čtení. Po dosažení bodu přerušení můžete prozkoumat hodnoty proměnných a postupně procházet zbývající kód.

Warning

Nelze ladit skriptovou úlohu, když spusťujete balíček v 64bitovém režimu.

Note

Musíte spustit balíček pro ladění do vaší skriptové úlohy. Pokud vykonáte pouze jednotlivé úkoly, breakpointy v kódu Script tasku jsou ignorovány.

Note

Nelze ladit skriptní úlohu, když ji spustíte jako součást podbalíčku, který je spuštěn z úlohy Execute Package. Breakpointy, které nastavíte v úkolu Script v podbalení, jsou v těchto případech ignorovány. Dětský balíček můžete normálně ladit tím, že ho spustíte zvlášť.

Note

Když ladíte balíček obsahující více skriptových úloh, ladicí nástroj ladí jednu skriptovou úlohu. Systém může ladit další skriptní úlohu, pokud ladicí nástroj dokončí, například v případě kontejneru Foreach Loop nebo For Loop.