【问题标题】:DynamicActivity - How to invoke a workflow that stored in Database?DynamicActivity - 如何调用存储在数据库中的工作流?
【发布时间】:2010-06-25 13:13:57
【问题描述】:

这是概念验证项目 - 目标是创建一个应用程序,该应用程序接收一些系统范围的事件并根据一些业务规则调用特定的工作流。

工作流单独创建,xaml 源存储在数据库中。

以下是用于调用工作流的代码:

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 }});                   


        }

    }

我们创建了非常简单的工作流程,可以自行运行而不会出现问题。但是当使用 XamlService.Parse 加载 xaml 时,它会引发以下异常:

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'.

知道有什么问题吗? 谢谢。

【问题讨论】:

    标签: c# xaml visual-studio-2010 workflow-foundation-4


    【解决方案1】:

    不确定是什么导致了您的问题,我过去使用 XamlServices.Load() 没有任何问题,但在运行时加载工作流 XAML 的最简单方法是使用 ActivityXamlServices.Load()。示例见here

    【讨论】:

    • 谢谢,这正是我所做的。我已经在下面发布了答案
    【解决方案2】:

    好的,我已经通过使用 ActivityXamlServices 解决了这个问题

    所以而不是这一行:

    object o = XamlServices.Parse(wf.WorkflowDefinition.Expression);
    

    我正在使用以下 sn-p:

    var mStream = new memoryStream(
        ASCIIEncoding.Default.GetBytes(wf.WorkflowDefinition.Expression));
    
    object o = ActivityXamlServices.Load(mStream);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 2014-07-02
      • 2020-12-13
      • 2020-01-18
      • 1970-01-01
      相关资源
      最近更新 更多