Workflow-Bedingungs-Skripte

Sie können Zustandsübergängen in Workflows ein Workflow-Bedingungs-Skript zuweisen. Dieses Skript wird ausgeführt

  • beim Laden eines Vorgangs zum Editieren

  • beim Abspeichern mit dem Zustandsübergang, dem das Skript zugeordnet ist

Im ersten Fall hat das Bedingungs-Skript damit Einfluss auf die zur Verfügung gestellten Zustände in der Zustandsauswahlliste des Vorgangs beim Editieren. Im zweiten Fall kann das Bedingungs-Skript den gewünschten Zustandsübergang blockieren.

Ein Bedingungs-Skript kann beliebige Prüfungen durchführen und gibt entweder “true” oder “false” zurück.

Beispiele

Das folgende Skript wird im Workflow zwischen den Übergang vom Initial-Zustand (schwarzer Kreis) in den ersten regulären Zustand gehängt und verhindert, dass automatisch erstellte E-Mails wie Abwesenheitsnachrichten zum Erstellen eines Vorgangs im System führen.

import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import com.aurel.track.admin.customize.scripting.BINDING_PARAMS;
import com.aurel.track.admin.customize.scripting.GroovyScriptExecuter;
import com.aurel.track.util.emailHandling.EmailCleanUtils;

public class EmailGuardScript {
    private static String PARAMETER_SCRIPT_NAME = "EmailGuardParams";
    private static String PARAMETER_SCRIPT_METHOD = "getRejectPatterns";

    public Map<String, Object> handleEvent(Map<String, Object> inputBinding) {
        String subject = (String)inputBinding.get(BINDING_PARAMS.EMAIL_SUBJECT);
        if (subject!=null) {
            List<Pattern> rejectPatterns =
                    (List<Pattern>)GroovyScriptExecuter
                    .getParameterInstanceGroovyHandler(
                    PARAMETER_SCRIPT_NAME, PARAMETER_SCRIPT_METHOD);
            boolean patternFound = EmailCleanUtils.patternFound(subject,
                    rejectPatterns);
            inputBinding.put(BINDING_PARAMS.GUARD_PASSED, !patternFound);
        }
        return inputBinding;
    }
}

Das folgende zum obigen Skript gehörende Parameter-Skript zeigt, wie Sie Logik und Konfiguration voneinander trennen können:

import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
import com.aurel.track.util.emailHandling.EmailCleanUtils;

public class EmailGuardParams {
    private EmailGuardParams() {
        List<String> rejectStrings = new LinkedList<String>();
        /******************Reject subject strings************************/
        // the regEx which if found in email subject no item/comment will
        // be added
        rejectStrings.add("Undelivered Mail Returned to Sender");
        rejectStrings.add("au�er Haus");
        rejectStrings.add("out of.*?house");
        rejectStrings.add("out of.*?office");
        rejectStrings.add("be out of the office");
        /***********Do not modify after this line **********************/
        rejectPatterns =  EmailCleanUtils.compilePatterns(rejectStrings);
    }
    private static EmailGuardParams instance = null;
    private static List<Pattern> rejectPatterns;
    public static EmailGuardParams getInstance() {
        if (instance==null) {
            instance = new EmailGuardParams();
        }
        return instance;
    }
    public static List<Pattern> getRejectPatterns() {
        return rejectPatterns;
    }
}