工作流

依据 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. Linux Shell常用技巧(二) grep

    七. grep家族:       1.  grep退出状态:    0: 表示成功:    1: 表示在所提供的文件无法找到匹配的pattern:    2: 表示参数中提供的文件不存在.    见如 ...

  2. drupal进入不了后台时候的解决办法,作者使用drush方案,已验证

    drupal把正在用的主题不小心删了,怎么进后台? 方法一: 去variable表里把默认主题换了 方法二: ?q=user 登录到管理区,开启简洁连接使用user(网站根目录下面) admin/ap ...

  3. 利用SQL语句实现分页

    1.概述 在网页中如果显示的数据太多就会占据过多的页面,而且显示速度也会很慢.为了控制每次在页面上显示数据的数量,就可以利用分页来显示数据. 2.技术要点 在SQL Server中要实现SQL分页,需 ...

  4. HTTP POST请求的Apache Rewrite规则设置

    最近自测后端模块时有个业务需求需要利用WebServer(我用的是Apache)将HTTP POST请求转发至后端C模块,后端处理后返回2进制加密数据.http post请求的url格式为:     ...

  5. DOM4J解析XML文档

    Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...

  6. java 显示目录下全部文件

    package gao.org; import java.awt.HeadlessException; import java.io.File; import javax.swing.JFileCho ...

  7. 灵动标签的使用方法 ecms通过运行sql获取须要的记录

    在某些条件下,我们要求站点的某页上显示指定的信息, 可是这样的指定假设固定去用代码写死的话,对以后的修改将会是大麻烦: 这时候sql语句的优势就凸显出来,利用sql语句仅仅须要改改数字,就能让显示的内 ...

  8. Typings实现智能

    在Visual Studio Code中通过Typings实现智能提示功能   前言 我们知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也有一些简单的提示,但这是通过代码片段提供的.功能 ...

  9. Exception in thread &quot;main&quot; java.lang.IllegalArgumentException

    1.错误叙述性说明 Exception in thread "main" java.lang.IllegalArgumentException: Cannot format giv ...

  10. C++编程命名规范

    原地址:http://www.cnblogs.com/joinclear/archive/2013/02/21/2921422.html C++编程命名规范 0前言 根据多年工作经验和其它命名规范整理 ...