• 信息化基础建设 工作流开发


    工作流开发

    1. 自定义工作流,自定义活动

    2. 运行时服务

    自定义工作流和活动

    先看工作流设计器的界面

    clip_image002

    从界面中可以看到,需要做的工作有以下几点

    1. 工作流定义保存方式 File下面的Save命令,将工作流定义保存到数据库中,以xml格式存在;同时也提供另存为,保存为xoml文件,以提供发人员设计的工流,直接发送到客户的电脑中。存成xoml文件的另一个好处是,方便调试诊断,以发现问题。

    2. 设计器寄宿,rehosting designer,查阅MSND即可实现

    3. 自定义活动,.NET 3.0/3.5的内置活动,涉及到很多编程的内容。因为自定义工作流,肯定不会考虑用来二次开发,而是给普通用户来设计,并且实现,所以.NET内置的所有活动都派不上用场。即使是简单的IF else活动,也要自己独立实现。

    如图中所示,新建一个顺序工作流,拖动SendMessageActivity到设计器中,双击该活动,弹出窗口

    clip_image004

    这是一个撰写消息的窗体,和Outlook发送邮件的窗体非常相似。如果做成直接发送邮件,不容易追踪和查找历史记录,于是做成自定义消息的方式,并且提供一个option,让用户决定是否也同时当成邮件发送出去。

    再来看判断活动

    clip_image005

    这个活动是根据值的不同,运行不同的分支,和If Else语句很相似。这里的关键是条件的设计,评估(Evaluate),和运行时传值。

    回忆SQL语句中条件的写法,SELECT Employee_NAME FROM EMPLOYEE WHERE EMPLOYEE_NO=’007’

    一个方法是,用UI界面,把用户输入的条件转化为SQL语句的WHERE部分,让数据库帮忙评估求值,作判断。

    使用这种办法,要想尽办法,既要让用户输入条件的方式直观易懂,又要让自己解析成SQL条件容易做。

    另一种办法是CodeDom,这也是Workflow内置rule的生成方式。这里,为什么没有直接用Workflow的rule 编辑器和rule格式? 我是这样理解的,Workflow 内置的rule,适合于以编程方式来使用,比如条件Amount>13, (金额大于13),这个条件要求使用这该活动的Workflow具备变量Amount才行,否则这个条件是无效的,验证时会出错,这一点不可以接受。

    在自定义工作流中,会传一个变量(一般是class)到当前运行的工作流中,类型变量的值,属性,就是我们在自定义条件中需要使用的大部分内容,额外的条件属性还包括一些环境变量。

    比如上图的条件,我们是这样假设的,如果采购单的总金额小于10000,审核通过,如果大于10000,拒绝批准.

    Approval和Reject活动撰写起来很容易,直接将字段Status更新的Approval或Reject即可。

    问题的难点,还是在条件的判断。请查看如下图的条件判断窗体

    clip_image007

    字段TotItemAmt相当于前面的Amount,它是指物料总金额。采购的最终金额还包括税金,运输费用等。

    运行时,将这个条件,转化为CodeDom语句,评估求值。

    因为要放到Workflow中去,重写一个ActivityCondition,重写它的方法
    public class CustomActivityCondition : ActivityCondition

    {

    public override bool Evaluate(Activity activity, IServiceProvider provider)

    { }

    }

    即可,在上图可以看到,那里有Insert Remove二个命令,可以新增加或删除条件,很明显,这是一组条件的集合

    private List<EpnIfElseCondition> _conditions;

    运行时服务

    1. 提供SQL数据库,以持久化工作流。添加SqlWorkflowPersistenceService即可。

    2. 如果是ASP.NET应用,要提供MannualWorkflowSecheduleService。

    3. 将WF的WorkflowRuntime,暴露成WCF服务,以支持跨AppDomain的Workflow应用。

    4. 窗体绑定

    在窗体的接口一节中,提到过,窗体已经提供了标准的接口Save, Post,在窗体框架中,可以判断到当前窗体和当前操作命令(Save,Update,New,Post)是否有绑定工作流,如果有,启动工作流。

    5. Workflow追踪, 可参考MSDN中的程序。

    6. 动态变更, 参考MSDN中的程序.

    Workflow定义了一套工作流的开发方式和规则。我们需要对它override一下,就可以实现自定义的应用,而不适合直接用来做应用。

  • 相关阅读:
    Struts2---配置文件讲解及简单登录示例
    Struts2---环境搭建及包介绍
    Struts2---概述
    Spring---bean的作用域
    Spring---bean的实例化
    Sql Server 2005 .bak备份文进行还原数据库
    Windows Server 2003 R2 With Sp2 序列号
    [Idea]安装avtiviti插件以及 插件中文乱码
    IDEA 跑spring项目找不到get,set的问题
    SpringBoot 集成Avtiviti步骤
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/2082312.html
Copyright © 2020-2023  润新知