Özel görev kodlama

Dan devralan bir sınıf oluşturduktan sonra Tasktemel sınıf ve uygulanan DtsTaskAttributeözniteliği sınıfa uygulaması özellikleri ve yöntemleri, özel işlevsellik sağlamak için temel sınıf geçersiz kılmalısınız.

Görev yapılandırma

Görev doğrulama

Ne zaman tasarlamakta bir Integration Servicespaketi doğrulama her görevin ayarlarını doğrulamak için kullanabileceğiniz böylece onlar, çalışma anında yalnızca tüm hataları bulma yerine ayarlanan en kısa sürede yanlış ya da uygunsuz ayarlarını yakalamak için. Görev geçersiz ayarları ya da başarıyla çalışmasını engeller bağlantıları içerip içermediğini belirlemek için doğrulama amacı budur. Bu paketin ilk onların kaçak çalışan iyi bir şansa sahip görevleri içerir emin olmayı sağlar.

Doğrulama kullanarak uygulayabileceğiniz Validateyönteminde özel kod. Çalışma zamanı altyapısı göreve çağırarak doğrulama Validateyöntemi görevde. O vermek sen-e doğru bir görevi başarılı ya da başarısız doğrulama ölçütlerini tanımlamak ve çalışma zamanı altyapısı bu değerlendirme sonucunu bildirmek için görev geliştirici sorumludur.

Görev soyut temel sınıfı

TaskSoyut temel sınıfı sağlar Validatedoğrulama ölçütlerini tanımlamak için görev kılan yöntemi. SSISTasarımcısı otomatik olarak aramaları Validateyöntemi birden çok kez sırasında paket tasarımı ve görev yapılandırmasıyla ilgili sorunları tanımlamak için uyarı veya hata oluştuğunda kullanıcıya görsel yardımlar sağlar. Görevleri arasında bir değer döndüren tarafından doğrulama sonuçları sağlamak DTSExecResultnumaralandırma ve uyarı ve hata olaylarını yükselterek. Bu olaylar kullanıcıya görüntülenen bilgi içeren SSIStasarımcı.

Doğrulama için bazı örnekler izleyin:

  • Bağlantı Yöneticisi, belirli dosya adı doğrular.

  • Bağlantı Yöneticisi, giriş türü xml dosyası gibi beklenen türü olduğunu doğrular.

  • Veritabanı giriş bekliyor görev, o olmayan veritabanı bağlantı verileri alamıyor doğrular.

  • Bir görevin özelliklerini hiçbiri diğer özellikleri aynı görev üzerinde çeliştiği garanti eder.

  • Bir görevi, gerekli tüm yürütülmesi sırasında görev tarafından kullanılan kaynaklar kullanılabilir garanti eder.

Performansı ne doğrulanır ve ne değildir belirlenmesinde dikkate alınacak bir şeydir. Örneğin, bir görev girişi düşük bant genişliği ya da yoğun trafiği olan bir ağ bir bağlantı olabilir. Doğrulama kaynağın kullanılabilir olduğunu doğrulamak karar işlem birkaç saniye sürebilir. Bir gidiş yüksek talep olan bir sunucuya neden olabilir başka bir doğrulama ve doğrulama yordamı yavaş olabilir. Olmasına rağmen birçok özellikleri ve doğrulanabilir ayarları, her şey doğrulanması.

  • Kod Validateyöntemi olarak da adlandırılır TaskHostgörevi çalıştırmadan önce ve TaskHostdoğrulama başarısız olursa yürütme iptal eder.

Doğrulama sırasında kullanıcı arabirimi hakkında önemli noktalar

Taskİçeren bir IDTSComponentEventsarabirimi parametre olarak Validateyöntemi. IDTSComponentEventsArabirimini içeren görev tarafından çalışma zamanı altyapısı Olayları artırmak denir yöntemleri. FireWarningVe FireErrordoğrulama sırasında bir uyarı veya hata durumu ortaya çıktığında yöntemleri olarak adlandırılan. İki uyarı yöntemi, bir hata kodu, kaynak bileşeni, açıklama, Yardım dosyası ve Yardım içeriği bilgileri dahil aynı parametreleri gerektirir. SSISTasarımcısı, Tasarım yüzeyi üzerinde görsel ipuçları görüntülemek için bu bilgiyi kullanır. Tasarımcısı tarafından sağlanan görsel yardımlar yanında görev tasarımcı yüzey üzerinde görünen ünlem simge içerir. Bu görsel işaret kullanıcıya yürütülmesine devam etmeden önce görev ek yapılandırma gerekir sinyalleri.

Ünlem de hata iletisi içeren bir araç ipucu görüntülenir. Hata iletisi, olay açıklama parametresi görevi tarafından sağlanır. Hata iletileri de görüntülenir Task List bölmesinde SQL Server Veri Akışı Araçları (SSDT), kullanıcının tüm doğrulama hatalarını görüntülemek için merkezi bir yer sağlayarak.

Doğrulama örnek

Aşağıdaki kod örneği olan bir görev gösterir bir UserNameözellik. Bu özellik belirtilen doğrulama başarılı olmak için gerektiği gibi. Özelliği ayarlı değilse, görev hata mesajları ve döner Failuredan DTSExecResultnumaralandırma. ValidateYöntemi bir try/catch bloğu içinde paketlenir 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;
    }
  }
}
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
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örev persisting

Normalde bir görev için özel kalıcılık uygulamak gerekmez. Özel kalıcılık, bir nesnenin özelliklerini karmaşık veri türlerini kullandığınızda gereklidir. Daha fazla bilgi için, bkz. Tümleştirme Hizmetleri özel nesne geliştirme.

