Condividi tramite


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:

  1. Crea un messaggio XML che rappresenta un ordine di acquisto.

  2. Inizia un'attività BAMApiPo e vi aggiunge informazioni sull'ordine di acquisto e quando è stato ricevuto.

  3. Approva o rifiuta arbitrariamente l'ordine di acquisto.

  4. Aggiorna l'attività BAMApiPo per registrare lo stato dell'ordine di acquisto (accettato o rifiutato).

  5. Se l'ordine di acquisto è stato accettato, il metodo RunOnce esegue anche le operazioni seguenti:

    1. Crea un messaggio XML per rappresentare un pacchetto da spedire e aggiunge il messaggio alla coda delle spedizioni.

    2. Aggiunge il messaggio XML che rappresenta l'ordine di acquisto alla coda degli ordini di acquisto da includere in una fattura.

    3. Abilita la Continuation per l'attività BAMApiPo.

    4. Termina l'attività BAMApiPo.

    Il metodo RunOnce della classe ShipmentApplication esegue le operazioni seguenti:

  6. Recupera dalla propria coda un messaggio XML che rappresenta un pacchetto da spedire.

  7. Aggiorna l'attività BAMApiPo per registrare la data di spedizione del pacchetto.

  8. Termina l'attività BAMApiPo.

    Il metodo RunOnce della classe InvoiceApplication esegue le operazioni seguenti:

  9. Recupera dalla propria coda un messaggio XML che rappresenta un ordine di acquisto da fatturare.

  10. Inizia un'attività BAMApiInvoice.

  11. Crea una relazione BAM tra l'attività BAMApiInvoice e l'attività BAMApiPo per l'ordine di acquisto in fase di fatturazione.

  12. Aggiunge all'attività BAMApiPo informazioni sulla fattura e sulla data di creazione.

  13. Dopo un ritardo arbitrario per simulare l'attesa della fattura da pagare, aggiunge all'attività BAMApiInvoice la data in cui la fattura è stata pagata.

  14. Termina l'attività BAMApiInvoice.

    Il metodo Main della classe MainApp inizializza l'applicazione. Esegue le operazioni seguenti:

  15. Crea un oggetto DirectEventStream .

  16. Avvia diversi thread e chiama il metodo Run dell'oggetto POApplication in ogni thread.

  17. Avvia diversi thread e chiama il metodo Run dell'oggetto ShipmentApplication in ogni thread.

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

  1. Aprire un prompt dei comandi come Amministratore ed eseguire <Samples Path>\BAM\ BamApiSample\setup.bat.

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

  3. Compilare la soluzione.

  4. 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.  
    ...  
    
  5. Dopo circa un minuto, premere CTRL+C o chiudere la finestra del prompt dei comandi per arrestare il programma BamApiSample.

Visualizzare i risultati

  1. Aprire SQL Server Management Studio.

  2. In SQL Server Management Studio espandere il server, espandere Database, BAMPrimaryImporte quindi tabelle.

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

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