API de BAM (ejemplo de BizTalk Server)
El ejemplo de API de BAM ilustra el modo de incorporar llamadas a la API de BAM en una aplicación para guardar información de claves que podrá supervisar.
Descripción del ejemplo
En este ejemplo se implementa un escenario simple de compra. Genera pedidos de compra, procesa cada pedido de compra, crea envíos y crea y procesa facturas. Según se ejecuta el ejemplo, crea y actualiza actividades BAM para reflejar los detalles y la disposición de los pedidos de compra y facturas.
Cómo y por qué se ha diseñado este ejemplo
Este ejemplo se ha diseñado para ilustrar cómo se usa BAM para almacenar información de una aplicación que no es una orquestación de BizTalk. Aunque la aplicación es sencilla, ilustra diversos aspectos de BAM que es probable que use en una aplicación de producción. Entre ellas, figuran:
Varios subprocesos que contribuyen a una sola actividad
Creación de una relación entre dos actividades
Uso de una continuación para permitir que se pueda obtener acceso a la misma actividad con diferentes identificadores
El ejemplo de API de BAM consta de tres clases principales: una para procesar pedidos de compra, una para procesar envíos y otra para procesar facturas. Cada clase tiene un método RunOnce que recupera un mensaje de una cola y, a continuación, procesa el mensaje. Cada clase también tiene un método Run que llama continuamente al método RunOnce .
El método RunOnce de la clase PoApplication hace lo siguiente:
Crea un mensaje XML que representa un pedido de compra.
Comienza una actividad BAMApiPo y se agrega a la información de actividad acerca del pedido de compra y cuándo se recibió.
Aprueba arbitrariamente o rechaza el pedido de compra.
Actualiza la actividad BAMApiPo para registrar el estado del pedido de compra (aceptado o rechazado).
Si se aceptó el pedido de compra, el método RunOnce también hace lo siguiente:
Crea un mensaje XML para representar un paquete que se va a enviar y agrega el mensaje a la cola de envíos.
Agrega el mensaje XML que representa el pedido de compra a la cola de pedidos de compra que se van a incluir en una factura.
Permite la continuación de la actividad BAMApiPo.
Finaliza la actividad BAMApiPo.
El método RunOnce de la clase ShipmentApplication hace lo siguiente:
Recupera de su cola un mensaje XML que representa un paquete que se van a enviar.
Actualiza la actividad BAMApiPo para registrar la hora en la que se envió el paquete.
Finaliza la actividad BAMApiPo.
El método RunOnce de la clase InvoiceApplication hace lo siguiente:
Recupera de su cola un mensaje XML que representa un pedido de compra que se va a facturar.
Comienza una actividad BAMApiInvoice.
Crea una relación BAM entre la actividad BAMApiInvoice y la actividad BAMApiPo para el pedido de compra que se va a facturar.
Agrega a la actividad BAMApiPo información acerca de la factura y su hora de creación.
Después de un retraso arbitrario para simular la espera a que se abone la factura, agrega a la actividad BAMApiInvoice la hora en que se pagó la factura.
Finaliza la actividad BAMApiInvoice.
El método Main de la clase MainApp inicializa la aplicación. Realiza las operaciones siguientes:
Crea un objeto DirectEventStream .
Inicia varios subprocesos y llama al método Run del objeto POApplication en cada subproceso.
Inicia varios subprocesos y llama al método Run del objeto ShipmentApplication en cada subproceso.
Inicia varios subprocesos y llama al método Run del objeto InvoiceApplication en cada subproceso.
La clase Global define constantes que usa la aplicación de ejemplo, como el número de subprocesos que se van a crear y el porcentaje de pedidos de compra que se van a rechazar.
Además de la solución de Visual Studio, el ejemplo también contiene un archivo de Microsoft Excel que define las actividades.
Ubicación del ejemplo
Puede encontrar este ejemplo en <Samples Path>\BAM\BamApiSample.
En la tabla siguiente se enumeran los archivos del ejemplo y se describe su propósito.
Archivo | Descripción |
---|---|
BamApiSample.cs | Aplicación instrumentada. |
BamApiSample.csproj | Proyecto de aplicación instrumentada. |
BamApiSample.sln | Solución de aplicación instrumentada. |
BamApiSample.xls | Hoja de estilos de definición de BAM. |
Cleanup.bat | Archivo por lotes para quitar archivos de ejemplo implementados. |
Input.txt | Entrada de configuración del interceptor de ejemplo. |
InterceptorConfig.cs | Código de configuración de interceptor del ejemplo de API. |
InterceptorConfig.csproj | Proyecto de configuración de interceptor. |
Invoice_config.xml | Configuración del interceptor de facturación. |
Invoice_interceptor.bin | Interceptor de facturación serializado. |
PurchaseOrder_config.xml | Configuración del interceptor PurchaseOrder. |
PurchaseOrder_interceptor.bin | Interceptor PurchaseOrder serializado. |
Setup.bat | Archivo por lotes para implementar y dar de alta archivos de ejemplo. |
Shipment_config.xml | Configuración del interceptor de envío. |
Shipment_interceptor.bin | Interceptor de envío serializado. |
Ejecución del ejemplo de API de BAM
Abra un símbolo del sistema como administrador y ejecute <Samples Path>\BAM\ BamApiSample\setup.bat.
Inicie Visual Studio como administrador y abra la <solución Samples Path>\BAM\ BamApiSample\BamApiSample.sln.
Importante
La línea
//#define Interceptor
del archivo BamApiSample.cs debe comentarse. No quite "//" de esta línea. El ejemplo de API de BAM usa solo el código que no está dentro de una#if Interceptor
directiva de preprocesador.Compile la solución.
Ejecutar <la ruta de> acceso de ejemplos\BAM\BamApiSample\bin\debug\BamApiSample.exe.
La salida será similar a la siguiente:
... 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. ...
Al cabo de un minuto aproximadamente, presione CTRL+C o cierre la ventana del símbolo del sistema para detener el programa BamApiSample.
Visualización de los resultados
Abra SQL Server Management Studio.
En SQL Server Management Studio, expanda el servidor, bases de datos, BAMPrimaryImport y, a continuación, tablas.
Haga clic con el botón derecho en dbo.bam_BAMApiInvoice_Active y, a continuación, haga clic en Abrir tabla. Si usa SQL Server, haga clic en Seleccionar las 1000 primeras filas.
El contenido de la tabla bam_BAMApiInvoice_Active se muestra en el panel derecho. Cada fila de la tabla representa una actividad BAMApiInvoice que se ha iniciado, pero no se ha completado.
Haga clic con el botón derecho en dbo.bam_BAMApiPo_Completed y, a continuación, haga clic en Abrir tabla. Si usa SQL Server, haga clic en Seleccionar las 1000 primeras filas.
El contenido de la tabla bam_BAMApiPo_Completed se muestra en el panel derecho. Cada fila de la tabla representa una actividad BAMApiPo que se ha completado.