工作流帮助类:

 //让工作流继续沿着书签的位置向下执行
value是向书签传递参数
wfc.ResumeBookmark(bookmarkName,value);

//把传过来的数据value作为输出参数outResult的值 传到书签外面其实执行这个函数  
private void MyCallback(NativeActivityContext context, Bookmark bookmark, object value)
{

}


namespace EazyBPMS.WorkFlow
{
public class WorkFlowApplicationHelper
{
//创建工作流
public static WorkflowApplication CreateWorkflowApp(Activity activity,string instanceId, Dictionary<string, object> dictionary)
{
//每次点击的时候都会创建新的工作流实例
WorkflowApplication wfc = new WorkflowApplication(activity, dictionary);
//WorkflowInvoker.Invoke(new DemoActivity());
wfc.Idle += a =>//监控,当工作流停下来的时候执行
{
Console.WriteLine("工作流停下来了....");
};
//当工作流停顿下来了,进行什么操作,如果返回的是unload 就卸载当前工作流实例 持久化到数据库中
wfc.PersistableIdle = delegate (WorkflowApplicationIdleEventArgs e2)
{
Console.WriteLine("工作流被卸载了,进行持久化");
return PersistableIdleAction.Unload;
};
//监听卸载事件
wfc.Unloaded += a =>
{
Console.WriteLine("工作流被卸载了");
};
//当出现了未处理的异常的时候
wfc.OnUnhandledException += a =>
{
return UnhandledExceptionAction.Terminate;//当出现异常的时候直接结束工作流 };
wfc.Aborted += a =>
{
Console.WriteLine("工作流终止了");
};
//创建一个保存工作流实例的sqlstore对象
SqlWorkflowInstanceStore store =
new SqlWorkflowInstanceStore(DbHelperSQL.connectionString); //当前工作实例持久化的时候保存到数据库中
wfc.InstanceStore = store;
// wfApp.Id;//工作流实例id需要将此实例id保存到实例数据库中
EazyBPMS.BLL.eazy_wf_instance bll = new BLL.eazy_wf_instance();
EazyBPMS.Model.eazy_wf_instance model = bll.GetModel(Convert.ToInt32(instanceId));
model.WFApplicationId = wfc.Id;
bll.Update(model);
wfc.Run();
return wfc;
} //继续往下执行工作流
public static WorkflowApplication ResumeBookMark(Activity activity,Guid InstanceId,string bookmarkName, BaseResumeBookMarkValue value)
{
//每次点击的时候都会创建新的工作流实例
WorkflowApplication wfc = new WorkflowApplication(activity);
//WorkflowInvoker.Invoke(new DemoActivity());
wfc.Idle += a =>//监控,当工作流停下来的时候执行
{
Console.WriteLine("工作流停下来了....");
};
//当工作流停顿下来了,进行什么操作,如果返回的是unload 就卸载当前工作流实例 持久化到数据库中
wfc.PersistableIdle = delegate (WorkflowApplicationIdleEventArgs e3)
{
Console.WriteLine("工作流被卸载了,进行持久化");
return PersistableIdleAction.Unload;
};
//监听卸载事件
wfc.Unloaded += a =>
{
Console.WriteLine("工作流被卸载了");
};
//当出现了未处理的异常的时候
wfc.OnUnhandledException += a =>
{
return UnhandledExceptionAction.Terminate;//当出现异常的时候直接结束工作流 };
wfc.Aborted += a =>
{
Console.WriteLine("工作流终止了");
};
//创建一个保存工作流实例的sqlstore对象
SqlWorkflowInstanceStore store =
new SqlWorkflowInstanceStore(DbHelperSQL.connectionString); //当前工作实例持久化的时候保存到数据库中
wfc.InstanceStore = store;
wfc.Load(InstanceId);
//从数据库中加载工作流状态
//让工作流继续沿着书签的位置向下执行
wfc.ResumeBookmark(bookmarkName,value);
return wfc;
}
}
}

工作流启动:

