Bagikan melalui


Profil Pelacakan

Profil penelusuran berisi kueri penelusuran yang memungkinkan peserta penelusuran berlangganan kejadian alur kerja yang dihasilkan saat status instans alur kerja berubah pada durasi.

Profil Pelacakan

Profil penelusuran digunakan untuk menentukan informasi penelusuran mana yang dihasilkan untuk instans alur kerja. Jika tidak ada profil yang ditentukan, semua kejadian penelusuran akan dihasilkan. Jika profil ditentukan, kejadian penelusuran yang ditentukan dalam profil akan dihasilkan. Bergantung pada persyaratan pemantauan Anda, Anda dapat menulis profil yang sangat umum, yang berlangganan serangkaian kecil perubahan status tingkat tinggi pada alur kerja. Sebaliknya, Anda dapat membuat profil yang sangat mendetail dengan hasil kejadian yang cukup kaya untuk merekonstruksi alur eksekusi mendetail nanti.

Profil penelusuran memanifestasikan dirinya sebagai elemen XML dalam file konfigurasi .NET Framework standar atau ditentukan dalam kode. Contoh berikut adalah profil penelusuran .NET Framework 4.6.1 dalam file konfigurasi yang memungkinkan peserta penelusuran berlangganan kejadian 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 penelusuran 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 penelusuran difilter melalui mode visibilitas dalam profil penelusuran dengan menggunakan atribut ImplementationVisibility. Aktivitas komposit adalah aktivitas tingkat atas yang berisi kegiatan lain yang membentuk implementasinya. Mode visibilitas menentukan rekaman penelusuran yang dihasilkan dari aktivitas komposit dalam aktivitas alur kerja, untuk menentukan apakah aktivitas yang membentuk implementasi sedang dilacak. Mode visibilitas berlaku di tingkat profil penelusuran. Pemfilteran rekaman penelusuran untuk aktivitas individu dalam alur kerja dikendalikan oleh kueri dalam profil pelacakan. Untuk mengetahui informasi selengkapnya, lihat bagian Jenis Kueri Profil Penelusuran dalam dokumen ini.

Dua mode visibilitas yang ditentukan oleh atribut implementationVisibility dalam profil penelusuran adalah RootScope dan All. Menggunakan mode RootScope akan menekan rekaman penelusuran untuk aktivitas yang membentuk implementasi aktivitas jika aktivitas gabungan bukanlah akar dari alur kerja. Hal ini menyiratkan bahwa, ketika aktivitas yang diimplementasikan menggunakan aktivitas lain ditambahkan ke alur kerja, dan implementationVisibility diatur ke RootScope, hanya aktivitas tingkat atas dalam aktivitas gabungan tersebut yang dilacak. Jika suatu aktivitas adalah akar dari alur kerja, implementasi aktivitas merupakan alur kerja itu sendiri dan rekaman penelusuran dihasilkan untuk aktivitas yang membentuk implementasi. Menggunakan mode Semua akan memungkinkan semua rekaman penelusuran dihasilkan untuk aktivitas root dan semua aktivitas kompositnya.

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

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

Bendera implementationVisibility berlaku untuk jenis rekaman penelusuran berikut:

  • ActivityStateRecord

  • FaultPropagationRecord

  • CancelRequestedRecord

  • ActivityScheduledRecord

Catatan

CustomTrackingRecords yang dihasilkan dari implementasi aktivitas tidak difilter oleh pengaturan implementationVisibility.

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

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

Fungsionalitas implementationVisibility ditentukan sebagai All pada profil penelusuran dalam konfigurasi sebagai berikut:

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

Pengaturan ImplementationVisibility pada profil penelusuran bersifat opsional. Secara default, nilainya diatur ke RootScope. Nilai untuk atribut ini juga peka huruf besar/kecil.

Jenis Kueri Profil Penelusuran

