COBOL-Mustercode erstellen
Mithilfe der Anweisungen in diesem Abschnitt können Sie den COBOL-Mustercode erstellen. Eine
andere Möglichkeit besteht darin, die abgeschlossenen DFDL-Schemas, die Anwendung und die
Bibliothek für den Mustercode zu importieren.
Anwendung und Bibliothek erstellen
Dieser Mustercode verwendet eine Anwendung und
eine Bibliothek, in denen die Musterartefakte enthalten sind. Erstellen Sie zunächst die Bibliothek:
- Stellen Sie sicher, dass in der Ansicht 'Brokerentwicklung' Ressourcen als Anwendungen und
Bibliotheken angezeigt werden. Klicken Sie auf Schnelleinstiege.
- Klicken Sie auf Mit dem Erstellen einer Bibliothek beginnen. Der Assistent 'Neue Bibliothek' wird geöffnet.
- Geben Sie im Feld für den Projektnamen den Namen COBOLLibrary
ein. Klicken Sie auf Fertigstellen.
Es wird eine Bibliothek mit dem Namen COBOLLibrary erstellt und in
der Ansicht 'Brokerentwicklung' angezeigt.
Erstellen Sie nun, nachdem Sie die Bibliothek erstellt haben, die Anwendung:
- Stellen Sie sicher, dass in der Ansicht 'Brokerentwicklung' Ressourcen als Anwendungen und
Bibliotheken angezeigt werden. Klicken Sie auf Schnelleinstiege.
- Klicken Sie auf Mit dem Erstellen einer Anwendung beginnen. Der
Assistent 'Neue Anwendung' wird geöffnet.
- Geben Sie im Feld Projektname den Namen
COBOLApplication ein. Klicken Sie auf Weiter.
- Wählen Sie die zuvor erstellte Bibliothek COBOLLibrary aus. Klicken Sie auf Fertigstellen.
Es wird eine Anwendung mit dem Namen COBOLApplication erstellt und in
der Ansicht 'Brokerentwicklung' angezeigt.
DFDL-Schemadateien erstellen
In diesem Abschnitt wird beschrieben, wie die DFDL-Schemadateien, die in diesem Mustercode
verwendet werden, durch den Import von COBOL-Copybooks erstellt werden. Speichern Sie folgende
COBOL-Copybooks in Ihrem Arbeitsbereich:
- OrderList
- PurchaseData
- CustomerAddress
So erstellen Sie für jedes dieser COBOL-Copybooks eine DFDL-Schemadatei:
- Stellen Sie sicher, dass in der Ansicht 'Brokerentwicklung' Ressourcen als Anwendungen und
Bibliotheken angezeigt werden. Klicken Sie mit der rechten Maustaste auf die Bibliothek COBOLLibrary.
Klicken Sie auf
Neu > Nachrichtenmodell. Daraufhin wird der Assistent 'Neues Nachrichtenmodell' geöffnet.
- Wählen Sie im Assistenten für neue Nachrichtenmodelle COBOL
aus. Klicken Sie auf
Weiter.
- Wählen Sie DFDL-Schemadatei durch Import eines COBOL-Copybooks oder
-Programms erstellen aus. Klicken Sie auf
Weiter.
- Wählen Sie das Copybook aus, das Sie aus Ihrem Arbeitsbereich importieren möchten. Klicken Sie auf Weiter.
- Jedes der bereitgestellten COBOL-Copybooks enthält nur ein Element der Ebene 01. Wählen Sie
dieses Element in der Liste Quellenstrukturen aus und klicken Sie
dann auf die Schaltfläche >, um das Element in die Liste
Importierte Strukturen zu verschieben. Klicken Sie auf
Weiter.
- Übernehmen Sie für diese Optionen die Standardwerte. Klicken Sie auf
Weiter.
- Wählen Sie aus den Codierungsoptionen die Option Fest aus.
- Wählen Sie in der Dropdown-Liste Codierung (Codepage) den
Eintrag UTF-8 aus. Setzen Sie
Byteanordnung auf Big Endian.
- Klicken Sie auf Fertigstellen.
Die DFDL-Schemadatei wird erstellt (Dateierweiterung .xsd) und im
Ordner 'Schemadefinitionen' Ihrer Bibliothek (COBOLLibrary) angezeigt. Wiederholen Sie diese Schritte für jedes der
drei COBOL-Copybooks.
Diskriminatoren zu den DFDL-Schemadateien hinzufügen
Damit die DFDL-Schemadateien OrderList.xsd und
PurchaseData.xsd in diesem Mustercode verwendet werden können, müssen
Sie Diskriminatoren zu jedem der Auswahlelemente hinzufügen.
So fügen Sie die erforderlichen Diskriminatoren zur Datei
OrderList.xsd hinzu:
- Stellen Sie sicher, dass in der Ansicht 'Brokerentwicklung' Ressourcen als Anwendungen und
Bibliotheken angezeigt werden. Erweitern Sie den Eintrag COBOLLibrary > Schemadefinitionen. Klicken Sie mit der rechten Maustaste auf die DFDL-Schemadatei
OrderList.xsd und wählen Sie Öffnen
aus. Die DFDL-Schemadatei wird im DFDL-Schemaeditor geöffnet.
- In der Ansicht 'Editor' wird eine Auswahl als untergeordnetes Element des komplexen Typs
OrderList angezeigt. Erweitern Sie diese Auswahl und wählen Sie
PointOfSale1 aus.
- Klicken Sie in der Ansicht 'DFDL-Eigenschaften' auf die Registerkarte
Prüfbedingungen.
- Wählen Sie Diskriminator aus und klicken Sie auf
Diskriminator hinzufügen.
- Wählen Sie in der Dropdown-Liste Test Kind (Prüftyp) den Typ
expression (Ausdruck) aus.
- Geben Sie im Feld Test Condition (Prüfbedingung) den Ausdruck
{/OrderList/PointOfSaleType eq '1'} ein.
- Wählen Sie in der Ansicht 'Editor' PointOfSale2 aus.
- Klicken Sie in der Ansicht 'DFDL-Eigenschaften' auf die Registerkarte
Prüfbedingungen.
- Wählen Sie Diskriminator aus und klicken Sie auf
Diskriminator hinzufügen.
- Wählen Sie in der Dropdown-Liste Test Kind (Prüftyp) den Typ
expression (Ausdruck) aus.
- Geben Sie im Feld Test Condition (Prüfbedingung) den Ausdruck
{/OrderList/PointOfSaleType eq '2'} ein.
So fügen Sie die erforderlichen Diskriminatoren zur Datei
PurchaseData.xsd hinzu:
- Stellen Sie sicher, dass in der Ansicht 'Brokerentwicklung' Ressourcen als Anwendungen und
Bibliotheken angezeigt werden. Erweitern Sie den Eintrag COBOLLibrary > Schemadefinitionen. Klicken Sie mit der rechten Maustaste auf die DFDL-Schemadatei
PurchaseData.xsd und wählen Sie Öffnen
aus. Die DFDL-Schemadatei wird im DFDL-Schemaeditor geöffnet.
- Erweitern Sie in der Ansicht 'Editor' SaleList > Invoice > Items
> choice und wählen Sie Item1 aus.
- Klicken Sie in der Ansicht 'DFDL-Eigenschaften' auf die Registerkarte
Prüfbedingungen.
- Wählen Sie Diskriminator aus und klicken Sie auf
Diskriminator hinzufügen.
- Wählen Sie in der Dropdown-Liste Test Kind (Prüftyp) den Typ
expression (Ausdruck) aus.
- Geben Sie im Feld Test Condition (Prüfbedingung) den Ausdruck
{/PurchaseData/SaleList/Invoice/Items/ItemType eq '1'} ein.
- Wählen Sie in der Ansicht 'Editor' Item2 aus.
- Klicken Sie in der Ansicht 'DFDL-Eigenschaften' auf die Registerkarte
Prüfbedingungen.
- Wählen Sie Diskriminator aus und klicken Sie auf
Diskriminator hinzufügen.
- Wählen Sie in der Dropdown-Liste Test Kind (Prüftyp) den Typ
expression (Ausdruck) aus.
- Geben Sie im Feld Test Condition (Prüfbedingung) den Ausdruck
{/PurchaseData/SaleList/Invoice/Items/ItemType eq '2'} ein.
Sie sollten jetzt über die drei folgenden DFDL-Schemadateien verfügen:
An dieser Stelle können Sie Ihre DFDL-Schemadateien testen, indem Sie eine Testanalyse der Musterdaten durchführen. Weitere Informationen finden Sie im Abschnitt DFDL-Schema durch Analyse der Testeingabedaten testen.
Nachrichtenfluss 'OrderList2PurchaseData' erstellen
So erstellen Sie den Nachrichtenfluss 'OrderList2PurchaseData', der in diesem Mustercode verwendet wird:
- Stellen Sie sicher, dass in der Ansicht 'Brokerentwicklung' Ressourcen als Anwendungen und
Bibliotheken angezeigt werden. Klicken Sie mit der rechten Maustaste auf die Anwendung COBOLApplication. Klicken Sie auf
Neu > Nachrichtenfluss. Der Assistent 'Neuer Nachrichtenfluss'
wird geöffnet.
- Geben Sie im Feld Name des Nachrichtenflusses den Namen
OrderList2PurchaseData ein.
- Klicken Sie auf Fertigstellen. Der Nachrichtenfluss wird
erstellt, erhält den Namen OrderList2PurchaseData und wird im Nachrichtenflusseditor
geöffnet.
- Fügen Sie im Nachrichtenflusseditor zwei MQInput-Knoten, einen Umsetzungsknoten Ihrer Wahl (beispielsweise einen ESQL Compute- oder einen Mapping-Knoten) und einen MQOutput-Knoten hinzu.
Die entsprechenden Anweisungen finden Sie in der WebSphere Message Broker-Dokumentation unter Nachrichtenflüsse erstellen.
- Verbinden Sie die Knotenterminals:
- Verbinden Sie das Ausgangsterminal der beiden MQInput-Knoten mit dem Eingangsterminal des
Umsetzungsknotens.
- Verbinden Sie das Ausgangsterminal des Umsetzungsknotens mit dem Eingangsterminal des MQOutput-Knotens.
Anweisungen hierzu finden Sie in der Dokumentation zu WebSphere Message Broker im Abschnitt Nachrichtenflussknoten verbinden.
- Konfigurieren Sie die Knoteneigenschaften wie in der folgenden Tabelle angegeben. Akzeptieren Sie die Standardwerte für alle Eigenschaften, es sein denn, es ist ein alternativer Wert in der Tabelle aufgeführt.
Anweisungen hierzu finden Sie in der Dokumentation von WebSphere Message Broker im Abschnitt
Nachrichtenflussknoten konfigurieren.
Knoten |
Seite |
Eigenschaft |
Wert |
MQInput |
Grundeinstellung |
Warteschlangenname |
ORDERLIST.IN1 |
Syntaxanalyse der Eingabenachricht |
Nachrichtendomäne |
DFDL
|
Syntaxanalyse der Eingabenachricht |
Nachrichtenmodell |
OrderList.xsd |
Syntaxanalyse der Eingabenachricht |
Nachricht |
{}OrderList.xsd |
MQInput |
Grundeinstellung |
Warteschlangenname |
XMLORDERLIST.IN1 |
Syntaxanalyse der Eingabenachricht |
Nachrichtendomäne |
XMLNSC |
Syntaxanalyse der Eingabenachricht |
Nachrichtenmodell |
OrderList.xsd |
MQOutput |
Grundeinstellung |
Warteschlangenname |
PURCHASEDATA.OUT1
|
- Wenn Sie einen ESQL Compute-Knoten verwenden, klicken Sie doppelt auf den Rechenknoten, um den ESQL-Editor zu öffnen.
- Ersetzen Sie in der Editoransicht den vorhandenen ESQL-Code durch folgenden Code:
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;
- Wenn Sie einen Mapping-Knoten verwenden, klicken Sie doppelt darauf, um den Editor der grafischen Datenzuordnung zu öffnen.
Wählen Sie für die Eingabe "OrderList" und für die Ausgabe "PurchaseData" aus und erstellen Sie die erforderlichen Umsetzungen.
- Speichern Sie den Nachrichtenfluss.
Nachrichtenfluss 'Redefine' erstellen
So erstellen Sie den Nachrichtenfluss 'Redefine', der in diesem Mustercode verwendet wird:
- Stellen Sie sicher, dass in der Ansicht 'Brokerentwicklung' Ressourcen als Anwendungen und
Bibliotheken angezeigt werden. Klicken Sie mit der rechten Maustaste auf die Anwendung COBOLApplication. Klicken Sie auf
Neu > Nachrichtenfluss. Der Assistent 'Neuer Nachrichtenfluss'
wird geöffnet.
- Geben Sie im Feld Name des Nachrichtenflusses den Namen
Redefine ein.
- Klicken Sie auf Fertigstellen. Der Nachrichtenfluss wird
erstellt, erhält den Namen Redefine und wird im Nachrichtenflusseditor
geöffnet.
- Fügen Sie im Nachrichtenflusseditor einen MQInput-Knoten, einen Rechenknoten und einen
MQOutput-Knoten hinzu.
Die entsprechenden Anweisungen finden Sie in der WebSphere Message Broker-Dokumentation unter Nachrichtenflüsse erstellen.
- Verbinden Sie die Knotenterminals:
- Verbinden Sie das Ausgangsterminal des MQInput-Knotens mit dem Eingangsterminal des Rechenknotens.
- Verbinden Sie das Ausgangsterminal des Rechenknotens mit dem Eingangsterminal des MQOutput-Knotens.
Anweisungen hierzu finden Sie in der Dokumentation zu WebSphere Message Broker im Abschnitt Nachrichtenflussknoten verbinden.
- Konfigurieren Sie die Knoteneigenschaften wie in der folgenden Tabelle angegeben. Akzeptieren Sie die Standardwerte für alle Eigenschaften, es sein denn, es ist ein alternativer Wert in der Tabelle aufgeführt.
Anweisungen hierzu finden Sie in der Dokumentation von WebSphere Message Broker im Abschnitt
Nachrichtenflussknoten konfigurieren.
Knoten |
Seite |
Eigenschaft |
Wert |
MQInput |
Grundeinstellung |
Warteschlangenname |
BINARYADDR.IN1 |
Syntaxanalyse der Eingabenachricht |
Nachrichtendomäne |
DFDL
|
Syntaxanalyse der Eingabenachricht |
Nachrichtenmodell |
CustomerAddress.xsd |
Syntaxanalyse der Eingabenachricht |
Nachricht |
{}CustomerAddress.xsd |
MQOutput |
Grundeinstellung |
Warteschlangenname |
XMLADDR.OUT1
|
- Doppelklicken Sie auf den Rechenknoten, um ihn im ESQL-Editor zu öffnen.
- Ersetzen Sie in der Editoransicht den vorhandenen ESQL-Code durch folgenden Code:
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;
- Speichern Sie den Nachrichtenfluss.
Implementierung läuft
Implementieren Sie Ihre Anwendung, indem Sie die Anwendung
COBOLApplication auf die Ausführungsgruppe ziehen, in der sie
implementiert werden soll. Es wird automatisch eine Brokerarchivdatei (BAR-Datei) generiert und im
Broker implementiert.
Test
Dieser Mustercode stellt Beispieltestdaten für alle drei Szenarios bereit. Dabei handelt es sich
um die Dateien OrderList.bin,
OrderListLogicalInstance.xml und
TestInputAddress1.bin, die sich in der Bibliothek COBOLLibrary befinden.
Informationen zur Verwendung des Testclients finden Sie im Abschnitt
Testclient - Übersicht.
Zurück zu 'Informationen zum Mustercode'
Zurück zum Beginn des Mustercodes