 protected void btnstart_Click(object sender, EventArgs e)
{
try
{
int i = ;
EazyBPMS.Web.UI.ManagePage bllmanage = new UI.ManagePage();
Model.manager currentusermodel = bllmanage.GetAdminInfo();
txttest.Text = currentusermodel.real_name;
int currentUserId = currentusermodel.id; //1、将本页面的表单数据提交到表单实例表中(包括附件等等)
eazy_wf_instance bll = new eazy_wf_instance();
EazyBPMS.Model.eazy_wf_instance model = new EazyBPMS.Model.eazy_wf_instance();
model.InstName = txtInstanceName.Text;
model.InstanceForm = txtInstanceForm.InnerText;
model.Remark = txtRemark.Text;
model.SubBy = currentUserId;
model.Status = (short)EazyEnums.WFInstanceStatusEnum.Running;
model.WFApplicationId = Guid.Empty;
model.WF_TempID = this.id;
int instanceid= bll.Add(model);
if (instanceid > )
{
i += ;
} //3、在步骤表中添加2个步骤:第一个为当前已经完成的步骤,第二个为下一步谁审批的步骤 EazyBPMS.BLL.eazy_wf_step stepBLL = new eazy_wf_step();
//第一个步骤 一个当前已经处理的完成步骤。 EazyBPMS.Model.eazy_wf_step startStep = new Model.eazy_wf_step();
startStep.WF_Instance = instanceid;
startStep.Checktime = DateTime.Now;
startStep.Comment = "任务表单提交";
startStep.DelFlag = del;
startStep.IsEndStep = false;
startStep.IsStartStep = true;
startStep.ProcessBy = currentUserId;
startStep.Remark = "朕对自己没意见,没备注。";
startStep.Result = "通过";
startStep.SubTime = DateTime.Now;
startStep.StepName = "任务表单提交";
//此步骤为开始步骤状态为已经完成
startStep.Status = (short)EazyEnums.WFStepStatusEnum.End;
int a= stepBLL.Add(startStep);
if (a > )
{
i += ;
} //第二个步骤:下一步谁审批的步骤。 EazyBPMS.Model.eazy_wf_step nextStep = new Model.eazy_wf_step();
nextStep.WF_Instance = instanceid;
nextStep.Checktime = DateTime.Now;
nextStep.Comment = "";
nextStep.DelFlag = del;
nextStep.IsEndStep = false;
nextStep.IsStartStep = false;
nextStep.ProcessBy = Convert.ToInt32(this.txtrenyuan.Text);
nextStep.Remark = "";
nextStep.Result = "";
//此步骤为开始步骤状态为已经完成
nextStep.Status = (short)EazyEnums.WFStepStatusEnum.Running;
int b=stepBLL.Add(nextStep);
if (b > )
{
i += ; } if (i == )
{
//2、启动工作流实例
var wfApp = WorkFlowApplicationHelper.CreateWorkflowApp(new Finance_Activity(), instanceid.ToString(), new Dictionary<string, object> { { "TempBookMarkName", "项目经理审批chao" } }); JscriptMsg("添加任务成功!", "mywork.aspx");
}
else
{
JscriptMsg("添加任务失败!", "mywork.aspx");
}
}
catch (Exception ex)
{ JscriptMsg(ex.ToString(), "mywork.aspx");
} }

工作流继续:

  protected void btnstart_Click(object sender, EventArgs e)
{
//EazyBPMS.Model.manager_role role = new Model.manager_role();
//EazyBPMS.BLL.manager_role rolebll = new BLL.manager_role(); if (isplay)
{ if (this.txtbumen.Text != "")
{
IsPass = true;
}
else
{
IsPass = false; } }
else
{
IsPass = true; } //通过
//首先更新当前步骤 EazyBPMS.BLL.eazy_wf_step stepBLL = new EazyBPMS.BLL.eazy_wf_step();
//第一个步骤 一个当前已经处理的完成步骤。 EazyBPMS.Model.eazy_wf_step currentStep = stepBLL.GetModel(this.StepId);
//currentStep.WF_Instance = instanceid;
currentStep.Checktime = DateTime.Now;
currentStep.Comment = "提交审批表单";
currentStep.DelFlag = del;
// currentStep.IsEndStep = false;
currentStep.IsStartStep = false;
//currentStep.ProcessBy = currentUserId;
currentStep.Remark = "朕对自己没意见,没备注。";
currentStep.Result = "通过";
currentStep.SubTime = DateTime.Now;
//currentStep.StepName = "项目经理审批";
//此步骤为开始步骤状态为已经完成
currentStep.Status = (short)EazyEnums.WFStepStatusEnum.End;
stepBLL.Update(currentStep); if (isplay)
{ //第二个步骤:下一步谁审批的步骤。 EazyBPMS.Model.eazy_wf_step nextStep = new Model.eazy_wf_step();
nextStep.WF_Instance = this.id;
nextStep.Checktime = DateTime.Now;
nextStep.Comment = "";
nextStep.DelFlag = del; nextStep.IsStartStep = false;
nextStep.ProcessBy = Convert.ToInt32(this.txtrenyuan.Text);
nextStep.Remark = "";
nextStep.Result = ""; //此步骤为开始步骤状态为已经完成
nextStep.Status = (short)EazyEnums.WFStepStatusEnum.Running;
stepBLL.Add(nextStep); } //让书签继续往下走
BaseResumeBookMarkValue value = new BaseResumeBookMarkValue();
value.BookMarkName = "";
value.value = IsPass ? : ;//通过为1不通过为-1
WorkFlowApplicationHelper.ResumeBookMark(
new Finance_Activity(), this.wfAppId, currentStep.StepName, value);
JscriptMsg("审批成功!", "waitwork.aspx");
}

Asp.net工作流workflow实战之工作流启动与继续(三)的更多相关文章

