Sdílet prostřednictvím


Sledování profilů

Sledovací profily obsahují sledovací dotazy, které umožňují sledování účastníka přihlásit se k odběru událostí pracovního postupu, které se vygenerují při změně stavu instance pracovního postupu v době běhu.

Sledování profilů

Profily sledování slouží k určení, které informace o sledování se vygenerují pro instanci pracovního postupu. Pokud není zadaný žádný profil, všechny události sledování se vygenerují. Pokud je zadaný profil, vygeneruje se sledování událostí zadaných v profilu. V závislosti na vašich požadavcích na monitorování můžete napsat profil, který je velmi obecný, který se přihlásí k odběru malé sady změn stavu vysoké úrovně v pracovním postupu. Naopak můžete vytvořit velmi podrobný profil, jehož výsledné události jsou dostatečně bohaté na rekonstrukci podrobného toku provádění později.

Sledovací profily se manifestují jako elementy XML ve standardním konfiguračním souboru rozhraní .NET Framework nebo zadaném v kódu. Následující příklad je sledovací profil rozhraní .NET Framework 4.6.1 v konfiguračním souboru, který umožňuje účastníkovi sledování přihlásit se k odběru Started událostí pracovního postupu a Completed událostí pracovního postupu.

<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>

Následující příklad ukazuje ekvivalentní profil sledování vytvořený pomocí kódu.

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

Sledování záznamů se filtruje prostřednictvím režimu viditelnosti v rámci profilu sledování pomocí atributu ImplementationVisibility . Složená aktivita je aktivita nejvyšší úrovně, která obsahuje další aktivity, které tvoří jeho implementaci. Režim viditelnosti určuje záznamy sledování generované ze složených aktivit v rámci aktivity pracovního postupu, aby bylo možné určit, jestli se sledují aktivity, které tvoří implementaci. Režim viditelnosti se použije na úrovni profilu sledování. Filtrování záznamů sledování jednotlivých aktivit v rámci pracovního postupu je řízeno dotazy v rámci profilu sledování. Další informace naleznete v části Typy dotazů profilu sledování v tomto dokumentu.

Dva režimy viditelnosti určené atributem implementationVisibility v profilu sledování jsou RootScope a All. RootScope Použití režimu potlačí sledování záznamů pro aktivity, které tvoří implementaci aktivity v případě, že složená aktivita není kořenem pracovního postupu. To znamená, že když se do pracovního postupu přidá aktivita implementovaná pomocí jiných aktivit a nastavená implementationVisibility na RootScope, bude sledována pouze aktivita nejvyšší úrovně v rámci této složené aktivity. Pokud je aktivita kořenem pracovního postupu, pak implementace aktivity je samotný pracovní postup a sledování záznamů jsou generovány pro aktivity, které tvoří implementaci. Použití režimu Vše umožňuje, aby byly pro kořenovou aktivitu a všechny jeho složené aktivity generovány všechny záznamy sledování.

Předpokládejme například, že MyActivity je složená aktivita, jejíž implementace obsahuje dvě aktivity: Activity1 a Activity2. Když se tato aktivita přidá do pracovního postupu a sledování se povolí s profilem sledování s nastaveným implementationVisibility nastavením RootScope, záznamy sledování se vygenerují pouze pro MyActivity. Pro aktivity Activity1 a Activity2 se však nevygenerují žádné záznamy.

Pokud implementationVisibility je však atribut pro sledovací profil nastaven na All, pak se záznamy sledování vygenerují nejen pro MyActivity, ale také pro aktivity Activity1 a Activity2.

Příznak implementationVisibility se vztahuje na následující typy záznamů sledování:

  • Záznam ActivityStateRecord

  • FaultPropagationRecord

  • StornoRequestedRecord

  • Záznam AktivityScheduledRecord

Poznámka:

CustomTrackingRecords generované z implementace aktivity nejsou vyfiltrovány nastavením implementaceVisibility.

