Creación del ejemplo COBOL
Puede utilizar las instrucciones de este tema para crear el ejemplo COBOL. De forma alternativa, puede importar
los esquemas DFDL completados, la aplicación y la biblioteca para el ejemplo.
Creación de la aplicación y la biblioteca
Este ejemplo utiliza una
aplicación y una biblioteca en las que se almacenan los artefactos del
ejemplo. En primer lugar, debe crear la biblioteca:
- En la vista Desarrollo de intermediario, asegúrese de que está viendo recursos como Aplicaciones y bibliotecas. Pulse
Inicios rápidos.
- Pulse Iniciar creando una biblioteca. Se abre el asistente Nueva biblioteca.
- En el campo del nombre de proyecto, especifique COBOLLibrary. Pulse Finalizar
Se crea una biblioteca, llamada COBOLLibrary, y se muestra en la vista Desarrollo de intermediario.
Ahora que ya ha creado la biblioteca, cree la aplicación:
- En la vista Desarrollo de intermediario, asegúrese de que está viendo recursos como Aplicaciones y bibliotecas. Pulse
Inicios rápidos.
- Pulse Iniciar creando una aplicación. Se abrirá el asistente Nueva aplicación.
- En el campo nombre de proyecto, especifique COBOLApplication. Pulse Siguiente
- Seleccione la biblioteca que creó anteriormente, COBOLLibrary. Pulse Finalizar.
Se crea una aplicación, llamada COBOLApplication, y se
muestra en la vista Desarrollo de intermediario.
Creación de los archivos de esquema DFDL
Esta sección describe cómo crear los archivos de esquema DFDL que se utilizan en este
ejemplo, importando libros de copias COBOL. Guarde los libros de copias COBOL siguientes en su espacio de trabajo:
- OrderList
- PurchaseData
- CustomerAddress
Para crear un archivo de esquema DFDL para cada uno de estos libros de copias COBOL:
- En la vista Desarrollo de intermediario, asegúrese de que está viendo recursos como Aplicaciones y bibliotecas. Pulse el botón derecho del ratón en la biblioteca COBOLLibrary.
Pulse Nuevo > Modelo de mensaje. Se abre el asistente Nuevo modelo de mensaje.
- En el asistente Nuevo modelo de mensaje, seleccione COBOL. Pulse Siguiente.
- Seleccione Crear archivo de esquema DFDL importando un libro de copias o programa COBOL. Pulse Siguiente.
- Seleccione el libro de copias que desea importar del espacio de trabajo. Pulse Siguiente
- Cada uno de los libros de copia COBOL que se proporciona contiene un solo elemento de nivel 01. Seleccione este elemento en la
lista Estructuras de origen y pulse a continuación el botón > para pasar el elemento
a la lista Estructuras importadas. Pulse Siguiente.
- Deje estas opciones como predeterminadas. Pulse Siguiente.
- Bajo Opciones de codificación, seleccione Fija.
- En la lista desplegable Codificación (pagina de códigos), seleccione UTF-8. Establezca Orden de bytes en Big Endian.
- Pulse Finalizar
Se crea el archivo de esquema DFDL (extensión de archivo .xsd) y se muestra en la carpeta Definiciones de esquema de su biblioteca, COBOLLibrary. Repita estos pasos para cada uno de tres libros de copia COBOL.
Adición de discriminadores a los archivos de esquema DFDL
Antes de poder utilizar los archivos de esquema DFDL OrderList.xsd y PurchaseData.xsd en este ejemplo,
debe añadir discriminadores a cada uno de los elementos seleccionados.
Para añadir discriminadores a OrderList.xsd:
- En la vista Desarrollo de intermediario, asegúrese de que está viendo recursos como Aplicaciones y bibliotecas. Expanda COBOLLibrary > Definiciones de esquema. Pulse el botón derecho del ratón en el archivo de esquema DFDL, OrderList.xsd, y seleccione Abrir. El archivo de esquema DFDL se abre en el editor de esquemas
DFDL.
- En la vista Editor, se muestra una opción como hijo del tipo complejo, OrderList. Expanda esta opción y seleccione PointOfSale1.
- En la vista Propiedades DFDL, pulse el separador Condiciones de prueba.
- Seleccione Discriminador y pulse Añadir discriminador.
- En la lista desplegable Clase de prueba, seleccione expression.
- En el campo Condición de prueba, escriba {/OrderList/PointOfSaleType eq '1'}.
- En la vista Editor, seleccione PointOfSale2.
- En la vista Propiedades DFDL, pulse el separador Condiciones de prueba.
- Seleccione Discriminador y pulse Añadir discriminador.
- En la lista desplegable Clase de prueba, seleccione expression.
- En el campo Condición de prueba, escriba {/OrderList/PointOfSaleType eq '2'}.
Para añadir discriminadores a PurchaseData.xsd:
- En la vista Desarrollo de intermediario, asegúrese de que está viendo recursos como Aplicaciones y bibliotecas. Expanda COBOLLibrary > Definiciones de esquema. Pulse el botón derecho del ratón en el archivo de esquema DFDL, PurchaseData.xsd, y seleccione Abrir. El archivo de esquema DFDL se abre en el editor de esquemas
DFDL.
- En la vista Editor, expanda SaleList > Invoice > Items > choice, y seleccione Item1.
- En la vista Propiedades DFDL, pulse el separador Condiciones de prueba.
- Seleccione Discriminador y pulse Añadir discriminador.
- En la lista desplegable Clase de prueba, seleccione expression.
- En el campo Condición de prueba, escriba {/PurchaseData/SaleList/Invoice/Items/ItemType eq '1'}.
- En la vista Editor, seleccione Item2.
- En la vista Propiedades DFDL, pulse el separador Condiciones de prueba.
- Seleccione Discriminador y pulse Añadir discriminador.
- En la lista desplegable Clase de prueba, seleccione expression.
- En el campo Condición de prueba, escriba {/PurchaseData/SaleList/Invoice/Items/ItemType eq '2'}.
Ahora debería tener tres archivos de esquema DFDL, como los siguientes:
En este momento podrá probar sus archivos de esquema DFDL ejecutando un análisis de
prueba de los datos de ejemplo, consulte Probar un esquema DFDL analizando los datos de entrada de prueba.
Creación del flujo de mensajes OrderList2PurchaseData
Para crear el flujo de mensajes OrderList2PurchaseData que se utiliza en este ejemplo:
- En la vista Desarrollo de intermediario, asegúrese de que está viendo recursos como Aplicaciones y bibliotecas. Pulse el botón derecho del ratón en la aplicación, COBOLApplication. Pulse Nuevo > Flujo de mensajes. Se abre el asistente Nuevo flujo de mensajes.
- En el campo Nombre del flujo de mensajes, escriba
OrderList2PurchaseData.
- Pulse Finalizar. El flujo de mensajes se crea, con el nombre OrderList2PurchaseData, y se abre en el editor de flujos de mensajes.
- En el Editor de flujos de mensajes, añada dos nodos MQInput, un nodo de
transformación de su elección (por ejemplo, un nodo Compute ESQL o un nodo Mapping) y un
nodo MQOutput.
Para obtener instrucciones, consulte Crear un flujo de mensajes
en la documentación de WebSphere Message Broker.
- Conecte los terminales de nodo:
- Conecte el terminal de salida (Out) de ambos nodos MQInput al terminal de entrada (In) del nodo de
transformación.
- Conecte el terminal de salida (Out) del nodo de transformación al terminal de entrada (In) del nodo MQOutput.
Para obtener instrucciones, consulte
Conexión a nodos de flujo de mensajes
en la documentación de WebSphere Message Broker.
- Configure las propiedades de nodo tal como se indica en la
siguiente tabla. Acepte los valores predeterminados para todas las
propiedades, a menos que en la tabla se indique un valor alternativo.
Para obtener instrucciones, consulte
Configurar un nodo de flujo de mensajes
en la documentación de WebSphere Message Broker.
Nodo |
Página |
Propiedad |
Valor |
MQInput |
Básicas |
Nombre de cola |
ORDERLIST.IN1 |
Análisis de mensaje de entrada |
Dominio del mensaje |
DFDL |
Análisis de mensaje de entrada |
Modelo de mensaje |
OrderList.xsd |
Análisis de mensaje de entrada |
Mensaje |
{}OrderList.xsd |
MQInput |
Básicas |
Nombre de cola |
XMLORDERLIST.IN1 |
Análisis de mensaje de entrada |
Dominio del mensaje |
XMLNSC |
Análisis de mensaje de entrada |
Modelo de mensaje |
OrderList.xsd |
MQOutput |
Básicas |
Nombre de cola |
PURCHASEDATA.OUT1
|
- Si está utilizando un nodo Compute ESQL, efectúe una doble pulsación en el nodo
Compute para abrir el Editor ESQL.
- En la vista de editor, sustituya el ESQL existente por el código siguiente:
CREATE COMPUTE MODULE OrderList2PurchaseData_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
SET OutputRoot.DFDL.PurchaseData.InvoiceCount = InputRoot.DFDL.OrderList.InvoiceCount;
SET OutputRoot.DFDL.PurchaseData.ItemCount = InputRoot.DFDL.OrderList.ItemCount;
DECLARE TotalQuantity INTEGER 0;
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(InputRoot.DFDL.OrderList.SaleList.Invoice[]);
WHILE I <= J DO
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].CustomerInitial[1] = InputRoot.DFDL.OrderList.SaleList.Invoice[I].InvoiceHeader.CustomerInitial[1];
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].CustomerInitial[2] = InputRoot.DFDL.OrderList.SaleList.Invoice[I].InvoiceHeader.CustomerInitial[2];
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Surname = InputRoot.DFDL.OrderList.SaleList.Invoice[I].InvoiceHeader.Surname;
DECLARE K INTEGER 1;
DECLARE L INTEGER;
SET L = CARDINALITY(InputRoot.DFDL.OrderList.SaleList.Invoice[I].Items.Item[]);
WHILE K <= L DO
DECLARE OutputItem ROW;
SET OutputItem = THE (
SELECT Inv.ItemType
, Inv.ItemCode
, Inv.Description
, Inv.Price
, Inv.Category
, It.Quantity
FROM InputRoot.DFDL.OrderList.SaleList.Invoice[I].Items.Item[K] AS It
, InputRoot.DFDL.OrderList.Inventory.Item[] AS Inv
WHERE Inv.ItemCode = It.ItemCode
AND Inv.ItemCode = InputRoot.DFDL.OrderList.SaleList.Invoice[I].Items.Item[K].ItemCode
);
IF OutputItem.ItemType = '1' THEN
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].ItemType = OutputItem.ItemType;
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.ItemCode = 'AA';--OutputItem.ItemCode;
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.Price = OutputItem.Price;
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.Description = OutputItem.Description;
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.Category = OutputItem.Category;
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.Quantity = OutputItem.Quantity;
ELSE
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].ItemType = OutputItem.ItemType;
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item2.ItemCode = OutputItem.ItemCode;
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item2.Price = OutputItem.Price;
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item2.Colour = OutputItem.Description;
SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item2.Quantity = OutputItem.Quantity;
END IF;
SET TotalQuantity = TotalQuantity + OutputItem.Quantity;
SET K = K + 1;
END WHILE;
SET I = I + 1;
END WHILE;
--Trailer
SET OutputRoot.DFDL.PurchaseData.Trailer.TotalQuantity = TotalQuantity;
IF EXISTS(InputRoot.DFDL.OrderList.PointOfSale1[]) THEN
SET OutputRoot.DFDL.PurchaseData.Trailer.PointOfSaleType = '1';
ELSE
SET OutputRoot.DFDL.PurchaseData.Trailer.PointOfSaleType = '2';
END IF;
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
END MODULE;
- Si está utilizando un nodo Mapping, efectúe una doble pulsación
en el nodo Mapping para abrir el editor de Correlación de datos gráficos.
Seleccione "OrderList" como entrada y "PurchaseData" como salida y cree las
transformaciones necesarias.
- Guarde el flujo de mensajes.
Crear el flujo de mensajes Redefine
Para crear el flujo de mensajes Redefine que se utiliza en este ejemplo:
- En la vista Desarrollo de intermediario, asegúrese de que está viendo recursos como Aplicaciones y bibliotecas. Pulse el botón derecho del ratón en la aplicación, COBOLApplication. Pulse Nuevo > Flujo de mensajes. Se abre el asistente Nuevo flujo de mensajes.
- En el campo Nombre del flujo de mensajes, escriba Redefine.
- Pulse Finalizar. El flujo de mensajes se crea, con el nombre Redefine, y se abre en el editor de
flujos de mensajes.
- En el editor de flujo de mensajes, añada un nodo MQInput, un nodo Compute y un nodo MQOutput.
Para obtener instrucciones, consulte Crear un flujo de mensajes
en la documentación de WebSphere Message Broker.
- Conecte los terminales de nodo:
- Conecte el terminal Out del nodo MQInput al terminal In del nodo
Compute.
- Conecte el terminal Out del nodo Compute al terminal In del nodo
MQOutput.
Para obtener instrucciones, consulte
Conexión a nodos de flujo de mensajes
en la documentación de WebSphere Message Broker.
- Configure las propiedades de nodo tal como se indica en la
siguiente tabla. Acepte los valores predeterminados para todas las
propiedades, a menos que en la tabla se indique un valor alternativo.
Para obtener instrucciones, consulte
Configurar un nodo de flujo de mensajes
en la documentación de WebSphere Message Broker.
Nodo |
Página |
Propiedad |
Valor |
MQInput |
Básicas |
Nombre de cola |
BINARYADDR.IN1 |
Análisis de mensaje de entrada |
Dominio del mensaje |
DFDL |
Análisis de mensaje de entrada |
Modelo de mensaje |
CustomerAddress.xsd |
Análisis de mensaje de entrada |
Mensaje |
{}CustomerAddress.xsd |
MQOutput |
Básicas |
Nombre de cola |
XMLADDR.OUT1
|
- Pulse dos veces sobre el nodo Compute para abrirlo en el editor ESQL.
- En la vista de editor, sustituya el ESQL existente por el código siguiente:
CREATE COMPUTE MODULE RedefineAddr_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
SET OutputRoot.XMLNSC = InputRoot.DFDL;
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER;
SET J = CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
END MODULE;
- Guarde el flujo de mensajes.
Despliegue
Para desplegar la aplicación, arrastre la aplicación COBOLApplication
al grupo de ejecución en el que desee desplegarla. Automáticamente se genera un archivo BAR y se despliega en el intermediario.
Prueba
Este ejemplo proporciona algunos datos de prueba de ejemplo para los tres escenarios. Estos
son OrderList.bin, OrderListLogicalInstance.xml y
TestInputAddress1.bin, que se encuentran en la
biblioteca COBOLLibrary.
Para obtener información sobre cómo utilizar el cliente de prueba, consulte Visión general del cliente de prueba.
Volver a Leer sobre el ejemplo
Volver a la página inicial del ejemplo