Görev yürütme

Bu bölüm nasıl kullanılacağını açıklar Executemiras ve görevlere göre geçersiz yöntem. Bu bölümde ayrıca görev yürütme sonuçlarını hakkında bilgi veren çeşitli yolları açıklanmaktadır.

Execute yöntemi

Bir pakette yer alan görevleri çalıştırmak zaman Integration Servicesçalışma çağrıları kendi Executeyöntemi. Görevleri kendi çekirdek iş mantığı ve işlevsellik bu yöntemi uygulamak ve bir değer döndüren, mesaj tarafından Yürütme sonuçlarını sağlamak DTSExecResultnumaralandırma ve özellik geçersiz kılma get, ExecutionValueözellik.

TaskTemel sınıf sağlayan bir varsayılan uygulanması Executeyöntemi. Özel görevleri çalıştırma işlevlerini tanımlamak için bu yöntemi geçersiz kılar. TaskHostNesne sarar çalışma zamanı altyapısı ve diğer paket nesneleri yalıtma görev. Bu izolasyon nedeniyle görevi, yürütme sırasına göre pakete konumunda habersiz ve yalnızca çalışma zamanı tarafından çağrıldığında çalışır. Bu mimari görevleri paketi yürütme sırasında değiştirdiğinizde oluşabilecek sorunları önler. Görev paketi yalnızca kendisine parametre olarak verilen nesneleri diğer nesnelere erişim sağlanan Executeyöntemi. Bu parametreler olaylarını, girişleri olay günlüğüne yazma, değişkenleri koleksiyonu erişmek ve işlemler, veri kaynaklarına bağlantılar hala sağlamlık ve güvenilirlik paketi garanti etmek gerekli olan yalıtım korurken askere görevleri sağlar.

Aşağıdaki tabloda görev için sağlanan parametreleri listeler Executeyöntemi.

Parametre

Açıklama

Connections

Fotoğraflardan oluşan ConnectionManagernesneleri göreve kullanılabilir.

VariableDispenser

Görev için kullanılabilir değişkenleri içerir. Görevleri değişkenleri aracılığıyla VariableDispenser kullanın; görevleri değişkenleri doğrudan kullanmayın. Değişken dispanser kilitler ve değişkenleri kilidini ve kilitlenmeleri veya engeller üzerine yazar.

IDTSComponentEvents

Çalışma zamanı altyapısı olaylarını görev tarafından adlandırılan yöntemler içerir.

IDTSLogging

Olay günlüğü girişleri yazmak için görev tarafından kullanılan yöntemler ve özellikler içerir.

Nesne

Eğer herhangi bir kapsayıcı bir parçası olan işlem nesnesi içerir. Bu değer parametre olarak geçirilen AcquireConnectionyöntemi bir ConnectionManagernesnesini.

Yürütme geribildirim sağlama

Görevleri tamamlamayı kendi kodu try/catchBlok çalışma zamanı altyapısı için yükseltilmiş olarak gelen özel durumları önlemek için. Bu paketi yürütme tamamlandığında ve beklenmedik şekilde durmuyor sağlar. Ancak çalışma zamanı altyapısı, görev yürütme sırasında oluşabilecek hata koşullarını işleme diğer mekanizmalar sağlar. Bu nakil hata ve uyarı mesajları, bir değer döndüren dahil DTSExecResultyapısı, döndürme, mesaj DTSExecResultdeğer ve görev yürütme sonuçlarını hakkında bilgi açıklamadan ExecutionValueözellik.

IDTSComponentEventsArabirimi içerir FireWarningve FireErrorgörev sonrası hata ve uyarı mesajları çalışma zamanı altyapısı tarafından çağrılabilecek yöntemleri. İki yöntem, hata kodu, kaynak bileşeni, açıklama, Yardım dosyası ve Yardım içeriği bilgileri gibi parametreleri gerektirir. Görev yapılandırmasına bağlı olarak, çalışma zamanı olayları ve kesme noktalarını veya bilgileri olay günlüğüne yazılırken bu iletilere yanıt verir.

TaskHostDa sağlar ExecutionValueYürütme sonuçlarını hakkında ek bilgi sağlamak için kullanılan özellik. Örneğin, bir görev satırları tablodan siler bir parçası olarak, onun Executeyöntemi, o dönüş değeri olarak silinen satır sayısını ExecutionValueözellik. Ayrıca, TaskHostsağlayan ExecValueVariableözellik. Bu özellik göster sağlar ExecutionValuegörevden göreve görünür herhangi bir değişken döndü. Belirtilen değişken daha sonra önceliği sınırlamaları görevler arasında kurmak için kullanılabilir.

Yürütme örnek

Aşağıdaki kod örneği gösterilmiştir Executeyöntemi geçersiz kılınmış bir gösterir ExecutionValueözellik. Görev tarafından belirtilen dosyayı siler fileNamegörev özelliği. Dosya yoksa, ya da eğer bir uyarı görevi mesaj fileNameözellik boş bir dize olur. Görev verir bir Booleandeğer içinde ExecutionValueDosya silinmiş olup olmadığını gösteren özellik.

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; }
  }
}
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
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
Integration Services simgesi (küçük) Integration Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler ve Microsoft video yanı sıra topluluk seçili çözümleri için ziyaret Integration ServicesMSDN sayfası:


Bu güncelleştirmelerle ilgili otomatik bildirim almak için, sayfadaki RSS akışlarına abone olun.

Ayrıca bkz.

Kavramlar

Özel görev oluşturma

Özel görev kodlama

Kullanıcı arabirimi için özel görev geliştirme