工作流

依据 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的更多相关文章

  1. spring web flow 2.0入门(转)

    Spring Web Flow 2.0 入门 一.Spring Web Flow 入门demo(一)简单页面跳转 附源码(转) 二.Spring Web Flow 入门demo(二)与业务结合 附源码 ...

  2. 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会在将 ...

  3. Azkaban学习之路(三)—— Azkaban Flow 1.0 的使用

    一.简介 Azkaban主要通过界面上传配置文件来进行任务的调度.它有两个重要的概念: Job: 你需要执行的调度任务: Flow:一个获取多个Job及它们之间的依赖关系所组成的图表叫做Flow. 目 ...

  4. Azkaban Flow 2.0 使用简介

    官方建议使用Flow 2.0来创建Azkaban工作流,且Flow 1.0将被弃用 目录 目录 一.简单的Flow 1. 新建 flow20.project 文件 2. 新建 .flow 文件 3. ...

  5. 分布式任务调度框架 Azkaban —— Flow 1.0 的使用

    一.简介 Azkaban 主要通过界面上传配置文件来进行任务的调度.它有两个重要的概念: Job: 你需要执行的调度任务: Flow:一个获取多个 Job 及它们之间的依赖关系所组成的图表叫做 Flo ...

  6. 分布式任务调度框架 Azkaban —— Flow 2.0 的使用

    一.Flow 2.0 简介 1.1 Flow 2.0 的产生 Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用 Flow 2.0,因为 Flow 1.0 ...

  7. Spring Web Flow 2.0 入门

    转载: https://www.ibm.com/developerworks/cn/education/java/j-spring-webflow/index.html 开始之前 关于本教程 本教程通 ...

  8. PIGS 分类: POJ 图论 2015-08-10 09:15 3人阅读 评论(0) 收藏

    PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18209 Accepted: 8277 Description Mir ...

  9. Spring Web Flow 简介

    Spring Web Flow 简介 博客分类: 转载 SSH 最近在TSS上看到了一片介绍Spring Web Flow的文章,顺便就翻译了下来,SWF的正式版估计要到6月份才能看到了,目前的例子都 ...

随机推荐

  1. Struts2获取演示示例教程

    回想Struts2的使用过程,网上搜的教程多多少少都会有点问题.又一次记录下创建过程,方便查阅. 1.下载Struts2的jar包 下载地址:http://archive.apache.org/dis ...

  2. MySQL 更新走全表和索引的评估记录数

    #!/usr/bin/perl use DBI; $db_name='scan'; $ip='127.0.0.1'; $user="root"; $passwd="123 ...

  3. Common Lisp Style Guide - Ariel Networks Labs

    Common Lisp Style Guide - Ariel Networks Labs Common Lisp Style Guide

  4. 使用Jquery+EasyUI项目开发情况的框架是中评---员工管理源代码共享

    使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery ...

  5. scala 函数编程

     scala 函数编程  Effective Scala.pdf: http://www.t00y.com/file/76767869 Functional_Programming_in_Scal ...

  6. pinyin4j的使用

    pinyin4j的使用   pinyin4j是一个功能强悍的汉语拼音工具包,主要是从汉语获取各种格式和需求的拼音,功能强悍,下面看看如何使用pinyin4j.     import net.sourc ...

  7. PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区

    PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区 PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具

  8. Storm构建分布式实时处理应用初探(转)

    最近利用闲暇时间,又重新研读了一下Storm.认真对比了一下Hadoop,前者更擅长的是,实时流式数据处理,后者更擅长的是基于HDFS,通过MapReduce方式的离线数据分析计算.对于Hadoop, ...

  9. C++ Primer笔记7_STL之关联容器

    关联容器 与顺序容器不同,关联容器的元素是按keyword来訪问和保存的.而顺序容器中的元素是按他们在容器中的位置来顺序保存的. 关联容器最常见的是map.set.multimap.multiset ...

  10. NAT ALG原理

    1      NAT ALG简介 普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多媒体协议(H.323.SIP等).F ...