工作流

依据 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. <摘录>详谈高性能TCP服务器的开发

    对于开发一款高性能服务器程序,广大服务器开发人员在一直为之奋斗和努力.其中一个影响服务器的重要瓶颈就是服务器的网络处理模块.如果一款服务器程序不能及时的处理用户的数据.则服务器的上层业务逻辑再高效也是 ...

  2. Android开发之搜Ya项目说明(3)

    项目 搜芽移动client ----seller,app,base三个包的简单说明 作者 曾金龙 Tel:18664312687 QQ :470910357@qq.com 时间 2014-10-14 ...

  3. 【源代码】基于Android和蓝牙的单片机温度採集系统

    如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 STC89C52单片机通过HC-06蓝牙模块与Android手机通信实例- 基于And ...

  4. ios html5 设定PhoneGap开发环境

    怎么样IOS平台搭建PhoneGap开发环境(PhoneGap2.5) (2013-03-13 14:44:51) 标签: c=blog&q=it&by=tag" targe ...

  5. html5实现拖拽文件上传

    以下是自学it网--中级班上课笔记 网址:www.zixue.it html文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...

  6. 自学PHP 环境搭建

    自学PHP之环境搭建 一..首先 安装 phpStudy2013.exe 程序集成包  安装完可能端口被占用 需要手动设置 然后打开http://localhost:8080/phpMyAdmin/ ...

  7. Andy&#39;s First Dictionary

    Description Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy ...

  8. hdu Crazy Circuits

    Crazy Circuits 题目: 给出一个电路板,从+极出发到负极. 如今给你电路板上的最小电流限制,要你在电流平衡的时候求得从正极出发的最小电流. 算法: 非常裸的有源汇最小流.安有源汇最大流做 ...

  9. Codeforce 143B - Help Kingdom of Far Far Away 2

    B. Help Kingdom of Far Far Away 2 time limit per test 2 seconds memory limit per test 256 megabytes ...

  10. android水平循环滚动控件

    CycleScrollView.java package com.example.test; import android.content.Context; import android.graphi ...