Workflow-Bedingungsskripte#
sysman sysadmin
Sie können Zustandsübergängen in Workflows ein Workflow-Bedingungsskript 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 Bedingungsskript damit Einfluss auf die zur Verfügung gestellten Zustände in der Zustandsauswahlliste des Vorgangs beim Editieren. Im zweiten Fall kann das Bedingungsskript 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;
}
}