2014-11-06 61 views
1

我们有一个作为Windows工作流实现的状态机。这个想法应该是直截了当:工作流基础 - 多个书签

  1. 负荷工作流程
  2. 预制棒活动
  3. 停止(等待用户来启动下一步)

我们的团队正在学习世界自然基金会,因为我们去。我们发现可以创建一个书签来暂停和卸载工作流程。然后可以通过按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个书签,或者转换1中的第一个书签在用step 2恢复后不会被清除/删除。

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

+0

您是否找到解决方案?我也面临完全相同的问题 – 2016-04-11 20:22:55

回答

2

我在WWF 4.5中使用了StateMachine类型和很多书签,没有任何问题。我们的团队实施了帮助台类型的应用程序,因此书签被放置在Transitions的Action活动中。当工作流程进入状态时,触发所有来自状态的转换的所有操作活动并创建书签。恢复其中一个书签将清除所有其他书签并将StateMachine移动到另一个州,因此可以创建新的Transitions和书签。

0

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

假设你要重写CanInduceIdle在你的所有书签的作品,你只需要坚持在空闲的工作流。在您的恢复代码中添加以下内容。

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