Profil Pelacakan

Profil pelacakan berisi kueri pelacakan yang memungkinkan peserta pelacakan untuk berlangganan ke peristiwa dalam alur kerja yang dipancarkan ketika status instans alur kerja berubah selama runtime.

Profil Pelacakan

Profil pelacakan digunakan untuk menentukan informasi pelacakan mana yang dipancarkan untuk instans alur kerja. Jika tidak ada profil yang ditentukan, semua peristiwa pelacakan akan dipancarkan. Jika profil ditentukan, maka peristiwa pelacakan yang ditentukan dalam profil akan dilaporkan. Tergantung pada persyaratan pemantauan Anda, Anda dapat menulis profil yang sangat umum yang mengikuti sekumpulan kecil perubahan penting pada alur kerja. Sebaliknya, Anda dapat membuat profil yang sangat rinci sehingga peristiwa yang dihasilkan cukup kaya untuk merekonstruksi alur eksekusi terperinci nanti.

Profil pelacakan muncul sebagai elemen XML dalam file konfigurasi standar .NET Framework atau ditentukan dalam kode. Contoh berikut adalah profil pelacakan .NET Framework 4.6.1 dalam file konfigurasi yang memungkinkan peserta pelacakan untuk berlangganan peristiwa alur kerja Started dan Completed.

<system.serviceModel>
    ...
    <tracking>
     <profiles>
      <trackingProfile name="Sample Tracking Profile">
        <workflow activityDefinitionId="*">
          <workflowInstanceQueries>
            <workflowInstanceQuery>
              <states>
                <state name="Started"/>
                <state name="Completed"/>
              </states>
            </workflowInstanceQuery>
          </workflowInstanceQueries>
        </workflow>
      </trackingProfile>
    </profiles>
  </tracking>
    ...
</system.serviceModel>

Contoh berikut menunjukkan profil pelacakan yang setara yang dibuat menggunakan kode.

TrackingProfile profile = new TrackingProfile()
{
    Name = "CustomTrackingProfile",
    Queries =
    {
        new WorkflowInstanceQuery()
        {
            // Limit workflow instance tracking records for started and
            // completed workflow states.
            States = { WorkflowInstanceStates.Started, WorkflowInstanceStates.Completed },
        }
    }
};

Rekaman pelacakan difilter melalui mode visibilitas dalam profil pelacakan dengan menggunakan ImplementationVisibility atribut . Aktivitas komposit adalah aktivitas tingkat atas yang berisi aktivitas lain yang membentuk implementasinya. Mode visibilitas menentukan rekaman pelacakan yang dikeluarkan dari aktivitas komposit dalam aktivitas alur kerja, untuk menentukan apakah aktivitas yang membentuk implementasi sedang dilacak. Mode visibilitas berlaku pada tingkat profil pelacakan. Pemfilteran rekaman pelacakan untuk aktivitas individual dalam alur kerja dikontrol oleh kueri dalam profil pelacakan. Untuk informasi selengkapnya, lihat bagian Tipe Kueri Profil Pelacakan di dokumen ini.

Dua mode visibilitas yang ditentukan oleh implementationVisibility atribut dalam profil pelacakan adalah RootScope dan All. Menggunakan mode RootScope menghilangkan catatan pelacakan untuk aktivitas yang merupakan bagian dari penerapan suatu aktivitas, dalam hal di mana aktivitas komposit bukanlah sebagai akar dari alur kerja. Ini menyiratkan bahwa, ketika aktivitas yang diterapkan menggunakan aktivitas lain ditambahkan ke alur kerja, dan implementationVisibility diatur ke RootScope, hanya aktivitas tingkat atas dalam aktivitas komposit yang dilacak. Jika aktivitas adalah akar alur kerja, maka implementasi aktivitas adalah alur kerja itu sendiri dan rekaman pelacakan dipancarkan untuk aktivitas yang membentuk implementasi. Menggunakan mode Semua memungkinkan semua rekaman pelacakan dikeluarkan untuk aktivitas utama dan semua aktivitas kompositnya.

Misalnya, Misalkan MyActivity adalah aktivitas komposit yang implementasinya berisi dua aktivitas, Activity1 dan Activity2. Ketika aktivitas ini ditambahkan ke alur kerja dan pelacakan diaktifkan dengan profil pelacakan dengan implementationVisibility diatur ke RootScope, rekaman pelacakan hanya dikeluarkan untuk MyActivity. Namun, tidak ada catatan yang dikeluarkan untuk aktivitas Activity1 dan Activity2.

Namun, jika implementationVisibility atribut untuk profil pelacakan diatur ke All, maka rekaman pelacakan dipancarkan tidak hanya untuk MyActivity, tetapi juga untuk aktivitas Activity1 dan Activity2.

Bendera implementationVisibility berlaku untuk jenis rekaman pelacakan berikut:

  • ActivityStateRecord

  • Catatan Penyebaran Kesalahan

  • Rekam Pembatalan Diminta

  • Catatan Aktivitas Terjadwal

Nota

