C#-Code für den Beispielcode '.NETCompute-Knoten'

Filterknoten

Für den Inhalt der gesamten Klassendatei des Filterknotens wird der folgende C#-Code verwendet:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using IBM.Broker.Plugin;

namespace SampleDotNetProject
{
    /// 
    /// FilterNode-Klasse
    /// 
    public class FilterNode : NBComputeNode
    {
        /// 
        /// Evaluate-Methode
        /// 
        /// 
        public override void Evaluate(NBMessageAssembly inputAssembly)
        {
            NBOutputTerminal outTerminal = OutputTerminal("Out");
            NBOutputTerminal altTerminal = OutputTerminal("Alternate");
            NBOutputTerminal failureTerminal = OutputTerminal("Failure");

            NBMessage inputMessage = inputAssembly.Message;
            NBElement root = inputMessage.RootElement;

            #region UserCode
// Benutzercode in diesem Bereich hinzufügen, um die Nachricht zu filtern

            // Im folgenden Ausdruck wird bewusst "LastChild" anstatt "FirstChild" verwendet,
       //  falls eine XML-Deklaration vorhanden ist!
            switch (root[NBParsers.XMLNSC.ParserName].LastChild.Name)
            {
                case "LoyaltyProgram":
                    outTerminal.Propagate(inputAssembly);
                    break;
                case "SaleEnvelope":
                    altTerminal.Propagate(inputAssembly);
                    break;
                default:
                    failureTerminal.Propagate(inputAssembly);
                    break;
            }
            #endregion UserCode
        }
    }
}

Änderungsknoten

Der 'UserCode'-Bereich des Änderungsknotens verwendet folgenden C#-Code:

#region UserCode
NBElement xmlRoot = outputRoot[NBParsers.XMLNSC.ParserName];
NBElement xmlDecl = xmlRoot[NBParsers.XMLNSC.XmlDeclaration, "XmlDeclaration"];
if (xmlDecl == null)
{
    // Eine XML-Deklaration erstellen, falls erforderlich
    NBParsers.XMLNSC.CreateXmlDeclaration(xmlRoot, "1.0", "UTF-8", "yes");
}
string notargetnamespace = "";
string namespaceStore = "http://www.example.org/store";
NBElement storeDetails = xmlRoot[notargetnamespace, "LoyaltyProgram"][namespaceStore, "StoreDetails"];
string storeName = "";
string storeStreet = "";
string storeTown = "Happyville";
switch((string)storeDetails[namespaceStore,"StoreID"]) {
case "001":
    storeName = "Broker Brothers Central";
    storeStreet = "Exuberant Avenue";
    break;
case "002":
    storeName = "Broker Brothers Mall";
    storeStreet = "Enthusiastic Crescent";
    break;
case "003":
    storeName = "Broker Brothers District";
    storeStreet = "Peaceful Road";
    break;                  
}
storeDetails.CreateLastChild(namespaceStore, "StoreName", storeName);
storeDetails.CreateLastChild(namespaceStore, "StoreStreet", storeStreet);
storeDetails.CreateLastChild(namespaceStore, "StoreTown", storeTown);
#endregion UserCode

Erstellungsknoten

Der 'UserCode'-Bereich des Erstellungsknotens verwendet folgenden C#-Code:

#region UserCode
outputRoot["Properties"]["MessageSet"].SetValue("DotNetLibrary");
outputRoot["Properties"]["MessageType"].SetValue("File");
outputRoot.CreateLastChildUsingNewParser(NBParsers.DFDL.ParserName);
NBElement File = outputRoot[NBParsers.DFDL.ParserName].CreateFirstChild(null, "File");
NBElement inxmlRoot = inputRoot[NBParsers.XMLNSC.ParserName];
IEnumerable<NBElement> invoices = inxmlRoot["SaleEnvelope"]["SaleList"].Children("Invoice");
foreach (NBElement invoice in invoices)
{
    TransformInvoice(File, invoice);
}
// Korrekturwert der lokalen Umgebung zur dynamischen Steuerung des MQOutput-Knotens definieren
NBElement outputLE = outAssembly.LocalEnvironment.RootElement;
NBElement mqLE = outputLE.CreateFirstChild(null, "Destination").CreateFirstChild(null, "MQ");
mqLE.CreateFirstChild(null, "DestinationData").CreateFirstChild(null, "queueName","DOTNET.OUT");
#endregion UserCode

Der oben aufgeführte Code referenziert zudem eine TransformInvoice-Methode, die nachfolgend gezeigt wird. Wenn Sie diese Methode in die vom .NETCompute-Konten verwendete C#-Klasse einfügen, stellen Sie sicher, dass sie außerhalb der Bewertungsmethode (Evaluate) steht, zum Beispiel direkt vor der Methode 'CopyMessageHeaders'.

private static void TransformInvoice(NBElement outputFileElement, NBElement inputInvoiceElement)
{
    // Mit dieser Methode wird auf Basis des Elements 'Invoice' in der Eingabenachricht eine Struktur erstellt
    IEnumerable<NBElement> items = inputInvoiceElement.Children("Item");
    foreach (NBElement item in items)
    {
        NBElement record = outputFileElement.CreateLastChild(null, "Record");
        string notargetnamespace = "";
        record.CreateLastChild(notargetnamespace, "Code1", (string)item["Code", 0]);
        record.CreateLastChild(notargetnamespace, "Code2", (string)item["Code", 1]);
        record.CreateLastChild(notargetnamespace, "Code3", (string)item["Code", 2]);
        record.CreateLastChild(notargetnamespace, "Description", (string)item["Description"]);
        record.CreateLastChild(notargetnamespace, "Category", (string)item["Category"]);
        record.CreateLastChild(notargetnamespace, "Price", (decimal)item["Price"]);
        record.CreateLastChild(notargetnamespace, "Quantity", (Int32)item["Quantity"]);
    }
}

Zurück zum Beginn des Beispielcodes