none
多人审批请教 RRS feed

  • 问题

  • 一个人,会有5个人按顺序进行审批。第一个人完成了,第二个人就开始。我有一个非常不解的问题,启动这个工作流的时候,应该是由发起者发起的(实例化工作流),那么第一个人开始审批的时候如何得到这个实例呢?WorkflowApplication.Load 方法 (Guid),通过这个方法?如果是通过这个方法,那么开始对这个工作流实例设置的InvokeCompleted这些委托还会存在吗?谢谢。

    审批的时候如何获得到下一个节点的审批人呢?
    2011年4月13日 9:33

答案

全部回复

  • 你好,

    第一个人初始化工作流的时候用 Run() 方法。然后因为要等待审批,这个时候工作流应该已经 Persist 到 Persistence Store 里,并且从内存里Unload 了。当审批人审批的时候,系统根据工作流Id 号,唤醒工作流,读取相关属性,执行相关操作,完成后Persist ,Unload. 等待下一个审批者,直到工作流结束。

    ->"那么开始对这个工作流实例设置的InvokeCompleted这些委托还会存在吗?谢谢。"
    我们可以在Completed 委托里写代码来处理 工作流成功结束后的操作,比如删除某些没用的数据之类的:

                wfApp.Completed = (e) =>{
                    
                };

    MSDN Community Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    This posting is provided "AS IS" with no warranties, and confers no rights. My Blog: http://xhinker.com
    Microsoft Windows Workflow Foundation 4.0 Cookbook
    2011年4月14日 7:59
    版主
  • 您好,非常感谢您的回答。还有个问题我想请教下:代码如下:

     instance.Idle = workflowIdel;
    
    void workflowIdel(WorkflowApplicationIdleEventArgs e)
     {      
          
          System.Console.WriteLine("Idle:{0}", e.InstanceId);
     }
    

     在用bookmark做审批流的时候,我可以通过上面代码中的e.bookmarks得到下一个审批岗位信息,我可以在此处把instrances.id,通过bookmarks中的岗位和发起流程者的ID,得到审批者的ID,自编号得,然后将这些信息存储至XML。然后通过这个信息,和程序结合起来,让用户查询当前还未办理的工作流。当他通过instrances.id加载完工作流,审批时,我可以通过设置bookmark(YES  NO),而让工作流继续,此时在

     if (instance.GetBookmarks().Count(p => p.BookmarkName == bookName) == 1)
     {
              instance.ResumeBookmark(bookName, inputValue);
     }
    

    中更新在上一段插入的XML,增加成功与否,意见等等。不知道这样做对不对,你们还有更好的办法吗,请指教。谢谢。

    我在workflowIdel中增加XML的处理节点,是为了让用户能够查询到自己还有未处理的工作流,

    2011年4月14日 12:46
  • 这样做也是一个办法,不过也可以这么做:
    在工作流persist 之前用一个Email alert 发一封邮件给下一个审批者,同时用 PersistenceParticipant 在服务端也就是工作流服务器端机记录下这个事情。
    这时客户通过邮件就可以知道下一个该做的事情。同时在服务端我们可以通过查询PersistenceParticipant 记录下来的信息来查看工作流停在谁手里了。


    MSDN Community Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    This posting is provided "AS IS" with no warranties, and confers no rights. My Blog: http://xhinker.com
    Microsoft Windows Workflow Foundation 4.0 Cookbook
    2011年4月15日 1:41
    版主
  • 恩,谢谢您的回答。刚接触这个,您所写上面的这段话中“在工作流persist 之前用一个Email alert 发一封邮件给下一个审批者”中,如何在“persist 之前”获得到下一个审批者呢。应该会有几种方式吧?我现在只能通过上面的那种方式获取到,期待您的指导。
    2011年4月15日 3:18
  • ->"如何在“persist 之前”获得到下一个审批者呢"
    举个例子:
          SendEmail (发送邮件给指定审批人)
                 |
             Receive(等待审批人的回应,因为Receive 活动本身是一个Bookmark活动,在收到回复之前,工作流会自动persist)


    MSDN Community Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    This posting is provided "AS IS" with no warranties, and confers no rights. My Blog: http://xhinker.com
    Microsoft Windows Workflow Foundation 4.0 Cookbook
    2011年4月15日 3:34
    版主
  • 非常感谢您的回答,遇到问题再来求教。

    • 已标记为答案 my WCF 2011年4月15日 5:20
    2011年4月15日 5:20