Profil pelacakan disusun sebagai langganan deklaratif untuk rekaman pelacakan yang memungkinkan Anda menanyakan waktu proses alur kerja untuk rekaman pelacakan tertentu. Ada beberapa jenis kueri yang memungkinkan Anda berlangganan kelas objek TrackingRecord yang berbeda. Profil penelusuran 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 Started dan Completed yang ditunjukkan sebelumnya. WorkflowInstanceQuery digunakan untuk berlangganan objek TrackingRecord berikut:

    Status yang dapat berlangganan ditentukan di kelas WorkflowInstanceStates.

    Konfigurasi atau kode yang digunakan untuk berlangganan rekaman penelusuran tingkat instans alur kerja untuk status instans 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 E-Mail" selesai dalam instans alur kerja. Kueri ini diperlukan TrackingParticipant untuk berlangganan objek ActivityStateRecord. Status yang tersedia untuk berlangganan ditentukan di ActivityStates.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman penelusuran status aktivitas yang menggunakan ActivityStateQuery untuk aktivitas SendEmailActivity 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 }
            }
        }
    };
    

    Catatan

    Jika beberapa elemen activityStateQuery memiliki nama yang sama, hanya status di elemen terakhir yang digunakan di profil penelusuran.

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

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman yang terkait dengan aktivitas anak SendEmailActivity yang dijadwalkan menggunakan ActivityScheduledQuery diperlihatkan 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 suatu aktivitas. Kueri diperlukan agar TrackingParticipant dapat berlangganan objek FaultPropagationRecord.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman yang terkait dengan propagasi kesalahan menggunakan FaultPropagationQuery ditunjukkan 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 pembatalan aktivitas anak oleh aktivitas induk. Kueri diperlukan agar TrackingParticipant dapat berlangganan objek CancelRequestedRecord.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman yang terkait dengan pembatalan aktivitas menggunakan CancelRequestedQuery ditunjukkan pada 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 kejadian yang Anda tetapkan dalam aktivitas kode Anda. Kueri diperlukan agar TrackingParticipant dapat berlangganan objek CustomTrackingRecord.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman yang terkait dengan rekaman penelusuran kustom menggunakan CustomTrackingQuery ditunjukkan pada 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 kembali marka buku dalam instans alur kerja. Kueri ini diperlukan TrackingParticipant untuk berlangganan objek BookmarkResumptionRecord.

    Konfigurasi dan kode yang digunakan untuk berlangganan rekaman yang terkait dengan pembukaan kembali marka buku menggunakan BookmarkResumptionQuery ditunjukkan pada 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 secara sewenang-wenang memberi tag pada rekaman penelusuran dengan nilai yang bisa dikonfigurasi setelah waktu pembuatan. Misalnya, Anda mungkin ingin beberapa rekaman penelusuran di beberapa alur kerja ditandai dengan "Mail Server" == "Mail Server1". Tindakan ini mempermudah penemuan semua rekaman dengan tag ini saat mengkueri rekaman penelusuran nanti.

Untuk melakukannya, anotasi ditambahkan ke kueri penelusuran seperti yang ditunjukkan pada contoh berikut.

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

Cara Membuat Profil Penelusuran

Elemen kueri penelusuran digunakan untuk membuat profil penelusuran menggunakan file konfigurasi XML atau .NET Framework kode 4.6.1. Berikut adalah contoh profil penelusuran 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 menggunakan host layanan Alur Kerja, profil penelusuran biasanya dibuat menggunakan file konfigurasi. Dimungkinkan juga untuk membuat profil penelusuran dengan kode menggunakan profil penelusuran dan melacak API kueri.

Profil yang dikonfigurasi sebagai file konfigurasi XML diterapkan ke peserta penelusuran menggunakan ekstensi perilaku. Hal ini ditambahkan ke WorkflowServiceHost seperti yang dijelaskan di bagian selanjutnya Mengonfigurasi Penelusuran untuk Alur Kerja.

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

Berikut adalah beberapa contoh umum profil penelusuran.

  • Profil penelusuran untuk mendapatkan rekaman dan kesalahan instans alur kerja.

    <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 penelusuran untuk mendapatkan semua rekaman penelusuran kustom.

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

Lihat juga