Funkce implementationVisibility je určena jako RootScope v profilu sledování v kódu následujícím způsobem:

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

Funkce implementationVisibility se zadává jako All v profilu sledování v konfiguračním souboru následujícím způsobem:

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

Nastavení ImplementationVisibility profilu sledování je volitelné. Ve výchozím nastavení je jeho hodnota nastavena na RootScope. V hodnotách tohoto atributu se rozlišují také malá a velká písmena.

Typy dotazů profilu sledování

Sledování profily mají strukturu deklarativní odběrů pro sledování záznamů, které umožňují dotazů modulu runtime pracovního postupu pro záznamy sledování. Existuje několik typů dotazů, které umožňují přihlásit se k odběru TrackingRecord různých tříd objektů. Profily sledování je možné zadat v konfiguraci nebo prostřednictvím kódu. Tady jsou nejběžnější typy dotazů:

  • WorkflowInstanceQuery - Tato možnost slouží ke sledování změn životního cyklu instance pracovního postupu, jako jsou dříve demonstrované Started a Completed. WorkflowInstanceQuery Se používá k přihlášení k odběru následující TrackingRecord objekty:

    Stavy, které lze přihlásit k odběru WorkflowInstanceStates , jsou zadány ve třídě.

    Konfigurace nebo kód použitý k přihlášení k odběru záznamů sledování na úrovni instance pracovního postupu pro Started stav instance pomocí WorkflowInstanceQuery následujícího příkladu.

    <workflowInstanceQueries>
        <workflowInstanceQuery>
          <states>
            <state name="Started"/>
          </states>
        </workflowInstanceQuery>
    </workflowInstanceQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new WorkflowInstanceQuery()
            {
                States = { WorkflowInstanceStates.Started}
            }
        }
    };
    
  • ActivityStateQuery – Tato možnost slouží ke sledování změn životního cyklu aktivit, které tvoří instanci pracovního postupu. Můžete například chtít sledovat, kdy se aktivita Odeslat e-mail dokončí v instanci pracovního postupu. Tento dotaz je nezbytný pro přihlášení k odběru TrackingParticipantActivityStateRecord objektů. Dostupné stavy pro přihlášení k odběru jsou uvedeny v ActivityStates.

    Konfigurace a kód použitý k přihlášení k odběru záznamů sledování stavu aktivit, které používají ActivityStateQuery pro SendEmailActivity aktivitu, se zobrazí v následujícím příkladu.

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

    Poznámka:

    Pokud více elementů activityStateQuery má stejný název, používají se v profilu sledování pouze stavy v posledním elementu.

  • ActivityScheduledQuery – Tento dotaz umožňuje sledovat aktivitu naplánovanou pro spuštění podle nadřazené aktivity. Dotaz je nezbytný pro přihlášení k odběru TrackingParticipantActivityScheduledRecord objektů.

    Konfigurace a kód použitý k přihlášení k odběru záznamů souvisejících s SendEmailActivity naplánovanou podřízenou aktivitou pomocí ActivityScheduledQuery následujícího příkladu.

    <activityScheduledQueries>
      <activityScheduledQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </activityScheduledQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new ActivityScheduledQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • FaultPropagationQuery – Tato možnost slouží ke sledování zpracování chyb, ke kterým dochází v rámci aktivity. Dotaz je nezbytný pro přihlášení k odběru TrackingParticipantFaultPropagationRecord objektů.

    Konfigurace a kód použitý k přihlášení k odběru záznamů souvisejících s šířením chyb pomocí FaultPropagationQuery je znázorněn v následujícím příkladu.

    <faultPropagationQueries>
      <faultPropagationQuery faultSourceActivityName="SendEmailActivity" faultHandlerActivityName="NotificationsFaultHandler" />
    </faultPropagationQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new FaultPropagationQuery()
            {
                FaultSourceActivityName = "SendEmailActivity",
                FaultHandlerActivityName = "NotificationsFaultHandler"
            }
        }
    };
    
  • CancelRequestedQuery – Tato možnost slouží ke sledování požadavků na zrušení podřízené aktivity nadřazenou aktivitou. Dotaz je nezbytný pro přihlášení k odběru TrackingParticipantCancelRequestedRecord objektů.

    Konfigurace a kód použitý k přihlášení k odběru záznamů souvisejících se zrušením aktivity pomocí CancelRequestedQuery je znázorněn v následujícím příkladu.

    <cancelRequestedQueries>
      <cancelRequestedQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" />
    </cancelRequestedQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CancelRequestedQuery()
            {
                ActivityName = "ProcessNotificationsActivity",
                ChildActivityName = "SendEmailActivity"
            }
        }
    };
    
  • CustomTrackingQuery – Pomocí této možnosti můžete sledovat události, které definujete v aktivitách kódu. Dotaz je nezbytný pro přihlášení k odběru TrackingParticipantCustomTrackingRecord objektů.

    Konfigurace a kód použitý k přihlášení k odběru záznamů souvisejících s vlastními záznamy sledování pomocí CustomTrackingQuery je znázorněn v následujícím příkladu.

    <customTrackingQueries>
      <customTrackingQuery name="EmailAddress" activityName="SendEmailActivity" />
    </customTrackingQueries>
    
    TrackingProfile sampleTrackingProfile = new TrackingProfile()
    {
        Name = "Sample Tracking Profile",
        Queries =
        {
            new CustomTrackingQuery()
            {
                Name = "EmailAddress",
                ActivityName = "SendEmailActivity"
            }
        }
    };
    
  • BookmarkResumptionQuery – Tato možnost slouží ke sledování obnovení záložky v instanci pracovního postupu. Tento dotaz je nezbytný pro přihlášení k odběru TrackingParticipantBookmarkResumptionRecord objektů.

    Konfigurace a kód použitý k přihlášení k odběru záznamů souvisejících s obnovením záložky pomocí BookmarkResumptionQuery je znázorněn v následujícím příkladu.

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

