.net Work Flow 4.0
工作流
依据 WfMC 的定义。工作流(WorkFlow)就是自己主动运作的业务过程部分或总体。表现为參与者对文件、信息或任务依照规程採取行动,并令其在參与者之间传递。官方的总是非常抽象,抽象是为了可以体现各种情况,更加严谨可客观。
可以这样理解这个工作流,在现实工作中办公室审批文档的流程。
传统方式:李四申报项目。找王二麻子经理审批完毕,接着赵六副总签字,又跑到顶层张三董事画押。
而工作流的操作就是将这样一个流程全然的自己主动化、电子化,省去了李四到处跑这样一个流程。
简单地说,工作流就是一系列相互衔接、自己主动进行的业务活动或任务。我们能够将整个业务过程看作是一条河,当中流过的就是工作流。
攻克了什么问题:
复杂的业务处理流程
繁琐的工作流程和大量的人工的手动交流表单
对于业务常常变化的业务。尽可能的利用变化的维度情况下调用不同的工作流来针对的处理
将人从传统的手动填写表单的效率低下中解脱出来;
在哪里用?
在什么样的业务中。能够使用到这样一个流程呢?事实上假设理解之上的概念,在哪里使用也就知道了。
关键业务流程:订单、报价处理、採购处理、合同审核、客户电话处理、供应链管理等
行政管理类:各种申请类项目,出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。
人事管理类: 员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。
財务相关类: 付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。
客户服务类: 客户信息管理、售后服务管理等管理等。
总的能够发如今之上业务中总会有这样一个流动的文件或者信息结构一致的信息流,依据权限不一经过各个參与者来完毕一个业务的流程都是能够适用这样一个工作流的。
怎样使用?
配置环境:vs 2020 .net 4.0 windows 8.1
一般流程
配置工作流-配置权限-激活工作流
1.新建工作流项目或者新建工作流xaml
a.新建工作流项目
新建好对应的项目后,出现一个program.cs 宿主程序、xaml配置好的工作流。
b.新建工作流
与上不同的是。没有宿主程序文件。
直接加入了对应的工作流就可以。
在原有的项目基础上。直接右键加入新项,活动就可以。
如图
2.加入活动
Vs2010须要加入或活动的.cs文件,并又一次生成,这时候就能够在左边的工具栏内将这个生成好的活动以标签的形式加入到序列图中去。
这时候在左边对应的工具栏这里看到生成好的活动图标了
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2ZsMjAxMjEzMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
3.绘制活动图
左边众多的工作流,以及自己定义的活动配合绘制活动图就可以。
实质上还是规定了一系列方法运行的步骤,依照可视化的方式呈现出来。而调用则是在程序声明这个工作流对象,然后把工作交给相应的工作流去就能够了。
实例demo verifyUser
绘制的活动图
如图,绘制了验证username和password的过程,本例仅仅是演示工作流,没有结合对应的业务逻辑。
配置好全局參数enUser
verifyUuser
public sealed class VerifyUser : CodeActivity
{
// 定义一个字符串类型的活动输入參数
public InArgument<UserEntity.user> ToUser{ get; set; }
public OutArgument<UserEntity.user> OutUser{set;get;}
// 假设活动返回值。则从 CodeActivity<TResult>
// 派生并从 Execute 方法返回该值。 protected override void Execute(CodeActivityContext context)
{
user enUser = new user(); // 获取username
enUser.UserName = ToUser.Get(context).UserName; //输出參数
enUser.InstanceID = context.WorkflowInstanceId; context.SetValue(OutUser, enUser); }
这里须要注意的是在对应的可视化界面的verify的属性栏中也须要配置对应的參数名,本机为enUser,须要和传入的參数
名一直,否则则会报错。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2ZsMjAxMjEzMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
verfiyPWD
// 定义一个字符串类型的活动输入參数
public InArgument<UserEntity.user> ToUser { get; set; } // 假设活动返回值,则从 CodeActivity<TResult>
// 派生并从 Execute 方法返回该值。
protected override void Execute(CodeActivityContext context)
{
user enUser = new user();
// 获取pwd
enUser.UserName = ToUser.Get(context).UserPWD; enUser.UserPWD = ToUser.Get(context).UserPWD; }
这里仅仅须要传入參数就可以,故无需传出參数。
宿主程序
/// <summary>
/// 创建并启动工作流-2014年8月23日20:54:11
/// </summary>
/// <param name="Request">相关參数</param>
/// <returns>返回工作流相应ID</returns>
public static Guid CreateAndRun(user Request)
{ //键值对的泛型集合。用来传入參数
IDictionary<string, object> input = new Dictionary<string, object>
{
{ "Request" , Request }
}; //为工作流的单个实例提供宿主,也就是建立好的工作流,可选传入參数
WorkflowApplication application = new WorkflowApplication(new VerifyWF(), input); //application.InstanceStore = instanceStore; //将当前工作流设置为闲置
application.PersistableIdle = (e) =>
{
//将当前工作流终止,
instanceUnloaded.Set();
return PersistableIdleAction.Unload; }; application.Unloaded = (e) =>
{ instanceUnloaded.Set(); };
//出现异常时会调用该方法
application.OnUnhandledException = (ex) =>
{
Console.Write("Exception");
return UnhandledExceptionAction.Terminate;
}; Guid id = application.Id; //启动当前工作流
application.Run(); //中止当前工作流
instanceUnloaded.WaitOne(); return id; }
这里就是工作流委身的宿主程序,进入工作流也是通过这个程序来调用的。
类似在java中的main。
本例没有中断工作流。故无需持久化到数据库。
效果
文件下载:http://pan.baidu.com/s/1jGJuYYa
结语
工作流攻克了这样一个传统手动表单传递的这样一个过程,当然假设须要中断时处理还须要结合持久化数据库。这里的样例。仅限简单了解工作流这样一个过程。从程序内传參。到工作流处理。类似于托付,将这样一个方法托付给对应的工作流。工作流依据规定好的步骤来处理当中的參数和数据。又有点类似模板方法。定义好了算法的流程然后详细就自己来重写每一个活动的excute方法就可以。也相当于流程的处理和实现的解耦,突然认为还是挺不错。
让我说,我是在这样一个新技术的研究见解,真糊涂,特别是,在有关的数据是不太多的情况下。研究了两天。理解在此基础上,只有基本的。
.net Work Flow 4.0的更多相关文章
- spring web flow 2.0入门(转)
Spring Web Flow 2.0 入门 一.Spring Web Flow 入门demo(一)简单页面跳转 附源码(转) 二.Spring Web Flow 入门demo(二)与业务结合 附源码 ...
- Azkaban学习之路(四)—— Azkaban Flow 2.0的使用
一.Flow 2.0 简介 1.1 Flow 2.0 的产生 Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用Flow 2.0,因为Flow 1.0会在将 ...
- Azkaban学习之路(三)—— Azkaban Flow 1.0 的使用
一.简介 Azkaban主要通过界面上传配置文件来进行任务的调度.它有两个重要的概念: Job: 你需要执行的调度任务: Flow:一个获取多个Job及它们之间的依赖关系所组成的图表叫做Flow. 目 ...
- Azkaban Flow 2.0 使用简介
官方建议使用Flow 2.0来创建Azkaban工作流,且Flow 1.0将被弃用 目录 目录 一.简单的Flow 1. 新建 flow20.project 文件 2. 新建 .flow 文件 3. ...
- 分布式任务调度框架 Azkaban —— Flow 1.0 的使用
一.简介 Azkaban 主要通过界面上传配置文件来进行任务的调度.它有两个重要的概念: Job: 你需要执行的调度任务: Flow:一个获取多个 Job 及它们之间的依赖关系所组成的图表叫做 Flo ...
- 分布式任务调度框架 Azkaban —— Flow 2.0 的使用
一.Flow 2.0 简介 1.1 Flow 2.0 的产生 Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用 Flow 2.0,因为 Flow 1.0 ...
- Spring Web Flow 2.0 入门
转载: https://www.ibm.com/developerworks/cn/education/java/j-spring-webflow/index.html 开始之前 关于本教程 本教程通 ...
- PIGS 分类: POJ 图论 2015-08-10 09:15 3人阅读 评论(0) 收藏
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18209 Accepted: 8277 Description Mir ...
- Spring Web Flow 简介
Spring Web Flow 简介 博客分类: 转载 SSH 最近在TSS上看到了一片介绍Spring Web Flow的文章,顺便就翻译了下来,SWF的正式版估计要到6月份才能看到了,目前的例子都 ...
随机推荐
- javascript实现的可改变滚动方向的无缝滚动
效果图如下: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- 在gfs2中关闭selinux
在构建iSCSI存储集群时,请勿在gfs2中使用selinux
- 在phpmyadmin后台获取webshell方法汇总整理
方法一: CREATE TABLE `mysql`.`xiaoma` (`xiaoma1` TEXT NOT NULL ); INSERT INTO `mysql`.`xiaoma` (`xiaoma ...
- RealThinClient学习(一)
服务端代码: unit RtcHttpServer; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...
- Free Mind » Blog Archive » Yakuake + dtach vs Screen + urxvt
Free Mind » Blog Archive » Yakuake + dtach vs Screen + urxvt Yakuake + dtach vs Screen + urxvt
- 深入应用看本质之-ICMP(1)
在网络层的学习时我们easy忽略IP的一个字段--存活时间 以下是百度上的解释 (8)生存时间 占8位,生存时间字段经常使用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命 ...
- 从iReport至Jaspersoft Studio
这篇文章同步到http://www.waylau.com/from-ireport-to-jaspersoft-studio/ 从5.5版本号開始,Jaspersoft Studio将代替iRepor ...
- Java时间比較
Date类有两个方法 一个是after()比方date1.after(date2)推断date1是否在date2之后也就是说date1小于date2吧, 一个是before()比方date1.befo ...
- Android-2手机应用程序,短信应用
Activity生命周期 Android的核心组件 1.Viiew :界面 ,组织UI控件 2.Intent :意图,支持组件之间的通信 3.Activity:处理界面与UI互动 4.Conten ...
- wpf dll和exe合并成一个新的exe
原文:wpf dll和exe合并成一个新的exe 微软有一个工具叫ILMerge可以合并dll exe等,但是对于wpf的应用程序而言这个工具就不好用了.我的这方法也是从国外一个博客上找来的.仅供大家 ...