Aracılığıyla paylaş


Özel Görev Kodlama

Şunlar için geçerlidir:SQL Server Azure Data Factory'de SSIS Entegrasyon Çalışma Zamanı

Microsoft.SqlServer.Dts.Runtime.Task temel sınıfından devralan bir sınıf oluşturduktan ve özniteliğini sınıfa uyguladıktan DtsTaskAttribute sonra, özel işlevselliğinizi sağlamak için temel sınıfın özelliklerinin ve yöntemlerinin uygulanmasını geçersiz kılmanız gerekir.

Görevi Yapılandırma

Görevi Doğrulama

Integration Services paketi tasarlarken, doğrulamayı kullanarak her görevdeki ayarları doğrulayabilir, böylece tüm hataları yalnızca çalışma zamanında bulmak yerine, ayarlanır ayarlanmaz yanlış veya uygunsuz ayarları yakalayabilirsiniz. Doğrulamanın amacı, görevin başarıyla çalışmasını engelleyecek geçersiz ayarlar veya bağlantılar içerip içermediğini belirlemektir. Bu, paketin ilk çalıştırmalarında çalıştırma şansı iyi olan görevler içerdiğinden emin olur.

Doğrulamayı, özel kodda Validate yöntemini kullanarak uygulayabilirsiniz. Çalışma zamanı altyapısı, görevdeki Validate yöntemini çağırarak görevi doğrular . Size başarılı veya başarısız bir görev doğrulaması sağlayan ölçütleri tanımlamak ve bu değerlendirmenin sonucunu çalışma zamanı altyapısına bildirmek görev geliştiricisinin sorumluluğundadır.

Görev Soyut Temel Sınıfı

Microsoft.SqlServer.Dts.Runtime.Task soyut temel sınıfı, her görevin doğrulama ölçütlerini tanımlamak için geçersiz kıldığını doğrula yöntemini sağlar. SSIS Tasarımcısı, paket tasarımı sırasında Validate yöntemini otomatik olarak birkaç kez çağırır ve görevin yapılandırmasıyla ilgili sorunları tanımlamaya yardımcı olmak için uyarılar veya hatalar oluştuğunda kullanıcıya görsel ipuçları sağlar. Görevler, numaralandırmadan DTSExecResult bir değer döndürerek ve uyarı ve hata olayları oluşturarak doğrulama sonuçları sağlar. Bu olaylar, kullanıcıya SSIS Tasarımcısı'nda görüntülenen bilgileri içerir.

Doğrulama için bazı örnekler aşağıda verilmiştir:

  • Bağlantı yöneticisi belirli bir dosya adını doğrular.

  • Bağlantı yöneticisi, giriş türünün XML dosyası gibi beklenen türde olduğunu doğrular.

  • Veritabanı girişi bekleyen bir görev, veritabanı olmayan bir bağlantıdan veri alamayacağını doğrular.

  • Bir görev, özelliklerinin hiçbirinin aynı görevde ayarlanan diğer özelliklerle çelişmediğini garanti eder.

  • Görev, yürütme zamanında görev tarafından kullanılan tüm gerekli kaynakların kullanılabilir olmasını garanti eder.

Performans, neyin doğrulanıp neyin doğrulanmadığını belirlemede dikkate alınması gereken bir şeydir. Örneğin, bir göreve giriş, düşük bant genişliğine veya yoğun trafiğe sahip bir ağ üzerinden bağlantı olabilir. Kaynağın kullanılabilir olduğunu doğrulamaya karar verirseniz doğrulamanın işlenmesi birkaç saniye sürebilir. Başka bir doğrulama, yüksek talepte olan bir sunucuya gidiş dönüşe neden olabilir ve doğrulama yordamı yavaş olabilir. Doğrulanabilen birçok özellik ve ayar olsa da, her şey doğrulanmamalıdır.

  • Validate yöntemindeki kod, görev çalıştırılana kadar tarafından TaskHost da çağrılır ve TaskHost doğrulama başarısız olursa yürütmeyi iptal eder.

