Dies ist ein Proof-of-Concept-Projekt - Das Ziel ist es, eine Anwendung zu erstellen, die einige systemweite Ereignisse empfängt und auf der Grundlage einiger Geschäftsregeln einen bestimmten Workflow aufruft.
Die Workflows werden separat erstellt und die xaml-Quelle wird in einer Datenbank gespeichert.
Nachfolgend finden Sie den Code, der zum Aufrufen des Workflows verwendet wird:
public void RaiseEvent(IEvent e, IEventData eventData)
{
var typeName = e.GetType().FullName;
// Query Db for all workflows for the event
var repo = new WorkflowRepository();
var workflows = repo.GetActiveWorkflowsByEvent(typeName);
foreach (var wf in workflows)
{
var condition =
ConditionEvaluator.PrepareCondition(wf.Condition.Expression, eventData);
var okToStart = ConditionEvaluator.Evaluate(condition);
if (okToStart)
{
// Next line is throwing an exeption
object o = XamlServices.Parse(wf.WorkflowDefinition.Expression);
DynamicActivity da = o as DynamicActivity;
WorkflowInvoker.Invoke(da,
new Dictionary<string, object>
{{ "EventData", eventData }});
}
}
Wir haben einen sehr einfachen Workflow erstellt, der ohne Probleme von selbst läuft. Aber wenn xaml mit XamlService.Parse geladen wird, wird die folgende Ausnahme ausgelöst:
System.Xaml.XamlObjectWriterException was unhandled
Message='No matching constructor found on type 'System.Activities.Activity'.
You can use the Arguments or FactoryMethod directives to construct this type.'
Line number '1' and line position '30'.
Haben Sie eine Idee, was los ist? Ich danke Ihnen.