  1. Asp.net工作流workflow实战之工作流持久化(五)

    直接看msdn https://msdn.microsoft.com/zh-cn/library/ee395773(v=vs.100).aspx

  2. Asp.net工作流workflow实战之书签(二)

    1.winform(web程序)下使用工作流 怎样才能像控制台那样让winform或web页面窗体阻塞等待工作流的继续执行呢 2.BookMark书签 书签:和一般的书签看书的时候方便查看上次看的内容 ...

  3. Asp.net工作流workflow实战(一)

    最近开发一个项目用到了工作流引擎,之前研究过微软的workflow所有就用它了,距离上次用有一段时间了,好多东西有点模糊了,就在此处一遍写代码一遍回忆. 首先,在我的项目中新建了.netframwor ...

  4. Asp.net工作流workflow实战之给书签命名(四)

    之前我们的书签名字是通过手动录入的方式,在实际开发中要在流程设计的时候定义好: namespace EazyBPMS.WorkFlow { public sealed class SetStepAct ...

  5. Workflow笔记1——工作流介绍

    什么是工作流? 工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象.概括.描述.BPM:是Business Process Management的英文字母缩写.即业务流程管理,是 ...

  6. openerp经典收藏 深入理解工作流(Workflow)(转载)

    深入理解工作流(Workflow) 原文:http://shine-it.net/index.php/topic,2494.0.html 一.工作流定义:<?xml version=" ...

  7. 风尘浪子 只要肯努力,梦想总有一天会实现 WF工作流与Web服务的相互调用 —— 通过Web服务调用Workflow工作流(开发持久化工作流) _转

    如果你曾经负责开发企业ERP系统或者OA系统,工作流对你来说一定并不陌生.工作流(Workflow)是对工作流程及其各操作步骤之间业务规则 的抽象.概括.描述.工作流要解决的主要问题是:为实现某个业务 ...

  8. 工作流-----WorkFlow

    我们都知道对于一个OA系统来说,最重要的也是不可或缺的一个重要环节那就是对于工作流的实现,为此,最近专门在学习如何使用WorkFlow,问前辈,前辈也说道K2工作流引擎挺不错,自己同时也翻阅了一些资料 ...

  9. Workflow:自定义工作流 之 模型选择

    Workflow:自定义工作流 之 模型选择 背景 毕业5年,做了4个版本的工作流框架,工作流几乎是每个企业应用开发人员必须跨过的门槛(我还没有跨过去),下面简要说一下之前的4个版本,然后重点介绍第5 ...

随机推荐

  1. Kubernetes Ingress

    Kubernetes关于服务的暴露主要是通过NodePort方式,通过绑定node主机的某个端口,然后进行pod的请求转发和负载均衡,但这种方式下缺陷是 Service可能有很多个,如果每个都绑定一个 ...

  2. codeforces 155D 质数

    题意:有编号1到n的n台机器,有m次操作,操作为开启或关闭机器,成功开启机器k的条件为k和所有已经开启的机器编号互质. 思路:vis[i]数组存放占领i这个位置的机器编号,因为所有开启的机器的编号互质 ...

  3. Windows 端口和所提供的服务

    一 .端口大全 端口:0 服务:Reserved 说明:通常用于分析操作系统.这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果.一种典型的扫描,使 ...

  4. HMM代码实现

    按照网上的代码,自己敲了一下,改了一点点,理解加深了一下. 还有训练HMM的EM算法没看懂,下次接着看: 参考连接:http://www.cnblogs.com/hanahimi/p/4011765. ...

  5. PAT1023. Have Fun with Numbers (20)

    #include <iostream> #include <map> #include <algorithm> using namespace std; strin ...

  6. Memcache面试题

    * memcached是怎么工作的? * memcached最大的优势是什么? * memcached和MySQL的query cache相比,有什么优缺点? * memcached和服务器的loca ...

  7. JSON 在JavaScript 中的应用及自己的理解

    [对象和json]JSON:JavaScript 对象表示法(JavaScript Object Notation).JSON 是存储和交换文本信息的语法.类似 XML.JSON是一种数据格式,不是一 ...

  8. ural 2015 Zhenya moves from the dormitory(模拟)

    2015. Zhenya moves from the dormitory Time limit: 1.0 secondMemory limit: 64 MB After moving from hi ...

  9. [原创]Java动态填充word文档并上传到服务器

    一. 需求背景 在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,但是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式是jacob, 但是 ...

  10. 使用Innobackupex快速搭建(修复)MySQL主从架构

    MySQL的主从搭建大家有很多种方式,传统的mysqldump方式是很多人的选择之一.但对于较大的数据库则该方式并非理想的选择.使用Xtrabackup可以快速轻松的构建或修复mysql主从架构.本文 ...