Doğrulama Sırasında Kullanıcı Arabiriminde Dikkat Edilmesi Gerekenler

Microsoft.SqlServer.Dts.Runtime.Task, IDTSComponentEvents yöntemine parametre olarak bir arabirim içerir. IDTSComponentEvents Arabirimi, olayları çalışma zamanı altyapısına yükseltmek için görev tarafından çağrılan yöntemleri içerir. FireWarning Doğrulama sırasında bir uyarı veya hata koşulu oluştuğunda ve FireError yöntemleri çağrılır. Her iki uyarı yöntemi de hata kodu, kaynak bileşen, açıklama, Yardım dosyası ve Yardım bağlam bilgilerini içeren aynı parametreleri gerektirir. SSIS Tasarımcısı, tasarım yüzeyinde görsel ipuçları görüntülemek için bu bilgileri kullanır. Tasarımcı tarafından sağlanan görsel ipuçları, tasarımcı yüzeyinde görevin yanında görünen bir ünlem simgesi içerir. Bu görsel ipucu, yürütmenin devam etmesi için kullanıcıya görevin ek yapılandırma gerektirdiğini bildirir.

Ünlem simgesi, hata iletisi içeren bir Araç İpucu da görüntüler. Hata iletisi, görev tarafından olayın açıklama parametresinde sağlanır. Hata iletileri ayrıca SQL Server Veri Araçları'nın (SSDT) Görev Listesi bölmesinde görüntülenir ve kullanıcıya tüm doğrulama hatalarını görüntülemek için merkezi bir konum sağlar.

Doğrulama Örneği

Aşağıdaki kod örneği , UserName özelliğine sahip bir görevi gösterir. Bu özellik doğrulamanın başarılı olması için gerektiği şekilde belirtildi. Özellik ayarlanmamışsa, görev bir hata gönderip numaralandırmadan Failure döndürürDTSExecResult. Validate yöntemi bir try/catch bloğunda sarmalanır ve bir özel durum oluşursa doğrulama başarısız olur.

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  

Görevi Kalıcı Hale Ekleme

Normalde bir görev için özel kalıcılık uygulamanız gerekmez. Özel kalıcılık yalnızca bir nesnenin özellikleri karmaşık veri türleri kullandığında gereklidir. Daha fazla bilgi için bkz. Integration Services için Özel Nesneler Geliştirme.

Görevi Yürütme

Bu bölümde, görevler tarafından devralınan ve geçersiz kılınan Execute yönteminin nasıl kullanılacağı açıklanmaktadır. Bu bölümde, görev yürütme sonuçları hakkında bilgi sağlamanın çeşitli yolları da açıklanmaktadır.

Execute Yöntemi

Bir pakette yer alan görevler Integration Services çalışma zamanı Execute yöntemini çağırdığında çalıştırılır. Görevler bu yöntemde temel iş mantığını ve işlevlerini uygular ve iletileri göndererek, numaralandırmadan DTSExecResult bir değer döndürerek ve ExecutionValue özelliğinin özellik alma özelliğini geçersiz kılarak yürütme sonuçlarını sağlar.

Microsoft.SqlServer.Dts.Runtime.Task temel sınıfı, yönteminin Execute varsayılan uygulamasını sağlar. Özel görevler, çalışma zamanı işlevlerini tanımlamak için bu yöntemi geçersiz kılar. TaskHost nesnesi, görevi çalışma zamanı altyapısından ve paketteki diğer nesnelerden yalıtarak sarmalar. Bu yalıtım nedeniyle görev, yürütme sırasına göre paketteki konumunun farkında değildir ve yalnızca çalışma zamanı tarafından çağrıldığında çalışır. Bu mimari, yürütme sırasında görevler paketi değiştirdiğinde oluşabilecek sorunları önler. Göreve paketteki diğer nesnelere yalnızca yönteminde parametre Execute olarak sağlanan nesneler aracılığıyla erişim sağlanır. Bu parametreler görevlerin olayları oluşturmasına, olay günlüğüne girdiler yazmasına, değişken koleksiyonuna erişmesine ve işlemlerdeki veri kaynaklarına bağlantıları listelemesine olanak sağlarken, paketin kararlılığını ve güvenilirliğini garanti etmek için gereken yalıtımı korumaya devam eder.

