Untergeordneten Nachrichtenfluss für Lastschrift von Girokonto erstellen

Befolgen Sie die nachfolgenden Anweisungen, um den untergeordneten Nachrichtenfluss für eine Lastschrift von einem Girokonto zu erstellen.

  1. Erstellen Sie einen neuen Nachrichtenfluss:
    1. Klicken Sie mit der rechten Maustaste auf das vorhandene Nachrichtenbrokerprojekt 'SCANodesSample' und klicken Sie auf Neu > Nachrichtenfluss.
    2. Setzen Sie Nachrichtenflussname auf CurrentAccountDebit und klicken Sie auf Fertigstellen.
  2. Fügen Sie im Nachrichtenflusseditor die in der folgenden Tabelle aufgelisteten Knoten hinzu und benennen Sie diese um.
    Knotentyp Knotenname
    Input Input
    JavaCompute-Knoten RetrieveCurrentAccountBalance
    JavaCompute-Knoten DebitCurrentAccountBalance
    JavaCompute-Knoten UpdateCurrentAccountBalance
    Output Output

  3. Verbinden Sie die Knoten entsprechend den Anweisungen in der nachfolgenden Tabelle miteinander.

    Knotenname Terminal Mit diesem Knoten verbinden
    Input Ausgangsterminal RetrieveCurrentAccountBalance
    RetrieveCurrentAccountBalance Ausgangsterminal DebitCurrentAccountBalance
    DebitCurrentAccountBalance Ausgangsterminal UpdateCurrentAccountBalance
    UpdateCurrentAccountBalance Ausgangsterminal Output
  4. Passen Sie den Knoten 'RetrieveCurrentAccountBalance' an:
    1. Klicken Sie doppelt auf den Knoten 'RetrieveCurrentAccountBalance', überprüfen Sie, ob der Projektname SCANodesSampleJava lautet, und klicken Sie auf Weiter.
    2. Vergewissern Sie sich, dass die Felder Source folders on build path (Quellenordner in Erstellungspfad) und Default output folder (Standardausgabeordner) 'SCANodesSampleJava' enthalten, und klicken Sie auf Weiter.
    3. Setzen Sie Package (Paket) auf sca.broker.sample.currentaccount und klicken Sie auf Weiter.
    4. Wählen Sie die Schablone Nachrichtenklasse ändern aus und klicken Sie auf Fertigstellen.
    5. Klicken Sie mit der rechten Maustaste auf den Knoten 'RetrieveCurrentAccountBalance' und klicken Sie auf Java öffnen.
    6. Fügen Sie folgende Importanweisungen hinzu:
      import java.io.BufferedReader;
      import java.io.File;
      import java.io.FileReader;
      import java.io.IOException;
      		
    7. Fügen Sie folgenden Java-Code hinzu:
      MbMessage locEnv = inAssembly.getLocalEnvironment();
      // create new message
      MbMessage newLocEnv = new MbMessage(locEnv);
      BufferedReader bufferedReader = null;
      try {
        //Read the current account balance from the local file system
        File file = null;
        String OS = System.getProperty("os.name").toLowerCase();
        if (OS.indexOf("windows") > -1) {
            file = new File("C:\\tmp\\CurrentAccount.txt");        	
        } else {
            file = new File("/tmp/CurrentAccount.txt");        	
        }
        //Construct the BufferedReader object
        bufferedReader = new BufferedReader(new FileReader(file));            
        //Put the current account balance in the LE
        MbElement variables = newLocEnv.getRootElement()
        .createElementAsLastChild
        (MbElement.TYPE_NAME, "Variables", null);
        variables.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, 
        "oldBalance", 
        bufferedReader.readLine());           
      } catch (Exception e) {
        throw new MbUserException( 
        CurrentAccount_RetrieveCurrentAccountBalance.class.getName(),
      					"evaluate()",
      					"",
      					"",
      					e.getMessage(),
      					null);
      } finally {
        //Close the BufferedReader
        try {
          if (bufferedReader != null)
            bufferedReader.close();
        } catch (IOException e) {
          throw new MbUserException( 
          CurrentAccount_RetrieveCurrentAccountBalance.class.getName(),
          					"evaluate()",
          					"",
          					"",
          					e.getMessage(),
          					null);
        }
      }
      MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly,
      				newLocEnv, inAssembly.getExceptionList(), 
      				inAssembly.getMessage());
              
    8. Entfernen Sie folgenden Java-Code, da er zu der gerade erstellten Message Broker-Nachrichtenassemblierung (MbMessageAssembly) im Widerspruch steht:
      MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);
         		
  5. Passen Sie den Knoten 'DebitCurrentAccountBalance' an:
    1. Klicken Sie doppelt auf den Knoten 'DebitCurrentAccountBalance', überprüfen Sie, ob der Projektname SCANodesSampleJava lautet, und klicken Sie auf Weiter.
    2. Vergewissern Sie sich, dass die Felder Source folders on build path (Quellenordner in Erstellungspfad) und Default output folder (Standardausgabeordner) 'SCANodesSampleJava' enthalten, und klicken Sie auf Weiter.
    3. Setzen Sie Package (Paket) auf sca.broker.sample.currentaccount und klicken Sie auf Weiter.
    4. Wählen Sie die Schablone Nachrichtenklasse erstellen aus und klicken Sie auf Fertigstellen.
    5. Klicken Sie mit der rechten Maustaste auf den Knoten 'DebitCurrentAccountBalance' und klicken Sie auf Java öffnen.
    6. Fügen Sie folgende Importanweisung hinzu:
      import java.math.BigDecimal;
      		
    7. Fügen Sie folgenden Java-Code hinzu:
      //Go to tree roots
      MbElement inRoot = inMessage.getRootElement();			
      MbElement outRoot = outMessage.getRootElement();	
      MbMessage locEnv = inAssembly.getLocalEnvironment();
      MbMessage newLocEnv = new MbMessage();
      //Get the operation name
      MbElement sca = locEnv.getRootElement().getFirstElementByPath("SCA");
      MbElement input = sca.getFirstElementByPath("Input");
      MbElement operation = input.getFirstElementByPath("Operation");
      String operationName = operation.getValue().toString();			
      //Get the old balance
      MbElement variables = locEnv.getRootElement().getFirstElementByPath("Variables");
      float oldBalance = Float.parseFloat(variables.getFirstElementByPath("oldBalance").getValue().toString());			
      //Get the amount to transfer
      MbElement soap = inRoot.getFirstElementByPath("SOAP");
      MbElement body = soap.getFirstElementByPath("Body");
      MbElement action = body.getLastChild();
      MbElement request = action.getLastChild();
      MbElement amount = request.getFirstElementByPath("amount");
      float transferValue = Float.parseFloat(amount.getValue().toString());	
      //Calculate the difference
      float newBalance = oldBalance - transferValue;
      MbElement newVariables = newLocEnv.getRootElement().createElementAsLastChild(MbElement.TYPE_NAME, "Variables", null);
      //Setup the message reply
      MbElement newXMLNSC = outRoot.createElementAsLastChild
      (MbXMLNSC.PARSER_NAME);
      MbElement newOperation = newXMLNSC.createElementAsLastChild
      (MbElement.TYPE_NAME, 
      operationName + "Response", null);
      newOperation.setNamespace("http://CurrentAccount/");
      MbElement newResponse = newOperation.createElementAsLastChild
      (MbElement.TYPE_NAME, 
      "CurrentAccountResponse", null);
      //If the difference is negative then do not accept the 
      transfer and retain old balance
      if (newBalance < 0) {	                 
      newVariables.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, 
      "newBalance", 
      new BigDecimal(oldBalance).setScale
      (2, java.math.BigDecimal.ROUND_HALF_UP).toString());	              
      newResponse.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, 
      "accept", "no");
      //Otherwise accept the transfer and set new balance in LE
      } else {	              newVariables.createElementAsLastChild
      (MbElement.TYPE_NAME_VALUE, 
      "newBalance", new BigDecimal(newBalance).setScale
      (2, java.math.BigDecimal.ROUND_HALF_UP).toString());	           
       newResponse.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, 
       "accept", "yes");				
      }
      // Create the new assembly with the new property overrides
      MbMessageAssembly outAssembly = new MbMessageAssembly(
      					inAssembly,
      					newLocEnv,
      					inAssembly.getExceptionList(),
      					outMessage);
              
    8. Entfernen Sie folgenden Java-Code, da er zu der gerade erstellten Message Broker-Nachrichtenassemblierung (MbMessageAssembly) im Widerspruch steht:
      MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);
         		
  6. Passen Sie den Knoten 'UpdateCurrentAccountBalance' an:
    1. Klicken Sie doppelt auf den Knoten 'UpdateCurrentAccountBalance', überprüfen Sie, ob der Projektname SCANodesSampleJava lautet, und klicken Sie auf Weiter.
    2. Vergewissern Sie sich, dass die Felder Source folders on build path (Quellenordner in Erstellungspfad) und Default output folder (Standardausgabeordner) 'SCANodesSampleJava' enthalten, und klicken Sie auf Weiter.
    3. Setzen Sie Package (Paket) auf sca.broker.sample.currentaccount und klicken Sie auf Weiter.
    4. Wählen Sie die Schablone Nachrichtenklasse filtern aus und klicken Sie auf Fertigstellen.
    5. Klicken Sie mit der rechten Maustaste auf den Knoten 'UpdateCurrentAccountBalance' und klicken Sie auf Java öffnen.
    6. Fügen Sie folgende Importanweisungen hinzu:
      import java.io.BufferedWriter;
      import java.io.File;
      import java.io.FileWriter;
      import java.io.IOException;
      import java.math.BigDecimal;
      		
    7. Fügen Sie folgenden Java-Code hinzu:
      MbMessage locEnv = assembly.getLocalEnvironment();		
      //Read the new balance from the LE
      MbElement variables = locEnv.getRootElement().getFirstElementByPath("Variables");
      String newBalance = new BigDecimal(variables.getFirstElementByPath
      ("newBalance").getValue().toString()).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
      BufferedWriter bufferedWriter = null;     
      try {
        //Update current account balance on local file system
        File file = null;;
        String OS = System.getProperty("os.name").toLowerCase();
        if (OS.indexOf("windows") > -1) {
            file = new File("C:\\tmp\\CurrentAccount.txt");        	
        } else {
            file = new File("/tmp/CurrentAccount.txt");        	
        }
        //Construct the BufferedWriter object
        bufferedWriter = new BufferedWriter(new FileWriter(file));
        //Start writing new balance to the output stream
        bufferedWriter.write(newBalance);           
      } catch (Exception e) {
        throw new MbUserException( CurrentAccount_UpdateCurrentAccountBalance.class.getName(),
      					"evaluate()",
      					"",
      					"",
      					e.getMessage(),
      					null);
      } finally {
        //Close the BufferedWriter
        try {
          if (bufferedWriter != null) {
            bufferedWriter.flush();
            bufferedWriter.close();
          }
        } catch (IOException e) {
          throw new MbUserException( CurrentAccount_UpdateCurrentAccountBalance.class.getName(),
          					"evaluate()",
          					"",
          					"",
          					e.getMessage(),
          					null);
        }
      }
              

Jetzt können Sie den untergeordneten Nachrichtenfluss für die Habenseite des Girokontos erstellen. Informationen hierzu finden Sie im Abschnitt Untergeordneten Nachrichtenfluss für Habenseite des Girokontos erstellen.

Zurück zur Erweiterung des Mustercodes

Zurück zum Beginn des Mustercodes