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 ...
随机推荐
- linux基础四----samba&&nginx
一 samba 1环境配置: a.确保linux下防火墙关闭比或开放共享目录权限 iPtables -F b.确保setlinux关闭:setenforce 0 c.配置iP 2安装软件包:yum i ...
- Model FEP 快易播看板推播系统
主要特色: 低成本,快速导入 透过Wi-Fi 方式推播,现场架设容易 采Web Browser 介面登入操作,简单快速 模组化版面设定,弹性调整资料呈现方式 可整合多种连线方式与外部资料库沟通 可自行 ...
- ACM训练小结-2018年6月14日
于恢复性训练Day2情况如下:https://vjudge.net/contest/234651 先看A题,读懂题意,没有想明白,码完后连续多次WA,后找到错误AC. 对B题,发现其是一个 ...
- Cocos2d-x项目移植到WP8系列之八:CCLabelTTF显示中文不换行
原文链接: http://www.cnblogs.com/zouzf/p/3985330.html 在wp8平台上,CCLabeTTF显示中文不会自动换行,看了下源码,原来底层的实现是根据text的空 ...
- 多校hdu5754(博弈)
©此题中在N×M的棋盘中从(1,1)走到(N,M)B先走G后走,谁先到(N,M)谁赢,走法分为4中分别是国际象棋中的国王,车,马,王后的发,在四种走法下谁能赢: 我们依次分析每一种棋子. ①王. 首先 ...
- wareshark网络协议分析之ARP
一.ARP协议简介 简单的说ARP协议就是实现ip地址到物理地址的映射.当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48bit的以太网地址(物理地址)来确定网络接口的. ARP ...
- [转]Android:改变Activity切换方式
overridePendingTransition(enterAnim, exitAnim); Intent intent =new Intent(this,item2.class); startAc ...
- Guest CPU model configuration in libvirt with QEMU/KVM
每个hypervisor对于guest能看到的cpu model定义都不同,Xen 提供host pass through,所以guest能看到的cpu和host完全相同. QEMU/KVM中gues ...
- Db2数据库在Linux下的安装和配置
一.DB2数据库的安装和配置: 1.安装完成后,需要增加三个操作系统的组和三个操作系统用户,如下: groupadd -g 999 db2iadm1 #(管理实例的组) groupadd -g 99 ...
- java笔试面试(转载)
Java面试笔试题大汇总(最全+详细答案) 2016-02-01 15:23 13480人阅读 评论(8) 收藏 举报 分类: Java面试题(1) 声明:有人说, 有些面试题很变态,个人认为其实 ...