Aşağıdaki tabloda, yöntemindeki Execute göreve sağlanan parametreler listelenir.

Parametre Açıklama
Connections Görev için kullanılabilen bir nesne koleksiyonu ConnectionManager içerir.
VariableDispenser Görev için kullanılabilen değişkenleri içerir. Görevler VariableDispenser aracılığıyla değişkenleri kullanır; görevler değişkenleri doğrudan kullanmaz. Değişken dağıtıcı değişkenleri kilitler ve kilidini açar ve kilitlenmeleri veya üzerine yazmaları önler.
IDTSComponentEvents Çalışma zamanı altyapısına olayları yükseltmek için görev tarafından çağrılan yöntemleri içerir.
IDTSLogging Görev tarafından olay günlüğüne girdi yazmak için kullanılan yöntemleri ve özellikleri içerir.
Nesne Varsa kapsayıcının parçası olduğu işlem nesnesini içerir. Bu değer, bir AcquireConnection nesnenin yöntemine ConnectionManager parametre olarak geçirilir.

Yürütme Geri Bildirimi Sağlama

Görevler, özel durumların çalışma zamanı altyapısına yükseltilmesini önlemek için kodlarını try/catch bloklarına sarmalar. Bu, paketin yürütmeyi tamamlayıp beklenmedik bir şekilde durmamasını sağlar. Ancak, çalışma zamanı altyapısı bir görevin yürütülmesi sırasında oluşabilecek hata koşullarını işlemek için başka mekanizmalar sağlar. Bunlar arasında hata ve uyarı iletileri gönderme, yapıdan DTSExecResult bir değer döndürme, iletileri gönderme, değeri döndürme DTSExecResult ve özellik aracılığıyla ExecutionValue görev yürütme sonuçları hakkındaki bilgileri açıklama sayılabilir.

IDTSComponentEvents Arabirim, çalışma zamanı altyapısına FireWarning hata ve uyarı iletileri göndermek için görev tarafından çağrılabilen ve FireError yöntemlerini içerir. Her iki yöntem de hata kodu, kaynak bileşen, açıklama, Yardım dosyası ve yardım bağlamı bilgileri gibi parametreler gerektirir. Görevin yapılandırmasına bağlı olarak, çalışma zamanı olayları ve kesme noktalarını yükselterek veya olay günlüğüne bilgi yazarak bu iletilere yanıt verir.

ayrıca TaskHost yürütme sonuçları hakkında ek bilgi sağlamak için kullanılabilecek özelliği sağlar ExecutionValue . Örneğin, bir görev Execute yönteminin bir parçası olarak tablodaki satırları silerse, özelliğin değeri ExecutionValue olarak silinen satır sayısını döndürebilir. Buna ek olarak, TaskHost özelliği sağlar ExecValueVariable . Bu özellik, kullanıcının görevden döndürüleni ExecutionValue görev tarafından görünen herhangi bir değişkenle eşlemesine olanak tanır. Belirtilen değişken daha sonra görevler arasında öncelik kısıtlamaları oluşturmak için kullanılabilir.

Yürütme Örneği

Aşağıdaki kod örneği Execute yönteminin bir uygulamasını gösterir ve geçersiz kılınan ExecutionValue özelliğini gösterir. Görev, görevin fileName özelliği tarafından belirtilen dosyayı siler. Görev, dosya yoksa veya fileName özelliği boş bir dizeyse bir uyarı gönderir. Görev, dosyanın silinip silinmediğini belirtmek için özelliğinde bir ExecutionValue değeri döndürür.

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  

Ayrıca Bkz.

Özel Görev Oluşturma
Özel Görev Kodlama
Özel Görev için Kullanıcı Arabirimi Geliştirme