Asp.Net Mvc2 OA 工作流设计思路[图]

回老家上班的新公司,第一个项目:OA。以前没有做过OA,因为设计到工作流这一块的东西,所以自己去进行了相关的了解,于是有了这篇博客(以下文字只是个人理解,高手漂过)。环境:MVC2+SQL2008

工作流分为几个步骤:表单(设计、解析)、流程(设计)、合并就是一个完整的工作流。先上个一个图:

第一步:表单

因为没有使用图形化设计表单,所以我们的思路是强制定义表单格式,后台解析。如图:

上图的HTML是强制定义的,像table>tbody>tr>td必须按照这个格式定义,虽然不灵活,但是功能也算实现了。说说思路:这个表单将解析成11个节点(申请人、申请日期、部门、假期类别、请假时间、扣薪形式、请假理由、审批人、审批日期、审批结果、审批意见)

如上图所示,解析节点是通过[爱好]中的id获取的,采用HtmlAgilityPack来解析,具体代码:

SelectNodes("//table/tbody/tr/td[@id='title']")

这样就可以知道表单的所有节点,而标题所对应的选项则用class来对应,从上图也可以看出来(用来控制表单节点是否可以填写项,下面会介绍)。

特殊控件处理:譬如时间的话也是通过定义class='time'而后,通过jquery动态绑定加载。

第二步:流程,同样通过文字形式来制定流程步骤

定义流程与表单关联

这里的经办权限是直接跟用户关联的,用来标识哪些人拥有该流程的办理权限。

接下来就是定义流程的步骤了。

上图是一个请假流程的全部步骤,下面介绍怎么制定这些步骤。

节点序号:用来表示当前流程为第几步,节点名称用来标识当前步骤名称,是否允许附件、会签,用来控制附件与会签区的显示和隐藏。下一步标识当前步骤可以流转到哪些步骤,左边是已经选择好了的(可以是多个步骤,这里考虑的是,不同的职位使用相同的流程会有特殊情况发生,譬如正常的流程是需要四步[员工填写》经理审批》总监审批》人事备案],但是当总监请假的时候就不需要这么多步骤[填写表单》人事备案]),右边是拉取当前流程下的所有步骤。不可写字段标识,当前步骤时,表单有哪些节点为不可以填写,譬如:员工填写请假申请单,流转到经理时,那么经理看到的表单就有员工姓名、部门等信息不能填写,只能填写审批意见等节点信息。这样流程与表单就关联好了,接下来就是工作流流转了。

第三步:工作流流转,模拟流程流转,新建流程

定义工作流的名称

点击确认新建是,直接跳转到流程页面,并且在数据库存入第一步流程的相关信息。

然后填写表单内容,选择下一个步骤及经办人就可以流转至下一步。说明:表单内容我是把整个表单的HTML代码全部存入数据库,然后流程流转时再把填写好的表单内容存入下一步,这样流程到下一步时,看到的表单就是最新的了。这是一个很笨的办法,因为使用$("#表单tableID")是获取不到表单的value值的,所有需要进行处理,获取表单内容通过jquery直接attr(value,文本值)上去,这样就可以把表单内容存入数据库。

这里还涉及到多人办理的情况,当经办人选择为多人时,除非是最后一个人,否则流程不允许流转至下一步,但是可以填写会签意见及修改表单,修改的表单将覆盖当前步骤表单,至最后一个转交至下一步,如此重复就可以实现流程流转了。

语言组织能不强,所有只能说成这个样子,整个流程还是有缺陷的,表单设计和流程设计都只能使用文字的形式,可能以后会考虑更换成图形化,还有就是不支持子流程。今天就写这么多了,也是最近才接触自定义工作流,也看过很多非常强大的工作流,所以以后还继续完成、改进和学习。

(0)

