Trace:
This is an old revision of the document!
A function is the code block behind a task. It's very simple to create a new function because a function is defined as simple Java interface:
- IFunction.java
public interface IFunction { /** * The current workflow step. * @return The current workflow step. */ public IWorkflowStep getWorkflowStep(); /** * Initializes the function. * * @param pWorkflow the current workflow step */ public void init(IWorkflowStep pWorkflow); /** * Runs the function. * If the function returns true, the function is fully done, and the workflow jumps to the next step. * In case there are more then one next steps, the finish function of IWorkflowStep has to be called. * An exception will be thrown otherwise. * If finish is already called, it does not matter whether true or false is returned. * * @return true, if the function is done. * @throws Throwable if function fails. */ public boolean run() throws Throwable; /** * Notifies, that the workflow is cancelled. * * @throws Throwable if canceling fails. */ public void cancel() throws Throwable; }
The interface already has an abstract implementation and so it's really super simple to create a new function. Our example will send an email, so it't the EmailFunction:
- EmailFunction.java
public class EmailFunction extends AbstractFunction { @Override public boolean run() throws Throwable { XmlNode smtp = getApplicationZone().getConfig().getNode("/application/mail/smtp"); if (smtp == null) { throw new IllegalArgumentException("The SMTP server configuration was not found in the application zone (path /application/mail/smtp)!"); } String host = smtp.getNodeValue("host"); String port = smtp.getNodeValue("port"); String username = smtp.getNodeValue("username"); String password = smtp.getNodeValue("password"); boolean tlsEnabled = Boolean.parseBoolean(smtp.getNodeValue("tlsenabled")); String defaultsender = smtp.getNodeValue("defaultsender"); String from = getNotNullEvaluatedParameter("From"); String to = getNotNullEvaluatedParameter("To"); String cC = getEvaluatedParameter("CC"); String bCC = getEvaluatedParameter("BCC"); String subject = getNotNullEvaluatedParameter("Subject"); String body = getEvaluatedParameter("Body"); log("Mailserver: " + host + ":" + port + "/" + username); Mail mail = new Mail(host, port, username, password); mail.setTLSEnabled(tlsEnabled); mail.send(CommonUtil.nvl(from, defaultsender), to, cC, bCC, subject, body, null, null); log("From: " + CommonUtil.nvl(from, defaultsender)); log("To: " + to); log("Subject: " + subject); return true; } }