Utilice las instrucciones siguientes para crear el subflujo de mensajes de débito de cuentas corrientes.
Tipo de nodo | Nombre de nodo |
---|---|
Input | Input |
JavaCompute | RetrieveCurrentAccountBalance |
JavaCompute | DebitCurrentAccountBalance |
JavaCompute | UpdateCurrentAccountBalance |
Output | Output |
Nombre de nodo | Terminal | Conectar a este nodo |
---|---|---|
Input | Out | RetrieveCurrentAccountBalance |
RetrieveCurrentAccountBalance | Out | DebitCurrentAccountBalance |
DebitCurrentAccountBalance | Out | UpdateCurrentAccountBalance |
UpdateCurrentAccountBalance | Out | Output |
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException;
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());
MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);
import java.math.BigDecimal;
//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);
MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.math.BigDecimal;
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); } }
Ahora puede crear el subflujo de mensajes de crédito de cuentas corrientes, consulte Crear el subflujo de mensajes de crédito de cuentas corrientes.