2 Stimmen

DynamicActivity - Wie kann ein in der Datenbank gespeicherter Workflow aufgerufen werden?

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X