Condividi tramite


Esempio di rilevamento tramite track point utente

Download sample

Nell'esempio riportato di seguito viene illustrato l'utilizzo del servizio di rilevamento SQL fornito da Windows Workflow Foundation per rilevare l'esecuzione di un flusso di lavoro.

Il runtime del flusso di lavoro genera determinati eventi durante l'esecuzione di un flusso di lavoro. Il servizio di rilevamento può intercettare questi eventi e archiviare le informazioni relative in un database SQL Server che può essere sottoposto a query.

Il runtime del flusso di lavoro genera i seguenti tipi di eventi:

  • Eventi a livello di istanza del flusso di lavoro. Questi eventi vengono generati quando un'istanza del flusso di lavoro entra in un determinato stato. Ad esempio, viene generato un evento quando viene inizializzata l'istanza del flusso di lavoro o quando l'istanza del flusso di lavoro è in esecuzione.

  • Eventi a livello di attività. Un flusso di lavoro è costituito da attività e ogni attività segue un ciclo di vita. Durante il ciclo di vita, l'attività passa attraverso più stati. Viene generato un evento quando un'attività entra in un particolare stato.

  • Eventi registrati dall'utente. Un autore del flusso di lavoro può creare eventi di rilevamento personalizzati e può aggiungerli al code-beside del flusso di lavoro.

I dati derivanti dai dati del flusso di lavoro possono essere generati e forniti al servizio di rilevamento insieme agli eventi.

Durante il rilevamento di un flusso di lavoro, si potrebbe non essere interessati a tutti gli eventi per tutti gli stati e attività. È possibile creare un profilo di rilevamento per specificare gli eventi e i dati ai quali si è interessati.

Scrittura di track point personalizzati

Potrebbe essere necessario rilevare una parte di dati in un punto particolare nell'esecuzione del flusso di lavoro non registrata dagli eventi di rilevamento. In questo caso, è possibile utilizzare i track point personalizzati. È possibile creare un track point personalizzato utilizzando il metodo TrackData fornito nella classe del contesto dati. Il metodo TrackData prende un argomento di un oggetto. Ciò significa che è possibile generare qualsiasi tipo di dati che si desidera rilevare. Nel flusso di lavoro di esempio, viene creato un track point personalizzato nel gestore del codice dell'attività del codice.

Creazione del profilo di rilevamento personalizzato

L'esempio illustra come creare un profilo di rilevamento personalizzato per registrare il track point dell'utente. Questo profilo è inserito nel database di rilevamento SQL per rilevare gli eventi specificati. Il profilo di rilevamento viene creato utilizzando il modello a oggetti del profilo di rilevamento.

Il modello a oggetti del profilo di rilevamento fornisce un insieme di classi che consente di creare il track point dell'istanza, i track point dell'attività e i track point dell'utente. Ciascun track point contiene anche un insieme di percorsi corrispondenti. Un percorso corrispondente descrive l'evento da rilevare (diverso a seconda se si tratta di un track point dell'istanza o un track point dell'attività) e l'attività (o il flusso di lavoro nel caso di un track point dell'istanza) da rilevare.

I dati da estrarre possono essere specificati anche nel track point. In questo esempio, non è stato specificato alcun dato da estrarre.

Per creare il profilo di rilevamento, utilizzare il codice riportato di seguito per rilevare il track point utente:

TrackingProfile profile = new TrackingProfile();

ActivityTrackPoint trackPoint = new ActivityTrackPoint();
ActivityTrackingLocation location = new ActivityTrackingLocation(typeof(Activity));
location.MatchDerivedTypes = true;
foreach (ActivityExecutionStatus s in Enum.GetValues(typeof(ActivityExecutionStatus)))
{
    location.ExecutionStatusEvents.Add(s);
}

trackPoint.MatchingLocations.Add(location);
profile.ActivityTrackPoints.Add(trackPoint);
profile.Version = new Version("3.0.0.0");


// Adding a user track point to the tracking profile.
UserTrackPoint utp = new UserTrackPoint();

// Adding a user location to the track point. 
UserTrackingLocation ul = new UserTrackingLocation(typeof(string), typeof(CodeActivity));
ul.MatchDerivedActivityTypes = true;
utp.MatchingLocations.Add(ul);
profile.UserTrackPoints.Add(utp);


// Serialize the profile.
TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder());
serializer.Serialize(writer, profile);
string trackingprofile = writer.ToString();
InsertTrackingProfile(trackingprofile);

Nell'esempio di codice precedente, le ultime quattro righe specificano il modo in cui un profilo di rilevamento può essere serializzato in un formato XML e archiviato in un database di rilevamento. Dopo la serializzazione, il profilo di rilevamento avrà il seguente aspetto:

<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?>

<TrackingProfile xmlns=\"https://schemas.microsoft.com/winfx/2006/workflow/trackingprofile\" version=\"3.0.0.0\">

<TrackPoints> <ActivityTrackPoint>

<MatchingLocations>

<ActivityTrackingLocation>

<Activity>

<Type>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<ExecutionStatusEvents>

<ExecutionStatus>Initialized</ExecutionStatus>

