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 } } }
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
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"]); } }