相关推荐

  • Asp.Net Mvc2 OA 工作流设计思路[图]

    回老家上班的新公司,第一个项目:OA.以前没有做过OA,因为设计到工作流这一块的东西,所以自己去进行了相关的了解,于是有了这篇博客(以下文字只是个人理解,高手漂过).环境:MVC2+SQL2008 工作流分为几个步骤:表单(设计.解析).流程(设计).合并就是一个完整的工作流.先上个一个图: 第一步:表单 因为没有使用图形化设计表单,所以我们的思路是强制定义表单格式,后台解析.如图: 上图的HTML是强制定义的,像table>tbody>tr>td必须按照这个格式定义,虽然不灵活,但是功

  • Flex实现双轴组合图的设计思路及代码

    1.设计思路 (1)设计一个组合图,该图共用一个数据源 (2)组合图是有柱状图和折线图组合的 (3)柱状图显示的数据是依据左边的竖直轴,折线图的数据依据右边的竖直轴 2.源码如下 DoubleY.mxml: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:

  • 网上考试设计思路是怎样的?

    global.asa < script LANGUAGE=VBScript RUNAT=Server > Sub Application_OnStart dbPath = "DBQ=" & Server.Mappath("onlinetest.mdb") dbConnectionString =  "DRIVER={Microsoft Access Driver (*.mdb)}; " & dbPath Set App

  • 使用JavaScript实现网页版Pongo设计思路及源代码分享

    1.游戏背景介绍(写在前面的废话): 五月初的某天,看到某网推荐了这款游戏,Pongo,看着还不错的样子就用ipad下下来试玩了下,玩了两局感觉还错挺过瘾的,因为是手欠类游戏嘛大家懂的. 但是没一会发现游戏在ipad似乎有些bug,玩一会就会卡住然后只能强退了,真是揪心,记录还等着破呢. 怎么办?玩游戏不如玩自己的游戏的念头又邪恶的出现了,然后就把pad丢给了朋友虐心去,我默默回到电脑前开始动手自己写个不会卡的. 大概两小时吧,写出了基本框架,然后扔sinaapp里试了下效果基本能玩就洗洗睡了.

  • MySQL备份恢复设计思路

    背景 首先交代一下背景,由于某些因素的限制,我们公司目前的备份策略采用的是隔天全备的方案,增量备份则使用的是binlog server的方式,那么如何快速恢复就成为了我们需要思考的问题 恢复需求 根据我以往的一些经验来说,通常需要从备份恢复数据的场景有如下几种: 1.被误删库了 2.被误删表了,类型为TRUNCATE或者DROP 3.被误删列了,类型为ALTER ... DROP COLUMN 4.被误删数据了,类型为DELETE或者UPDATE或者REPLACE 5.表空间损坏或出现坏块了 根

  • Docker容器定时备份数据库并发送到指定邮箱(设计思路)

    目录 一.背景: 二.设计思路: 三.编写启动脚本 四.构建镜像 五.添加边车容器 5.1 创建配置文件 5.2 创建有状态服务部署文件 六.测试 项目地址及使用说明:https://gitee.com/noovertime/mysqlmail 一.背景: 一开始的初衷是,想写一个脚本来监控服务器的高占用率进程并通过邮件发送给我,然后突发奇想,可以使用这种方式来备份我的数据库,开始动手! 二.设计思路: 通过编写shell脚本,调用linux的mail工具,mysqldump的方式来保存数据库的

  • 基于SpringBoot实现自动装配返回属性的设计思路

    目录 一:需求背景 二:设计思路 三:使用方法 四:注解解析器(核心代码) 五:需要思考的技术点 一:需求背景 在业务开发中经常会有这个一个场景,A(业务表)表中会记录数据的创建人,通常我们会用userId字段记录该数据的创建者,但数据的使用方会要求展示该数据的创建者姓名,故我们会关联用户表拿该用户的姓名.还有一些枚举值的含义也要展示给前端.导致原本一个单表的sql就要写成多表的关联sql,以及枚举含义的转换很是恶心. 例如:业务对象BusinessEntity.java public clas

  • flask route对协议作用及设计思路

    目录 引言 flask route 设计思路 源码版本说明 flask route示例 flask route的作用 flask route的实现思路 werkzeug库中的Map与Rule在Flask中的应用 route的完整流程 总结 引言 本文主要梳理了flask源码中route的设计思路. 首先,从WSGI协议的角度介绍flask route的作用: 其次,详细讲解如何借助werkzeug库的Map.Rule实现route: 最后,梳理了一次完整的http请求中route的完整流程. f

  • vuex 设计思路和实现方式

    目录 vuex 设计思路和实现 vuex 设计思路 vue 响应式设计,依赖监听.依赖收集 vuex 设计思路和实现 API概念的东西就不介绍了, 如果还不了解vuex 的应用, 可以去查看官方vuex文档 . 下面着重讲解 vuex的原理以及实现 vuex 设计思路 vuex是使用插件机制开发的, vuex 中的 store 本质就是没有template的隐藏着的vue实例 在beforeCreate 混入vuexInit ,vuexInit方法实现了store注入vue组件实例,并注册了vu

  • Go 微服务开发框架DMicro设计思路详解

    目录 背景 概述 架构 设计理念 面向接口设计 会话 Session 消息 Message 协议 Proto 编码 Codec 连接 Socket 有机的组合 插件 Plugin 组件 未来展望 背景 DMicro 诞生的背景,是因为我写了 10 来年的 PHP,想在公司内部推广 Go, 公司内部的组件及 rpc 协议都是基于 swoole 定制化开发的.调研了市面上的各种框架,包括 beego,goframe,gin,go-micro,go-zero,erpc 等等,可能是我当时技术能力有限,

随机推荐