工作流帮助类:

 //让工作流继续沿着书签的位置向下执行
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. Unity发布安卓后,安卓输入键盘字体白色

    项目里需要用到显示手机电池电量的,但是又不想写安卓,倒jar包,还要做配置,还要写IOS,好麻烦的说.一查,unity后期版本有这个API,索性就升级高版本的了.但是遇到个小问题,那就是安卓输入的时候 ...

  2. HMM代码实现

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

  3. springcloud-声明式调用服务Feign

    springcloud项目例子:链接:https://pan.baidu.com/s/1O1PKrdvrq5c8sQUb7dQ5Pg 密码:ynir 作用: 基于Netflix Feign整合了Rib ...

  4. UVA 12307 Smallest Enclosing Rectangle(旋转卡壳)

    题意:给你一些点,找出两个可以包含所有点的矩形,一个保证矩形面积最小,一个保证矩形周长最小,输出两个最小值 题解:首先根据所有点求一个凸包,再在这个凸包上枚举每条边,作为矩形的一条边(这样可以保证最小 ...

  5. 【转】meta标签中的http-equiv属性使用介绍

    meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...

  6. hdu 5884 Sort 队列+多叉哈夫曼树

    Sort Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  7. Guest CPU model configuration in libvirt with QEMU/KVM

    每个hypervisor对于guest能看到的cpu model定义都不同,Xen 提供host pass through,所以guest能看到的cpu和host完全相同. QEMU/KVM中gues ...

  8. srvany把程序作为Windows服务运行

    srvany.exe是什么? srvany.exe是Microsoft Windows Resource Kits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行.也就是说sr ...

  9. iOS开发中的系统版本比较

    由于系统平台和SDK更新迭代,一部分过时的成员.方法会被彻底从SDK中移除,为了兼容旧的设备,这时就需要区分系统平台版本调用正确的API. 另一种情况是iOS设备的屏幕和设备参数不同,虽然UI上的Au ...

  10. levelDB, TokuDB, BDB等kv存储引擎性能对比——wiredtree, wiredLSM,LMDB读写很强啊

    在:http://www.lmdb.tech/bench/inmem/ 2. Small Data Set Using the laptop we generate a database with 2 ...