CustomTrackingRecords yang dipancarkan dari implementasi aktivitas tidak disaring oleh pengaturan implementationVisibility.

Fungsionalitas implementationVisibility ditentukan sebagai RootScope pada profil pelacakan dalam kode sebagai berikut:

TrackingProfile sampleTrackingProfile = new TrackingProfile()
{
    Name = "Sample Tracking Profile",
    ImplementationVisibility = ImplementationVisibility.RootScope
};

Fungsionalitas implementationVisibility ditentukan sebagai All pada profil pelacakan dalam file konfigurasi sebagai berikut:

<tracking>
      <profiles>
        <trackingProfile name="Shipping Monitoring" implementationVisibility="All">
          <workflow activityDefinitionId="*">
...
         </workflow>
        </trackingProfile>
      </profiles>
</tracking>

ImplementationVisibility Pengaturan pada profil pelacakan bersifat opsional. Secara default, nilainya diatur ke RootScope. Nilai untuk atribut ini juga bersifat case-sensitive.

Melacak Jenis Kueri Profil

Profil pelacakan disusun sebagai langganan deklaratif untuk rekam jejak yang memungkinkan Anda meminta runtime alur kerja untuk rekaman pelacakan tertentu. Ada beberapa jenis kueri yang memungkinkan Anda berlangganan ke kelas TrackingRecord objek yang berbeda. Profil pelacakan dapat ditentukan dalam konfigurasi atau melalui kode. Berikut adalah jenis kueri yang paling umum:

  • WorkflowInstanceQuery - Gunakan ini untuk melacak perubahan siklus hidup instans alur kerja seperti yang ditunjukkan Started sebelumnya dan Completed. WorkflowInstanceQuery digunakan untuk berlangganan objek berikutTrackingRecord:

    Status yang dapat berlangganan ditentukan di WorkflowInstanceStates kelas .

    Konfigurasi atau kode yang digunakan untuk berlangganan rekaman pelacakan tingkat instans untuk status proses Started menggunakan WorkflowInstanceQuery ditampilkan dalam contoh berikut.

    <workflowInstanceQueries>
        <workflowInstanceQuery>
          <states>
            <state name="Started"/>
          </states>
        </workflowInstanceQuery>
    </workflowInstanceQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new WorkflowInstanceQuery()
            {
                States = { WorkflowInstanceStates.Started}
            }
        }
    };
    
  • ActivityStateQuery - Gunakan ini untuk melacak perubahan siklus hidup aktivitas yang membentuk instans alur kerja. Misalnya, Anda mungkin ingin melacak setiap kali aktivitas "Kirim Email" selesai dalam instans alur kerja. Kueri ini diperlukan untuk berlangganan objek-objek TrackingParticipantActivityStateRecord. Status yang tersedia untuk berlangganan ditentukan dalam ActivityStates.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman pelacakan status aktivitas yang menggunakan ActivityStateQuery untuk SendEmailActivity aktivitas ditampilkan dalam contoh berikut.

    <activityStateQueries>
      <activityStateQuery activityName="SendEmailActivity">
        <states>
          <state name="Closed"/>
        </states>
      </activityStateQuery>
    </activityStateQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityStateQuery()
            {
                ActivityName = "SendEmailActivity",
                States = { ActivityStates.Closed }
            }
        }
    };
    

    Nota

    Jika beberapa elemen activityStateQuery memiliki nama yang sama, hanya status dalam elemen terakhir yang digunakan dalam profil pelacakan.

  • ActivityScheduledQuery - Kueri ini memungkinkan Anda melacak aktivitas yang dijadwalkan untuk dieksekusi oleh aktivitas induk. Kueri diperlukan agar TrackingParticipant dapat berlangganan pada objek ActivityScheduledRecord.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman terkait dengan aktivitas anak yang dijadwalkan menggunakan SendEmailActivity dan ActivityScheduledQuery ditunjukkan dalam contoh berikut.

    <activityScheduledQueries>
      <activityScheduledQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </activityScheduledQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityScheduledQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • FaultPropagationQuery - Gunakan ini untuk melacak penanganan kesalahan yang terjadi dalam aktivitas. Kueri diperlukan agar TrackingParticipant dapat berlangganan pada objek FaultPropagationRecord.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman yang terkait dengan penyebaran kesalahan menggunakan FaultPropagationQuery ditampilkan dalam contoh berikut.

    <faultPropagationQueries>
      <faultPropagationQuery faultSourceActivityName="SendEmailActivity" faultHandlerActivityName="NotificationsFaultHandler" />
    </faultPropagationQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new FaultPropagationQuery()
            {
                FaultSourceActivityName = "SendEmailActivity",
                FaultHandlerActivityName = "NotificationsFaultHandler"
            }
        }
    };
    
  • CancelRequestedQuery - Gunakan ini untuk melacak permintaan untuk membatalkan aktivitas anak oleh aktivitas induk. Kueri diperlukan agar TrackingParticipant dapat berlangganan pada objek CancelRequestedRecord.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman yang terkait dengan pembatalan aktivitas menggunakan CancelRequestedQuery ditampilkan dalam contoh berikut.

    <cancelRequestedQueries>
      <cancelRequestedQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </cancelRequestedQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CancelRequestedQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • CustomTrackingQuery - Gunakan ini untuk melacak peristiwa yang Anda tentukan dalam aktivitas kode Anda. Kueri diperlukan agar TrackingParticipant dapat berlangganan pada objek CustomTrackingRecord.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman yang terkait dengan rekaman pelacakan kustom menggunakan CustomTrackingQuery diperlihatkan dalam contoh berikut.

    <customTrackingQueries>
      <customTrackingQuery name="EmailAddress" activityName="SendEmailActivity" />
    </customTrackingQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CustomTrackingQuery()
            {
                Name = "EmailAddress",
                ActivityName = "SendEmailActivity"
            }
        }
    };
    
  • BookmarkResumptionQuery - Gunakan ini untuk melacak kelanjutan marka buku dalam instance alur kerja. Kueri ini diperlukan untuk berlangganan objek-objek TrackingParticipantBookmarkResumptionRecord.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman yang terkait dengan penerbitan ulang bookmark menggunakan BookmarkResumptionQuery diperlihatkan dalam contoh berikut.

    <bookmarkResumptionQueries>
      <bookmarkResumptionQuery name="SentEmailBookmark" />
    </bookmarkResumptionQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new BookmarkResumptionQuery()
            {
                Name = "sentEmailBookmark"
            }
        }
    };
    

