Asp.net工作流workflow实战之工作流启动与继续(三)
工作流帮助类:
//让工作流继续沿着书签的位置向下执行
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实战之工作流启动与继续(三)的更多相关文章
- Asp.net工作流workflow实战之工作流持久化(五)
直接看msdn https://msdn.microsoft.com/zh-cn/library/ee395773(v=vs.100).aspx
- Asp.net工作流workflow实战之书签(二)
1.winform(web程序)下使用工作流 怎样才能像控制台那样让winform或web页面窗体阻塞等待工作流的继续执行呢 2.BookMark书签 书签:和一般的书签看书的时候方便查看上次看的内容 ...
- Asp.net工作流workflow实战(一)
最近开发一个项目用到了工作流引擎,之前研究过微软的workflow所有就用它了,距离上次用有一段时间了,好多东西有点模糊了,就在此处一遍写代码一遍回忆. 首先,在我的项目中新建了.netframwor ...
- Asp.net工作流workflow实战之给书签命名(四)
之前我们的书签名字是通过手动录入的方式,在实际开发中要在流程设计的时候定义好: namespace EazyBPMS.WorkFlow { public sealed class SetStepAct ...
- Workflow笔记1——工作流介绍
什么是工作流? 工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象.概括.描述.BPM:是Business Process Management的英文字母缩写.即业务流程管理,是 ...
- openerp经典收藏 深入理解工作流(Workflow)(转载)
深入理解工作流(Workflow) 原文:http://shine-it.net/index.php/topic,2494.0.html 一.工作流定义:<?xml version=" ...
- 风尘浪子 只要肯努力,梦想总有一天会实现 WF工作流与Web服务的相互调用 —— 通过Web服务调用Workflow工作流(开发持久化工作流) _转
如果你曾经负责开发企业ERP系统或者OA系统,工作流对你来说一定并不陌生.工作流(Workflow)是对工作流程及其各操作步骤之间业务规则 的抽象.概括.描述.工作流要解决的主要问题是:为实现某个业务 ...
- 工作流-----WorkFlow
我们都知道对于一个OA系统来说,最重要的也是不可或缺的一个重要环节那就是对于工作流的实现,为此,最近专门在学习如何使用WorkFlow,问前辈,前辈也说道K2工作流引擎挺不错,自己同时也翻阅了一些资料 ...
- Workflow:自定义工作流 之 模型选择
Workflow:自定义工作流 之 模型选择 背景 毕业5年,做了4个版本的工作流框架,工作流几乎是每个企业应用开发人员必须跨过的门槛(我还没有跨过去),下面简要说一下之前的4个版本,然后重点介绍第5 ...
随机推荐
- 20145230《JAVA程序设计》第1周学习总结
20145230<JAVA程序设计>第一周学习总结 教材学习内容总结 在第一周的学习中,我初次认识了JAVA程序的一些基础知识.首先,我们需要在网上先下载JDK或者JDE,通过视频的学习, ...
- 机器学习性能指标之ROC和AUC理解与曲线绘制
一. ROC曲线 1.roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性. 横轴:负正类率(false po ...
- Linux FTP 上传一键脚本
下面来介绍一下这个 FTP 上传一键脚本 ftp_upload.sh. 用途:用于在Linux系统下搭建FTP客户端向FTP服务器端上传文件: 总结一下 ftp_upload.sh 特点:1.支持文件 ...
- ubuntu 的mysql 安装过程和无法远程的解决方案
ubuntu 的mysql 安装过程和无法远程的解决方案 安装完mysql-server启动mysqlroot@ubuntu:# /etc/init.d/mysql start (如果这个命令不可以, ...
- WebSocket和HTTP的区别与联系
WebSocket是一个计算机通讯协议,在单个TCP连接上提供全双工的通讯模式.WebSocket设计用于Web浏览器和Web服务器之间的通讯,但也可以用于其他的客户端和应用服务器.WebSocket ...
- java.net.UnknownHostException异常处理
1.问题描述 最近迁移环境,在Linux系统下部署Java产品的应用,后台报出如下异常,系统报找不到名为“xxx-houtai1”的主机: 1 java.net.UnknownHostExceptio ...
- HDU 2480 Steal the Treasure (并查集+贪心)
题意:给你n个点,m条边,包括有向边与无向边,每条边都有一个权值.在每个点上都有一个人,他可以走与这个点直接相连的所有边中任意一条边一次,并且得到这个权值,就不能走了,注意这条路也只能被一个人走.问最 ...
- WINSOCK 传送文件
SERVER: // send_server.cpp : Defines the entry point for the console application. // #include " ...
- JMeter参数文件的相对路径
很多教程里都说“尽可能将参数文件配置为相对路径,以更好的去适配Slave环境”或者“把XX放到相对路径” 这里相对路径是指的 C:\Program Files (x86)\apache-jmeter- ...
- BZOJ 2425 [HAOI2010]计数:数位dp + 组合数
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2425 题意: 给你一个数字n,长度不超过50. 你可以将这个数字: (1)去掉若干个0 ( ...