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:

  1. Stellen Sie sicher, dass in der Ansicht 'Brokerentwicklung' Ressourcen als Anwendungen und Bibliotheken angezeigt werden. Klicken Sie auf Schnelleinstiege.
  2. Klicken Sie auf Mit dem Erstellen einer Bibliothek beginnen. Der Assistent 'Neue Bibliothek' wird geöffnet.
  3. 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:

  1. Stellen Sie sicher, dass in der Ansicht 'Brokerentwicklung' Ressourcen als Anwendungen und Bibliotheken angezeigt werden. Klicken Sie auf Schnelleinstiege.
  2. Klicken Sie auf Mit dem Erstellen einer Anwendung beginnen. Der Assistent 'Neue Anwendung' wird geöffnet.
  3. Geben Sie im Feld Projektname den Namen COBOLApplication ein. Klicken Sie auf Weiter.
  4. 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:

  1. OrderList
  2. PurchaseData
  3. CustomerAddress

So erstellen Sie für jedes dieser COBOL-Copybooks eine DFDL-Schemadatei:

  1. 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.
  2. Wählen Sie im Assistenten für neue Nachrichtenmodelle COBOL aus. Klicken Sie auf Weiter.
  3. Wählen Sie DFDL-Schemadatei durch Import eines COBOL-Copybooks oder -Programms erstellen aus. Klicken Sie auf Weiter.
  4. Wählen Sie das Copybook aus, das Sie aus Ihrem Arbeitsbereich importieren möchten. Klicken Sie auf Weiter.
  5. 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.
  6. Übernehmen Sie für diese Optionen die Standardwerte. Klicken Sie auf Weiter.
  7. Wählen Sie aus den Codierungsoptionen die Option Fest aus.
  8. Wählen Sie in der Dropdown-Liste Codierung (Codepage) den Eintrag UTF-8 aus. Setzen Sie Byteanordnung auf Big Endian.
  9. 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:

  1. 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.
  2. 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.
  3. Klicken Sie in der Ansicht 'DFDL-Eigenschaften' auf die Registerkarte Prüfbedingungen.
  4. Wählen Sie Diskriminator aus und klicken Sie auf Diskriminator hinzufügen.
  5. Wählen Sie in der Dropdown-Liste Test Kind (Prüftyp) den Typ expression (Ausdruck) aus.
  6. Geben Sie im Feld Test Condition (Prüfbedingung) den Ausdruck {/OrderList/PointOfSaleType eq '1'} ein.
  7. Wählen Sie in der Ansicht 'Editor' PointOfSale2 aus.
  8. Klicken Sie in der Ansicht 'DFDL-Eigenschaften' auf die Registerkarte Prüfbedingungen.
  9. Wählen Sie Diskriminator aus und klicken Sie auf Diskriminator hinzufügen.
  10. Wählen Sie in der Dropdown-Liste Test Kind (Prüftyp) den Typ expression (Ausdruck) aus.
  11. 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:

  1. 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.
  2. Erweitern Sie in der Ansicht 'Editor' SaleList > Invoice > Items > choice und wählen Sie Item1 aus.
  3. Klicken Sie in der Ansicht 'DFDL-Eigenschaften' auf die Registerkarte Prüfbedingungen.
  4. Wählen Sie Diskriminator aus und klicken Sie auf Diskriminator hinzufügen.
  5. Wählen Sie in der Dropdown-Liste Test Kind (Prüftyp) den Typ expression (Ausdruck) aus.
  6. Geben Sie im Feld Test Condition (Prüfbedingung) den Ausdruck {/PurchaseData/SaleList/Invoice/Items/ItemType eq '1'} ein.
  7. Wählen Sie in der Ansicht 'Editor' Item2 aus.
  8. Klicken Sie in der Ansicht 'DFDL-Eigenschaften' auf die Registerkarte Prüfbedingungen.
  9. Wählen Sie Diskriminator aus und klicken Sie auf Diskriminator hinzufügen.
  10. Wählen Sie in der Dropdown-Liste Test Kind (Prüftyp) den Typ expression (Ausdruck) aus.
  11. 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:

  1. 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.
  2. Geben Sie im Feld Name des Nachrichtenflusses den Namen OrderList2PurchaseData ein.
  3. Klicken Sie auf Fertigstellen. Der Nachrichtenfluss wird erstellt, erhält den Namen OrderList2PurchaseData und wird im Nachrichtenflusseditor geöffnet.
  4. 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.
  5. Verbinden Sie die Knotenterminals: Anweisungen hierzu finden Sie in der Dokumentation zu WebSphere Message Broker im Abschnitt Nachrichtenflussknoten verbinden.
  6. 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


  7. Wenn Sie einen ESQL Compute-Knoten verwenden, klicken Sie doppelt auf den Rechenknoten, um den ESQL-Editor zu öffnen.
  8. 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;
    
    
  9. 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.
  10. Speichern Sie den Nachrichtenfluss.

Nachrichtenfluss 'Redefine' erstellen

So erstellen Sie den Nachrichtenfluss 'Redefine', der in diesem Mustercode verwendet wird:

  1. 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.
  2. Geben Sie im Feld Name des Nachrichtenflusses den Namen Redefine ein.
  3. Klicken Sie auf Fertigstellen. Der Nachrichtenfluss wird erstellt, erhält den Namen Redefine und wird im Nachrichtenflusseditor geöffnet.
  4. 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.
  5. Verbinden Sie die Knotenterminals: Anweisungen hierzu finden Sie in der Dokumentation zu WebSphere Message Broker im Abschnitt Nachrichtenflussknoten verbinden.
  6. 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


  7. Doppelklicken Sie auf den Rechenknoten, um ihn im ESQL-Editor zu öffnen.
  8. 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;
    
  9. 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