Anotasi

Anotasi memungkinkan Anda untuk dengan bebas menandai rekaman pelacakan dengan nilai yang dapat dikonfigurasi setelah proses build. Misalnya, Anda mungkin ingin beberapa rekaman pelacakan di beberapa alur kerja ditandai dengan "Server Email" == "Mail Server1". Ini memudahkan untuk menemukan semua rekaman dengan tag ini saat mengkueri rekaman pelacakan nanti.

Untuk mencapai hal ini, anotasi ditambahkan ke kueri pelacakan seperti yang diperlihatkan dalam contoh berikut.

<activityStateQuery activityName="SendEmailActivity">
  <states>
    <state name="Closed"/>
  </states>
  <annotations>
    <annotation name="MailServer" value="Mail Server1"/>
  </annotations>
</activityStateQuery>

Cara Membuat Profil Pelacakan

Elemen kueri pelacakan digunakan untuk membuat profil pelacakan menggunakan file konfigurasi XML atau kode .NET Framework 4.6.1. Berikut adalah contoh profil pelacakan yang dibuat menggunakan file konfigurasi.

<system.serviceModel>
  <tracking>
    <profiles>
      <trackingProfile name="Sample Tracking Profile ">
        <workflow activityDefinitionId="*">
          <!--Specify the tracking profile query elements to subscribe for tracking records-->
        </workflow>
      </trackingProfile>
    </profiles>
  </tracking>
</system.serviceModel>

Peringatan

Untuk WF yang menggunakan host layanan Alur Kerja, profil pelacakan biasanya dibuat menggunakan file konfigurasi. Anda juga dapat membuat profil pelacakan dengan kode menggunakan profil pelacakan dan API kueri pelacakan.

Profil yang dikonfigurasi sebagai file konfigurasi XML diterapkan pada peserta pelacakan melalui ekstensi perilaku. Ini ditambahkan ke WorkflowServiceHost seperti yang dijelaskan di bagian selanjutnya Mengonfigurasi Pelacakan untuk Alur Kerja.

Verbositas rekaman pelacakan yang dipancarkan oleh host ditentukan oleh pengaturan konfigurasi dalam profil pelacakan. Peserta pelacakan berlangganan rekaman pelacakan dengan menambahkan kueri ke profil pelacakan. Untuk berlangganan semua rekaman pelacakan, profil pelacakan perlu menentukan semua kueri pelacakan menggunakan "*" di bidang nama di setiap kueri.

Berikut adalah beberapa contoh umum profil pelacakan.

  • Profil pelacakan untuk mendapatkan catatan instans alur kerja dan kesalahan.

    <trackingProfile name="Instance and Fault Records">
      <workflow activityDefinitionId="*">
        <workflowInstanceQueries>
          <workflowInstanceQuery>
            <states>
              <state name="*" />
            </states>
          </workflowInstanceQuery>
        </workflowInstanceQueries>
        <activityStateQueries>
          <activityStateQuery activityName="*">
            <states>
              <state name="Faulted"/>
            </states>
          </activityStateQuery>
        </activityStateQueries>
      </workflow>
    </trackingProfile>
    
  • Profil pelacakan untuk mendapatkan semua catatan pelacakan khusus.

    <trackingProfile name="Instance_And_Custom_Records">
      <workflow activityDefinitionId="*">
        <customTrackingQueries>
          <customTrackingQuery name="*" activityName="*" />
        </customTrackingQueries>
      </workflow>
    </trackingProfile>
    

Lihat juga