none
动态改变工作流时的问题 RRS feed

  • 问题

  • 程序采用 顺序工作流库+WPF的形式
    在工作库中 有一个 SequenceActivityContainer 其中包含3个 CodeActivity。这些都是在设计器中拖拽编辑生成的。类名叫做MyWorkFlow
    在MyWorkFlow类中添加了一个属性 public String ResultString { get; set; },并用Dictionary<string,object>方式预先传入一个字符串"aaa"

    3个 CodeActivity对应的 ExecuteCode 依次为执行 ResultString +="1" ResultString +="2" ResultString +="3"
    最终输出ResultString

    不改变工作流,普通调用时,得到的结果是"aaa123"

    接下来,想在WPF中拖拽代表3个CodeActivity的图形,并且根据图形相对位置,决定他们的执行顺序。

    在相对位置取到之后,进行了如下代码的更改


    MyWorkFlowInArgs args = new MyWorkFlowInArgs("aaa");//传参数用的,忽略
    WorkflowRuntime wfRuntime = new WorkflowRuntime();
    WorkflowInstance myWorkflow = wfRuntime.CreateWorkflow(typeof(MyWorkFlow), args);

    WorkflowChanges wc = new WorkflowChanges(myWorkflow.GetWorkflowDefinition());
    CompositeActivity sequenceContainer = wc.TransientWorkflow.GetActivityByName("SequenceActivityContainer") as CompositeActivity;

    然后将SequenceActivityContainer内的3个Code活动,以他们的Name为键存入了一个Hashtable
    之后 sequenceContainer.Activities.Clear();
    然后在根据这三个活动新的顺序再装回SequenceActivityContainer中sequenceContainer.Activities.Add(...);
    最后
    myWorkflow.ApplyWorkflowChanges(wc);
    myWorkflow.Start();

    这时候再运行程序,我只得到了"aaa"这个结果

    于是,向3个Code活动对应的方法中加入MessageBox弹出当前的ResultString
    结果的得到的显示是 "1"   "2"  "3"  "aaa"
    好像是3个活动各行其是了

    请教,有没有解决的办法,是不是我遗漏了什么。谢谢!

    2009年10月13日 3:42

全部回复

  • 你好,

    工作流中的属性传递和绑定,需要将属性定义为依赖属性,并做绑定,而不是简单赋值。

    从问题现象来看,应用工作流更改之后,子活动CodeActivity并没有引用到正确的ResultString,所以它修改的并不是父活动的ResultString。

    你可以从这个角度入手检查一下。


    My blog: http://coding.windstyle.cn

    2012年7月6日 15:16
    版主