Documentation

Trace:

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
workflow:custom_function [2020/03/04 09:41]
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's 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. 
This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information