您的位置:首页 > 其它

基于WF4.0流程平台开发过程中的知识积累(二)多书签会签

2014-04-25 20:52 295 查看
        在WF4.0的自定义活动支持创建多个书签,通过多书签方式,我们可以实现会签审批的效果。

首先这里介绍一下会签与普通审批节点的区别:

        普通审批节点是抢占式的,即一个任务同时到达审批人一和审批人二那里,只要其中有一个人进行了审批操作,该审批节点就通过了。

        对应会签审批,不分先后,只有当所有人员都需签署了意见,该审批节点才会通过。

       下面我们将列创建一个工程,以模拟实现简单的会签功能,首先先创建一个名为BooklMark2的WF控制台工程。在工程内创建一个会签自定义流程节点,命名为ApproveNode,其代码如下:

public sealed class ApproveNode : NativeActivity
{
// 定义一个字符串类型的活动输入参数
public InArgument<string> Text { get; set; }
/// <summary>
/// 重写这个方法,以便返回true值,true用来控制工作流闲置,可以挂起
/// 默认的情况为false,表示工作流不会挂起执行,因此用户无法和工作流之间进///行交互
/// </summary>
protected override bool CanInduceIdle
{
get
{ return true; }
}
// 如果活动返回值,则从 CodeActivity<TResult>
// 派生并从 Execute 方法返回该值。
protected override void Execute(NativeActivityContext context)
{
// 获取 Text 输入参数的运行时值
string text = context.GetValue(this.Text);
//创建书签
context.CreateBookmark("审批人一", new BookmarkCallback(Continue));
context.CreateBookmark("审批人二", new BookmarkCallback(Continue));
context.CreateBookmark("审批人三", new BookmarkCallback(Continue));
}
//书签恢复后调用的函数
void Continue(NativeActivityContext context, Bookmark bookmark, object obj)
{

}
}


大部分代码与上一篇的例子是一样的,只是这里我们一共创建了三个书签,分别命名为审批人一,审批人二,审批人三,这三个书签都已Continue作为回调函数。只有所有三个书签都被恢复,才能结束流程位于该节点的中断。

下图是案例的流程图:



为了更加直观地对流程进行操作,我们在工程在添加一个窗体来控制流程,命名为Form1。

同时将主函数的代码更改如下:

class Program
{
public static WorkflowApplication wa;
static void Main(string[] args)
{
wa = new WorkflowApplication(new Workflow1());
wa.Run();
Form1 form = new Form1();
form.ShowDialog();

}
}


上面创建了一个全局的WorkflowApplication,这样可以在其他地方,比如在窗体中操作WorkflowApplication,实现流程运行。主函数先发起流程,然后加载一个窗体。

窗体如下所示:



针对三个按钮,我们编写三个对应的按键响应函数,代码如下:

private void button1_Click(object sender, EventArgs e)
{
Program.wa.ResumeBookmark("审批人一", null);
}

private void button2_Click(object sender, EventArgs e)
{
Program.wa.ResumeBookmark("审批人二", null);
}

private void button3_Click(object sender, EventArgs e)
{
Program.wa.ResumeBookmark("审批人三", null);
}


可以看出,针对不同按钮,执行了释放不同的书签的操作。

运行程序,一开始流程处于待审批状态,如下图:



之后,在对话窗体中依次点击所有的按钮,模拟会签人依次审批的过程。只有所有按钮都被点击完毕后,流程才会进入下一状态,如下图:



 

代码下载

 

下一篇,我将继续介绍书签的应用,如何利用书签来实现WF的子流程效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息