从运行工作流中获取参数

时间:2012-01-18 14:44:54

标签: .net asp.net-mvc c#-4.0 workflow-foundation-4

我一直在关注endpoint.tv上的WF向导示例,这里: http://stevenalexander.posterous.com/integrating-a-persisted-wf40-workflow-with-mv

我希望能够使用WF来驱动向导,但也可以充当不完整向导的临时存储。这意味着对于向导的每个步骤,我都不会持久保存数据,直到工作流程结束时,所有数据都已输入。

我有一个基本的例子,基于上面的链接工作:

  1. 创建并保留新工作流程
  2. //用户然后导航到第一个向导步骤//
  3. 恢复WF,将模型传递给BookMarkCallback
  4. 更新了WF全球模型集合。
  5. 如果用户选择了下一步,WF会转到下一步。
  6. 然而,问题在于虽然WF正在保存数据,但我看不到中途检索数据的方法。即如果用户重新加载步骤1,我不知道如何将该持久模型返回给用户。

    有什么建议吗?

1 个答案:

答案 0 :(得分:2)

好吧..给其他人..

我通过使用自己的“通知”扩展程序来解决这个问题,该扩展程序具有Notification事件处理程序:

public class HostEventNotifier : IHostNotification
{
    public event EventHandler<HostNotifyEventArgs> Notification;

    public void Notify(object model)
    {
        if(Notification != null)
        {
            Notification(this, new HostNotifyEventArgs(model));

        }
    }
}

扩展程序已添加到WF应用程序中,可以在我的向导事件步骤中调用:

 var ext = context.GetExtension<IHostNotification>();
        var parentModel = context.GetValue(ParentModel);
        if(ext!=null && parentModel !=null)
        {
            if(parentModel.ContainsKey(bookmarkName))
            {
                ext.Notify(parentModel[bookmarkName]);
                Thread.Sleep(500);
            }

        }

最终,扩展事件处理程序设置为一个知道如何处理数据的方法。

这仍然是不完整的 - 我还没有找到线程模型(因此是uglt Thread.Sleep),但我想给其他人看一个答案。

这个想法来自“Pro WF 4 / Bukovics”,apress