Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo argomento descrive come instrumentare un'applicazione usando la classe API BAM chiave. Nei frammenti di codice seguenti è stato semplificato il codice di esempio usando costanti e usando il codice minimo necessario per instrumentare un'applicazione.
Il frammento di codice seguente illustra come creare un nuovo oggetto Microsoft.BizTalk.Bam.EventObservation.EventStream , in particolare microsoft.BizTalk.Bam.EventObservation.DirectEventStream. In questo frammento di codice, il primo parametro specifica la stringa di connessione all'archivio dati del database di importazione primaria BAM e il secondo parametro specifica la frequenza con cui gli eventi vengono scritti nell'archivio dati.
Annotazioni
BAM supporta le connessioni solo agli archivi dati di SQL Server. La stringa di connessione di esempio rappresenta la stringa di connessione minima necessaria per stabilire una connessione. La configurazione potrebbe richiedere parametri aggiuntivi da specificare nella stringa di connessione.
Un valore FlushThreshold pari a 0 specifica che gli eventi non vengono scritti automaticamente e che è necessario chiamare il metodo Flush per scrivere gli eventi. Un valore di uno fa sì che ogni evento venga scritto quando si verifica. Valori maggiori di uno specificano che gli eventi vengono scritti quando si verifica un batch dell'accumulo specificato. L'uso di un valore maggiore di uno può essere utile per migliorare le prestazioni.
// Specify the DES connection string.
const string connBAMPIT =
"Integrated Security=SSPI;server=.;database=BAMPrimaryImport";
// Write the activity update data on every call.
int flushThreshold = 1;
// Create a DES instance
EventStream es =
new DirectEventStream(connBAMPIT, flushThreshold);
Dopo aver creato l'oggetto [Microsoft.BizTalk.Bam.EventObservation.EventStream]/dotnet/api/microsoft.biztalk.bam.eventobservation.eventstream), è possibile avviare l'attività e iniziare ad aggiornare la tabella attività con le attività cardine e i dati raccolti. Quando l'attività BAM è stata distribuita, sono state create cinque tabelle nel database di importazione primaria BAM. Per altre informazioni sul processo di sviluppo, vedere Panoramica del processo di sviluppo BAM.
La chiamata al metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity aggiunge un record alla tabella bam_ PurchaseOrder_Activity. Il primo parametro contiene il nome dell'attività da aggiornare e il secondo parametro contiene un identificatore per questa istanza dell'attività. L'identificatore può essere qualsiasi stringa, ma deve essere univoco nel set di record per l'attività.
A questo punto il record non contiene dati. Il metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity aggiorna il record con i dati dell'evento acquisiti. Ancora una volta si specifica un'attività e l'identificatore dell'istanza dell'attività. Si passano le coppie di valori nome-metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity degli elementi di dati e delle pietre miliari definite nell'attività. Ad esempio, la nostra attività ha definito una pietra miliare MS_Received. Quando l'attività è stata implementata, è stata creata una colonna nella tabella bam_ PurchaseOrder_Activity per la pietra miliare. La chiamata al metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity specifica la coppia di valori del nome di MS_Received e DateTime.UtcNow per aggiornare l'attività con la data di ricezione per l'ordine di acquisto.
// When a purchase order is received, you call the
// BeginActivity method in the receive application.
// You can then capture the event data by calling
// the UpdateActivity method.
es.BeginActivity ("PurchaseOrder", "PO123");
es.UpdateActivity ("PurchaseOrder", "PO123",
"MS_Received", DateTime.UtcNow,
"T_Customer", "Joe");
In questo esempio si continua a eseguire una seconda attività. Per altre informazioni sulle continuazioni, vedere Continuazione attività.
Per consentire ad altre applicazioni instrumentate di aggiornare l'attività PurchaseOrder, includere una chiamata al metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation . La chiamata specifica l'attività a cui possono contribuire altre applicazioni, l'identificatore per l'istanza dell'attività monitorata e il token di continuazione che altre applicazioni useranno per aggiornare l'attività. Un record viene scritto nella tabella bam_ PurchaseOrder_continuations per tenere traccia dello stato della continuazione. Se l'attività continua ad altri processi, viene scritto un record per ogni chiamata al metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation con un token di continuazione univoco.
Importante
Ogni segmento di codice in uno scenario di continuazione deve avere la propria chiamata al metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity . In caso contrario, verrà generato un record di attività pendente/orfano.
Tuttavia, solo il primo segmento (che usa l'ID attività effettivo) ha il metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity ; tutti gli altri segmenti (che usano il proprio ID token univoco) non devono chiamare il metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity .
Dopo aver chiamato il metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation , altri componenti possono aggiornare l'attività dell'ordine di acquisto usando Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity specificando il token di continuazione anziché l'ID attività. Al termine delle attività degli altri componenti, ognuno dei componenti deve chiamare Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity con il token di continuazione per informare l'infrastruttura BAM che non sono previsti altri eventi.
Importante
Una volta chiamato il metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation , è possibile che un'attività diventi orfana se il processo in cui l'attività continua non chiama mai un metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity con il token di continuazione.
// Continue the activity to the next process that has been
// instrumented to handle the continuation.
es.EnableContinuation("PurchaseOrder", “PO123”, “AP123”);
Infine, l'attività viene finalizzata chiamando il metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity specificando il nome dell'attività e l'identificatore dell'attività. Se non vi sono continuazioni in sospeso, l'attività viene spostata nella tabella bam_PurchaseOrder_completed. È possibile che le attività diventino orfane se le attività di continuazione non vengono completate.
// Activity from this segment (PO submission) is completed
es.EndActivity("PurchaseOrder", “PO123”);
Quando l'attività continua a separare il processo, l'applicazione viene instrumentata per aggiornare la tabella attività chiamando Microsoft.BizTalk.Bam.EventObservation.EventStream.UpdateActivity specificando il nome dell'attività e il token di continuazione dichiarato nella chiamata al metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.EnableContinuation .
Annotazioni
Il processo che gestisce l'attività continua non chiama il metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity . Il metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.BeginActivity crea un'istanza dell'attività creando le tabelle nel database di importazione primaria BAM. Il processo attraverso il quale l'attività continua si occupa dell'aggiornamento dell'istanza dell'attività già esistente.
// update when the order is approved
es.UpdateActivity ("PurchaseOrder", “AP123”, "MS_Approved",
DateTime.UtcNow, "T_Product", "Widget");
// update when the product is ready for shipment
es.UpdateActivity ("PurchaseOrder", “AP123”,
"MS_Ready", DateTime.UtcNow);
Parte del flusso di lavoro per questo esempio il codice specifica un riferimento, in questo caso un tipo specifico di riferimento, un'attività correlata. Specificando un'attività correlata che si crea un collegamento dall'attività primaria ad altre attività di interesse per un utente che visualizza l'attività nel portale BAM.
La chiamata al metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.AddRelatedActivity scrive un record nel bam_ PurchaseOrder_ActiveRelationships collegando le attività.
// These are shipped in two shipments.
// Relates the current purchase order
// instance to two shippings.
// Note: only one direction
es.AddRelatedActivity ("PurchaseOrder", “AP123”,
"Shipping", “UPS101”);
es.AddRelatedActivity ("PurchaseOrder", “AP123”,
"Shipping", “UPS102”);
Per terminare l'attività continua, chiamare il metodo Microsoft.BizTalk.Bam.EventObservation.EventStream.EndActivity specificando il token di continuazione per la continuazione che sta terminando. Se non sono presenti altre continuazioni non completate, l'attività dell'ordine di acquisto viene spostata nella tabella delle attività completate.
// Activity from this segment (ApprovalProcess) is completed
es.EndActivity("PurchaseOrder", “AP123”);
Esempio di codice completo
//---------------------------------------------------------------------
// File:BAMMinimalSample.cs
//
// Summary: Demonstrates how to instrument an application
//using BAM APIs to track useful information.
//
// Sample: BAM Api Sample
//
//---------------------------------------------------------------------
// This file is part of the Microsoft BizTalk Server SDK
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// This source code is intended only as a supplement to Microsoft
// BizTalk Server release and/or on-line documentation. See
// these other materials for detailed information regarding Microsoft // code samples.
//
// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//---------------------------------------------------------------------
// This sample requires that you add the
// Microsoft.BizTalk.Bam.EventObservation.dll to the
// references in the Visual Studio Solution.
using System;
using System.Text;
using Microsoft.BizTalk.Bam.EventObservation;
namespace EventStreamSample
{
static void Main(string[] args)
{
//
// The following code would appear in a purchase order
// receipt application.
//
// Specify the DES connection string.
const string connBAMPIT =
"Integrated Security=SSPI;server=.;database=BAMPrimaryImport";
// Write the activity update data on every call.
int flushThreshold = 1;
// Create an instance of the DirectEventStream.
EventStream es =
new DirectEventStream(connBAMPIT, flushThreshold);
// When a purchase order is received, you call the
// BeginActivity method in the receive application.
// You can then capture the event data by calling
// the UpdateActivity method.
es.BeginActivity ("PurchaseOrder", "PO123");
es.UpdateActivity ("PurchaseOrder", "PO123",
"MS_Received", DateTime.UtcNow,
"T_Customer", "Joe");
// Continue the activity to the next process that has been
// instrumented to handle the continuation.
es.EnableContinuation("PurchaseOrder", “PO123”, “AP123”);
// Activity from this segment (PO submission) is completed
// end activity is synonymous to IsCompleted = 1
es.EndActivity("PurchaseOrder", “PO123”);
//
// The following code would typically appear in a separate
// application that monitors the approval process
// (ApprovalProcess.exe)
//
// update when the order is approved
es.UpdateActivity ("PurchaseOrder", “AP123”, "MS_Approved",
DateTime.UtcNow, "T_Product", "Widget");
// update when the product is ready for shipment
es.UpdateActivity ("PurchaseOrder", “AP123”,
"MS_Ready", DateTime.UtcNow);
// These are shipped in two shipments.
// Relates the current purchase order
// instance to two shippings.
// Note: only one direction
es.AddRelatedActivity ("PurchaseOrder", “AP123”,
"Shipping", “UPS101”);
es.AddRelatedActivity ("PurchaseOrder", “AP123”,
"Shipping", “UPS102”);
// Activity from this segment (ApprovalProcess) is completed
es.EndActivity("PurchaseOrder", “AP123”);
// In another Shipping application, two shipments with
ID’s UPS101 and UPS102 will be created.
}
}