Trace:
Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
workflow:custom_function [2019/03/14 09:03] admin |
— (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ~~NOTRANS~~ | ||
| - | ~~Title: Custom function~~ | ||
| - | 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: | ||
| - | |||
| - | <file java IFunction.java> | ||
| - | public interface IFunction | ||
| - | { | ||
| - | /** | ||
| - | * Gets the current workflow step. | ||
| - | * | ||
| - | * @return the current workflow step. | ||
| - | */ | ||
| - | public IWorkflowStep getWorkflowStep(); | ||
| - | |||
| - | /** | ||
| - | * Initializes the function. | ||
| - | * | ||
| - | * @param pStep the current workflow step | ||
| - | */ | ||
| - | public void init(IWorkflowStep pStep); | ||
| - | |||
| - | /** | ||
| - | * Runs the function. | ||
| - | * If the function returns <code>true</code>, 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 <code>true</code> or <code>false</code> is returned. | ||
| - | * | ||
| - | * @return <code>true</code>, 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; | ||
| - | |||
| - | } | ||
| - | </file> | ||
| - | 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: | ||
| - | |||
| - | <file java 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("SMTP config not found (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; | ||
| - | } | ||
| - | |||
| - | } | ||
| - | </file> | ||
| - | |||
| - | The implementation is straight forward. It extends the AbstractFunction and implements run method. The email settings will be read from the [[jvx:common:setup:zones|application configuration]] and the email settings will be read from the input parameters. Finally, the email will be sent. | ||
| - | |||
| - | But there's still one open question: How do we define the input parameters? | ||
| - | |||
| - | Simply use the Functions screen and enter all required information: | ||
| - | |||
| - | {{:workflow:wf_emailfunction.png?nolink|}} | ||
| - | |||
| - | That's it. Start using your new function. | ||
