工作流基础 - 多个书签

时间:2014-11-06 15:33:45

标签: workflow-foundation

我们将状态机实现为Windows工作流程。这个想法应该是直截了当的:

  1. 加载工作流程
  2. 预制件活动
  3. 停止(等待用户开始下一步)
  4. 我们的团队正在学习世界自然基金会。我们发现可以创建书签以暂停和卸载工作流程。然后可以通过ID加载工作流并恢复书签来恢复工作流程。

    //start
    var workflow = new WorkflowApplication(new MyWorkflow(), identity);
    workflow.Run();
    //run step 1, create bookmark in transition 1
    
    //.....
    //resume
    var workflow = new WorkflowApplication(new MyWorkflow(), identity);
    workflow.Load(id);
    workflow.ResumeBookmark("step 2", obj);
    //run step 2. finish
    

    这部分有效。但现在我们要介绍第三步。转换2应该创建一个新书签,然后恢复工作流程以运行步骤3.

    //run step 3
    var workflow = new WorkflowApplication(new MyWorkflow(), identity);
    workflow.Load(id);
    workflow.ResumeBookmark("step 3", obj);
    //run step 3. finish
    

    但是这没有按预期工作。已加载工作流程,但恢复step 3书签不会执行第3步活动。似乎工作流程只能处理1个书签,或者在使用step 2恢复后,不会清除/删除转换1中的第一个书签。

    我搜索了互联网,但我还没有找到有关此主题的足够信息。有很多在工作流程中使用单个书签的示例。但是工作流程中的多个书签都没有。

2 个答案:

答案 0 :(得分:2)

我已经在WWF 4.5中使用StateMachine类型和大量书签而没有任何问题。我们的团队已经实施了帮助台类型的应用程序,因此书签被放置在Transitions的Action活动中。当工作流进入State时,将触发State的所有转换的所有Action活动并创建书签。恢复其中一个书签将清除所有其他博彩公司并将StateMachine移至另一个州,因此可以创建新的过渡和书签。

答案 1 :(得分:0)

好的,我找到了这个,并为我工作。 MSDN

假设您在所有书签创建中覆盖 CanInduceIdle ,您只需要在空闲时保留工作流程。在您的恢复代码中添加以下内容。

     application.PersistableIdle = e => PersistableIdleAction.Persist;
     application.PersistableIdle = e => PersistableIdleAction.Unload;