API BAM (esempio di BizTalk Server)
Nell'esempio relativo all'API BAM viene illustrato come incorporare le chiamate all'API BAM in un'applicazione per salvare informazioni importanti in modo che sia possibile monitorarle.
Scopo dell'esempio
In questo esempio viene implementato un semplice scenario di acquisto. Vengono generati ordini di acquisto, viene elaborato ogni singolo ordine di acquisto, vengono create spedizioni e quindi create ed elaborate le fatture. Durante l'esecuzione dell'esempio vengono create e aggiornate attività BAM per riflettere i dettagli e la disposizione degli ordini di acquisto e delle fatture.
Progettazione e finalità dell'esempio
Questo esempio è stato progettato per illustrare l'utilizzo di BAM per archiviare informazioni da un'applicazione diversa da un'orchestrazione BizTalk. Anche se l'applicazione è semplice, illustra vari aspetti di BAM che vengono probabilmente utilizzati in un'applicazione di produzione. tra cui:
Più thread fanno parte di una singola attività
Creazione di una relazione tra due attività
Utilizzo di una Continuation per consentire l'accesso alla stessa attività con ID diversi
L'esempio di API BAM è costituito da tre classi principali: una per elaborare gli ordini di acquisto, una per elaborare le spedizioni e una per elaborare le fatture. Ogni classe ha un metodo RunOnce che recupera un messaggio da una coda e quindi elabora il messaggio. Ogni classe ha anche un metodo Run che chiama continuamente il metodo RunOnce .
Il metodo RunOnce della classe PoApplication esegue le operazioni seguenti:
Crea un messaggio XML che rappresenta un ordine di acquisto.
Inizia un'attività BAMApiPo e vi aggiunge informazioni sull'ordine di acquisto e quando è stato ricevuto.
Approva o rifiuta arbitrariamente l'ordine di acquisto.
Aggiorna l'attività BAMApiPo per registrare lo stato dell'ordine di acquisto (accettato o rifiutato).
Se l'ordine di acquisto è stato accettato, il metodo RunOnce esegue anche le operazioni seguenti:
Crea un messaggio XML per rappresentare un pacchetto da spedire e aggiunge il messaggio alla coda delle spedizioni.
Aggiunge il messaggio XML che rappresenta l'ordine di acquisto alla coda degli ordini di acquisto da includere in una fattura.
Abilita la Continuation per l'attività BAMApiPo.
Termina l'attività BAMApiPo.
Il metodo RunOnce della classe ShipmentApplication esegue le operazioni seguenti:
Recupera dalla propria coda un messaggio XML che rappresenta un pacchetto da spedire.
Aggiorna l'attività BAMApiPo per registrare la data di spedizione del pacchetto.
Termina l'attività BAMApiPo.
Il metodo RunOnce della classe InvoiceApplication esegue le operazioni seguenti:
Recupera dalla propria coda un messaggio XML che rappresenta un ordine di acquisto da fatturare.
Inizia un'attività BAMApiInvoice.
Crea una relazione BAM tra l'attività BAMApiInvoice e l'attività BAMApiPo per l'ordine di acquisto in fase di fatturazione.
Aggiunge all'attività BAMApiPo informazioni sulla fattura e sulla data di creazione.
Dopo un ritardo arbitrario per simulare l'attesa della fattura da pagare, aggiunge all'attività BAMApiInvoice la data in cui la fattura è stata pagata.
Termina l'attività BAMApiInvoice.
Il metodo Main della classe MainApp inizializza l'applicazione. Esegue le operazioni seguenti:
Crea un oggetto DirectEventStream .
Avvia diversi thread e chiama il metodo Run dell'oggetto POApplication in ogni thread.
Avvia diversi thread e chiama il metodo Run dell'oggetto ShipmentApplication in ogni thread.
Avvia diversi thread e chiama il metodo Run dell'oggetto InvoiceApplication in ogni thread.
La classe Global definisce costanti utilizzate dall'applicazione di esempio, ad esempio il numero di thread da creare e la percentuale di ordini di acquisto da rifiutare.
Oltre alla soluzione Visual Studio, l'esempio contiene anche un file di Microsoft Excel che definisce le attività.
Percorso dell'esempio
Questo esempio è disponibile in <Samples Path>\BAM\BamApiSample.
Nella seguente tabella sono riportati i file inclusi nell'esempio e ne viene descritto lo scopo.
File | Descrizione |
---|---|
BamApiSample.cs | Applicazione instrumentata. |
BamApiSample.csproj | Progetto di applicazione instrumentata. |
BamApiSample.sln | Soluzione di applicazione instrumentata. |
BamApiSample.xls | Foglio di stile di definizione BAM. |
Cleanup.bat | File batch per rimuovere i file dell'esempio distribuiti. |
Input.txt | Input per la configurazione dell'intercettore dell'esempio. |
InterceptorConfig.cs | Codice di configurazione dell'intercettore per l'esempio di API. |
InterceptorConfig.csproj | Progetto di configurazione dell'intercettore. |
Invoice_config.xml | Configurazione dell'intercettore della fattura. |
Invoice_interceptor.bin | Intercettore della fattura serializzato. |
PurchaseOrder_config.xml | Configurazione dell'intercettore PurchaseOrder. |
PurchaseOrder_interceptor.bin | Intercettore PurchaseOrder serializzato. |
Setup.bat | File batch per distribuire e integrare i file dell'esempio. |
Shipment_config.xml | Configurazione dell'intercettore di spedizione. |
Shipment_interceptor.bin | Intercettore di spedizione serializzato. |
Eseguire l'esempio di API BAM
Aprire un prompt dei comandi come Amministratore ed eseguire <Samples Path>\BAM\ BamApiSample\setup.bat.
Avviare Visual Studio come amministratore e aprire la <soluzione Samples Path>\BAM\ BamApiSample\BamApiSample.sln.
Importante
La riga
//#define Interceptor
nel file BamApiSample.cs deve essere impostata come commento. Non rimuovere "//" da questa riga. L'esempio di API BAM usa solo il codice che non si trova all'interno di una#if Interceptor
direttiva del preprocessore.Compilare la soluzione.
Eseguire <il percorso> degli esempi\BAM\BamApiSample\bin\debug\BamApiSample.exe.
L'output sarà simile al seguente:
... New Purchase Order #17 Received 8 was shipped as pkg#87 New Purchase Order #18 Received. Shipping package pkg#87 via DHL 13 was Approved. 18 was Rejected. 17 was Rejected. 11 was shipped as pkg#114 16 wsas Rejected. Shipping package pkg#114 via DHL Invoice #5 send for {2 5 1 9 4 8 11 } Package pkg#49 was delivered New Purchase Order #19 Received. ...
Dopo circa un minuto, premere CTRL+C o chiudere la finestra del prompt dei comandi per arrestare il programma BamApiSample.
Visualizzare i risultati
Aprire SQL Server Management Studio.
In SQL Server Management Studio espandere il server, espandere Database, BAMPrimaryImporte quindi tabelle.
Fare clic con il pulsante destro del mouse su dbo.bam_BAMApiInvoice_Active e quindi scegliere Apri tabella. Se si usa SQL Server, fare clic su Seleziona le prime 1000 righe.
Il contenuto della tabella bam_BAMApiInvoice_Active verrà visualizzato nel riquadro destro. Ogni riga della tabella rappresenta un'attività BAMApiInvoice avviata, ma non completata.
Fare clic con il pulsante destro del mouse su dbo.bam_BAMApiPo_Completed e quindi scegliere Apri tabella. Se si usa SQL Server, fare clic su Seleziona le prime 1000 righe.
Il contenuto della tabella bam_BAMApiPo_Completed verrà visualizzato nel riquadro destro. Ogni riga della tabella rappresenta un'attività BAMApiPo completata.