Ceci est un projet de preuve de concept - Le but est de créer une application qui reçoit des événements à l'échelle du système et qui, en fonction de certaines règles métier, appelle un flux de travail spécifique.DynamicActivity - Comment appeler un workflow stocké dans la base de données?
Les flux de travail sont créés séparément et la source xaml est stockée dans une base de données.
Voici le code qui permet d'invoquer le flux de travail:
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 }});
}
}
Nous avons créé très simple flux de travail qui fonctionne sans problème sur lui-même. Mais quand XAML est chargé à l'aide XamlService.Parse il lancer une exception près:
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'.
Toute idée de ce qui est faux? Merci.
Merci, exactement ce que je faisais. J'ai posté la réponse ci-dessous –