Link

Transaction Extension Templates

Working with the Transaction Extensions in XtendM3

Table of contents

  1. Description
    1. Example Transaction extension template
  2. Important notes
  3. See also

Description

Documentation cointains templates for various Transaction extensions.
Templates can be as modified as needed.

Example Transaction extension template

This is a Transaction extension template with a structure that can be used for creating a new extension using container contruction and setting parameters.

/****************************************************************************************
Extension Name: EXT000MI/TransactionTemplate
Type: Transaction
Date: 2022-02-22
Description: Example XtendM3 Transaction

Revision History:
Name                  Date              Version              Description of Change
Filip Hakansson       2022-02-22        1.0                  First version
******************************************************************************************/

public class TransactionTemplate extends ExtendM3Transaction {
  private final MIAPI mi;
  private final LoggerAPI logger;
  private final DatabaseAPI database;
  private final MICallerAPI miCaller;

  public TransactionTemplate(MIAPI mi, LoggerAPI logger, DatabaseAPI database, MICallerAPI miCaller) {
    this.mi = mi;
    this.logger = logger;
    this.database = database;
    this.miCaller = miCaller;
  }

  public void main() {

    Closure<?> callback = { Map <String, String> out ->
      logger.debug("Start of MWS420MI callback function");
      if (out.error != null) {
        mi.error(out.errorMessage);
        logger.debug("Call returned error: " + out.)
        return;
      }

      /* Setting up out data in transaction using MI API
      Remove .trim on input fields as this causes errors if fields are null
      */
      mi.outData.put("OUT1", out.get("OUT1").trim());
      mi.outData.put("OUT2", out.get("OUT2").trim());
      mi.outData.put("OUT3", out.get("OUT3").trim());
      mi.outData.put("OUT4", out.get("OUT4").trim());
      mi.outData.put("OUT5", out.get("OUT5").trim());

      //Setting container parameters
      String out6 = "";
      String out7 = "";
      if (out.get("OUT3").toInteger() == 3) {
        DBAction query = database.table("CONT01")
          .index("00")
          .selection("OQOUT1","OQOUT2","OQOUT3","OQOUT4").build();
        DBContainer CONT01 = query.getContainer();
        CONT01.set("OQOUT1", out.get("OUT1").trim().toInteger());
        CONT01.set("OQOUT2", 1);
        CONT01.set("OQOUT3", out.get("OUT3").trim().toInteger());
      }
      mi.outData.put("OUT6", out6);
      mi.outData.put("OUT7", out7);
      mi.write();
    }

    // Transaction In Data parametrers
    Map<String, String> params = [ "OUT2": mi.inData.get("OUT2"),
                   "IND1": mi.inData.get("PAR1"),
                   "IND2": mi.inData.get("PAR2"),
                   "IND3": mi.inData.get("PAR3"),
                   "IND4": mi.inData.get("PAR4"),
                   "IND5": mi.inData.get("PAR5"),
    ];
    miCaller.call("MWS420MI", "TransactionTemplate", params, callback);
  }
}

Important notes

  • It is a good practice to use a test compilation of the program just to check if everything is working properly.
  • Data presented in the examples is random.
  • Remember to check the name of created extension while using ready templates/examples.

See also