Poznámky

Anotace umožňují libovolně značku sledování záznamů s hodnotou, kterou lze nakonfigurovat po čas sestavení. Můžete například chtít, aby několik záznamů sledování v několika pracovních postupech bylo označeno "Poštovní server" == "Poštovní server1". To umožňuje snadno vyhledat všechny záznamy s touto značkou při dotazování sledování záznamy později.

K tomu se přidá poznámka do sledovacího dotazu, jak je znázorněno v následujícím příkladu.

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

Vytvoření profilu sledování

Prvky sledovacího dotazu slouží k vytvoření sledovacího profilu pomocí konfiguračního souboru XML nebo kódu rozhraní .NET Framework 4.6.1. Tady je příklad profilu sledování vytvořeného pomocí konfiguračního souboru.

<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>

Upozorňující

Pro WF pomocí hostitele služby pracovního postupu se profil sledování obvykle vytvoří pomocí konfiguračního souboru. Pomocí rozhraní API pro sledování a sledování dotazů je také možné vytvořit profil sledování s kódem.

Pro sledování účastníka pomocí rozšíření chování se použije profil nakonfigurovaný jako konfigurační soubor XML. To se přidá do WorkflowServiceHost, jak je popsáno v další části Konfigurace sledování pro pracovní postup.

Úroveň podrobností sledování záznamů vygenerovaných hostitelem je určena nastavením konfigurace v rámci profilu sledování. Účastník sledování se přihlásí k odběru sledování záznamů přidáním dotazů do profilu sledování. Pokud se chcete přihlásit k odběru všech sledovacích záznamů, musí profil sledování zadat všechny sledovací dotazy pomocí "*" v názvových polích v každém z dotazů.

Tady je několik běžných příkladů sledovacích profilů.

  • Profil sledování pro získání záznamů a chyb instancí pracovního postupu.

    <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 sledování pro získání všech vlastních záznamů sledování

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

Viz také