<ExecutionStatus>Executing</ExecutionStatus>

<ExecutionStatus>Canceling</ExecutionStatus>

<ExecutionStatus>Closed</ExecutionStatus>

<ExecutionStatus>Compensating</ExecutionStatus>

<ExecutionStatus>Faulting</ExecutionStatus>

</ExecutionStatusEvents>

</ActivityTrackingLocation>

</MatchingLocations>

</ActivityTrackPoint>

<UserTrackPoint>

<MatchingLocations>

<UserTrackingLocation>

<Activity>

<Type>System.Workflow.Activities.CodeActivity, System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<Argument>

<Type>System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>

<MatchDerivedTypes>false</MatchDerivedTypes>

</Argument>

</UserTrackingLocation>

</MatchingLocations>

</UserTrackPoint>

</TrackPoints>

</TrackingProfile>

Il profilo di rilevamento viene creato utilizzando lo schema del profilo di rilevamento.

Inserimento del profilo di rilevamento nel database di rilevamento SQL

Il profilo di rilevamento viene inserito nel database del profilo di rilevamento utilizzando la stored procedure UpdateTrackingProfile. La stored procedure archivia il profilo per un determinato tipo di flusso di lavoro. Quando il runtime richiede un profilo per il tipo al servizio di rilevamento, il servizio di rilevamento restituisce il profilo personalizzato anziché il profilo predefinito.

Registrazione del servizio di rilevamento con l'host del flusso di lavoro

Utilizzare il codice riportato di seguito per registrare un servizio di rilevamento con il runtime del flusso di lavoro:

WorkflowRuntime workflowRuntime = new WorkflowRuntime();
workflowRuntime.AddService(new SqlTrackingService(connectionstring));
workflowRuntime.StartRuntime();

La seconda riga registra il servizio di rilevamento SQL con il runtime del flusso di lavoro. La stringa di connessione è quella del database di rilevamento.

Creazione del database di rilevamento

I servizi SQL installati da Windows Workflow Foundation utilizzano Microsoft SQL Server per archiviare le informazioni. Per queste attività è possibile utilizzare Microsoft SQL Server 2005 Express, SQL Server 2000 o versioni più recenti o SQL Server 2000 Desktop Engine (MSDE).

Il programma di installazione di Windows Workflow Foundation non installa i database richiesti da questi servizi; tuttavia, il programma di installazione installa gli script SQL per la creazione e la configurazione dei database per tali servizi.

Per creare il database di rilevamento SQL

  1. Se si utilizza Microsoft SQL Server 2005 Express, SQL Server 2000 o versioni più recenti oppure SQL Server 2000 Desktop Engine (MSDE), creare un nuovo database denominato Tracking utilizzando l'istruzione della query SQL:

    CREATE DATABASE Tracking

    Nota   Se si utilizzano SqlTrackingService e SqlWorkflowPersistenceService in un'applicazione del flusso di lavoro, è consigliabile utilizzare un unico database per la persistenza e il rilevamento.

  2. Nell'area di lavoro SQL Query Analyzer, selezionare il database creato al passaggio 1 nell'elenco di database disponibili.

  3. Nel menu File, fare clic su Apri e aprire lo script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<lingua>\Tracking_Schema.sql.

  4. Eseguire la query facendo clic su Esegui o premendo F5 per creare le tabelle del servizio di rilevamento SQL.

  5. Nel menu File, fare clic su Apri e aprire lo script SQL %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<lingua>\Tracking_Logic.sql.

  6. Eseguire la query facendo clic su Esegui o premendo F5 per creare le stored procedure del servizio di rilevamento SQL.

Per generare l'esempio

  1. Scaricare l'esempio facendo clic su Scarica esempio.

    In tal modo viene estratto il progetto di esempio sul disco rigido locale.

  2. Fare clic sul pulsante Start, scegliere Programmi, Microsoft Windows SDK e fare clic su CMD Shell.

  3. Accedere alla directory di origine dell'esempio.

  4. Al prompt dei comandi, immettere MSBUILD <nome file soluzione>.

Per eseguire l'esempio

  • Nella finestra del prompt dei comandi di SDK, eseguire il file exe nella cartella UserTrackPoints\bin\debug (o nella cartella UserTrackPoints\bin per la versione VB dell'esempio), collocata sotto la cartella principale dell'esempio.

Vedere anche

Riferimenti

SqlTrackingService
SqlTrackingQuery
SqlTrackingWorkflowInstance
ActivityEvents
ActivityTrackingRecord
WorkflowEvents
WorkflowTrackingRecord

Altre risorse

Esempi di rilevamento
Esempio di rilevamento semplice
Esempio di esecuzione di query con l'utilizzo di SQLTrackingService
Esempio di rilevamento di EventArgs
Esempio di ConsoleTrackingService
Esempio di esecuzione di query con l'utilizzo di SQLTrackingService
Esempio di RuleActionTrackingEvent
Esempio di servizio di rilevamento file e query
Esempio di utilizzo del modello a oggetti del profilo di rilevamento
Esempio di manutenzione di dati SQL
Windows Workflow Tracking Services

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.