In diesem HowTo erfahren Sie, welche Bedingungen für die Umsetzung eines eigenen Plugins nötig sind. Nachfolgend können Sie die Umsetzung anhand eines Anwendungsfalls nachvollziehen, in dem Attachments einer Nachricht selektiert werden, die einem regulären Ausdruck entsprechen.
Erstellen Sie hierfür zuerst ein neues Projekt in Visual Studio mit den Einstellungen:
Sie finden das komplette Projekt in Ihrem StandardTemplates-Unterverzeichnis von eBiss, unter: \StandardTemplates\PluginSample\eBiss.Plugin.Sample
Erstellen wir also zuerst unseren Jobstep mit dem Namen MessageSelector. Hierfür erbt unsere erstellte Klasse von einer abstrakten Klasse ClientJobStepBase und implementiert die Run() Methode. Des Weiteren wird der Filterausdruck deklariert und das Property „FileNameFilter“ mit dem Attribut [Browsable(true)] erzeugt. Das Attribut sorgt dafür, dass es der Anwender auf der Oberfläche sieht. Ebenso wird dem Jobstep ein Event zugeteilt, welches OnMessageSelection und vom Typ MessagesSelected ist.
/// <summary> /// Selects messages containing only one attachment with filename dummy.txt /// </summary> public class MessageSelector : ClientJobStepBase { public event MessagesSelected OnMessageSelection; private string _attachmentName = "^dummy\\.txt$"; [Browsable(true)] public string FileNameFilter { get { return _attachmentName; } set { _attachmentName = value; } } [...]
Abb. 1: Jobstep Eigenschaften mit Browsable Property FileNameFilter und Event OnMessageSelection
Anschließend wird die Run Methode ausprogrammiert und in unserem Fall ausreichend mit Hilfe des LogContext geloggt. Effektiv wird über eine Liste von Nachrichten iteriert und genau ein Attachment herausgesucht, welches dem übergebenen regulären Ausdruck entspricht. Dieses wird anschließend dem Event OnMessageSelection übergeben und kann in unserem Fall an einen weiteren Job delegiert und behandelt werden.
public override JobStepResult Run() { JobStepResult rc = JobStepResult.Ok; LogContext.Log(LogMsgType.Progress, "Select messages containing only one attachment that matches regular expression: " + FileNameFilter ?? "<NULL>"); if (OnMessageSelection == null) { LogContext.Warning("OnMessageSelection is not connected to a target job step!"); } else { System.Text.RegularExpressions.Regex regExp = new System.Text.RegularExpressions.Regex(FileNameFilter); List<IMessage> selectedMessages = new List<IMessage>(); foreach (IMessage msg in Job.InputMessages) { if (msg.Attachments.Count == 1 && regExp.IsMatch(msg.Attachments[0].Filename)) { selectedMessages.Add(msg); } } if (selectedMessages.Count == 0) { LogContext.Log(LogMsgType.Progress, "No message selected."); } else { LogContext.Log(LogMsgType.Progress, $"{selectedMessages.Count} message(s) selected."); Job.Delegate(OnMessageSelection, new MessageSelectionArgs(selectedMessages)); } } LogContext.Debug("Exit with: " + rc.ToString()); return rc; }
Erstellen Sie anschließend Ihr Projekt und kopieren die .dll in das eBiss Plugin-Unterverzeichnis. Sobald Sie den Dienst neugestartet haben, finden Sie Ihre Jobsteps im Workflow-Editor.
Abb. 2: Jobstep im Workflow-Editor