Teamplate 工作流开发技术总结(2)
来源:互联网 发布:淘宝买家会员帐号提取 编辑:程序博客网 时间:2024/05/15 00:02
关注一下Add方法所使用的几个参数,请再看第7行代码,
第一个参数是ProcessName,我们这里用业务表单的流水号来修改它,它可以是空字符串,空字符串时产生的流程名称是在设计Model时输入的DefaultProcessName值后面加上流程的ID号。在这里需要补充说明的一点是ProcessName是不能有重复值的,包括不跟FolderName、ModelName重名,原因是Teamplate在保存这些对象的Files表中Name字段有一个UNIQUE 约束来强制名称的唯一性。
第二个参数是指定放置这个Process的文件夹ID,这个文件夹不是指的物理磁盘的中的文件夹,而是Teamplate系统虚拟的文件夹,具有唯一的ID。
第三个参数指定流程的所有者,微软的网站上介绍Teamplate的文档中是这样描述的:
Teamplate for .NET 也将增强其基于角色(role-based)的安全模型,以充分利用基于人员的工作流服务的不同用户的限制条件。这将保证在一个特定的工作流中,只有创造工作流任务的用户有权委派或分配任务给其他的用户。
很不幸,受微软所吹捧的这一功能在我们的客户面前碰了一个大钉子,客户的需求是:微软文中的创造工作流的用户只能做为一个流程的发起人,而委派或分派任务的权限要交由这个流程模板的管理人员来执行。为了解决这个问题所以有了上面的代码,我们在部署项目时把Model的所有权赋给这个Model的管理人员后,在新建流程之前先获取这个Model的所有人,然后在创建新流程时将流程的所有权限赋给这个Model的所有人(这个值不设置时,默认为就是流程的发起人),从而使Model的所有人获得了Process所有人的权限,问题得到解决。
第四个参数很好理解,就是你要新建Process的Model对应的ID值。
现在可能已经有人对下面的三行代码提出疑义来了,为什么还需要这么一段代码呢?其实很简单,Add一个Process时,默认的第一个Task的执行人就是Add参数中的所有人,那么现在执行权限都给管理拿过去了,也就是所有的流程都交给管理员去做了,我们就不用做事了,^_^!当然是不可以的,要把执行的权限拿回来,所以就有了后面的三行代码,先LoadProcess,获取TaskID,再Update Task的ResponseID(前面有讲过,Task的责任人)。
对最前面的4行代码的解释:代码的功能应该是一目了然,目的是获取后面几个方法所需要的参数。这里唯一需要说明的是TeamplateLib对象不是Teamplate提供的,是我们对Teamplate不直接提供的方法做的一些补充,具体实现是直接在Teamplate数据库中查寻得出的。
1.1 工作流的流转
在Task对应应用程序执行程序时,当业务数据提交时,我们需要将流程往后流转,先看代码:
process = new BProcess();
process.SetSessionToken(token);
process.Load(processId);
this.SaveBindingData(process);
process.WorkflowAdvance(taskId, null);
代码说明:
前面3行代码通过前面的两个例子应该都有所了解,现在来看这个Sample的最关键的一句代码也就是最后一行代码,这一句调用Process的WorkflowAdvance方法来进行流程的流转,详细的说明可以参考Teamplate的帮助文档,这里需要说明的一点是它的第一个参数TaskID,TaskID必须是当前Process的处于Ready状态的Task的ID。
另一个比较重要的说明,代码的第四行用了一个SaveBindingData方法,在这个方法的主要功能是业务数据的保存和保存Process的XML数据。前面在讲设计Model的时候,提到过定义XML数据用于流程流转的控制,在流程流转前,我们就需要根据实际的业务数据将数据保存到之前定义好的XML,然后在WorkflowAdvance方法执行时,就会根据保存的XML数据做为条件根据定义好的业务规则进行控制流转。
1 对Teamplate的扩展开发
1.1 为什么要进行扩展开发
为什么要扩展开发,也就时Teamplate的局限性,首先Teamplate在流程角色定义上表现过于简单,跟客户需求相比它没有对流程管理员、流程发起人,流程参与人等角色有明确定义,而且Teamplate提供的标准任务列表控件功能又过于简单,在流程监控,权限控制以及过滤查询方面的功能都不能满足客户的需求,而且又没有流程的流转日志记录,所有上面所描述的这些都是我们进行自定义扩展开发的原因。
1.2 扩展开发的主要工作成果
a) 任务列表User Control
任务列表User Control主要是针对Teamplate提供的TaskList控件的一些不足所做的开发,它在保持原控件功能基础上补充了如下功能:基于用户的区域性动态加载特定的语言资源,目前支持中英文界面、实现了任务列表的过滤功能、实现了流程管理员/发起人/参与人对流程的监控、在任务列表中显示定制的业务数据、对各种角色的权限进行控制、并且扩展了用户对Teamplate用户视图的定制功能。
User Control的应用说明:
TaskList User Control 的属性列表:
属性名称
属性类型
属性说明
SessionToken
string
用户Token,可以不设置
ViewType
string
视图类型具体说明参考下文
ShowTaskProperties
bool
是否显示任务属性按钮
ShowViewProperties
bool
是否显示视图属性按钮
ShowProcessColumn
bool
是否显示列表中的Process列
ShowFormNoColumn
bool
是否显示列表中的Process列
…
bool
可以定义列表中的每一列是否显示
ShowDueDateColumn
bool
是否显示列表中的Process列
ShowDetailColumn
bool
是否显示列表中的Detail列
DetailColumnTitle
string
定制Detail列标题
ShowFilter
bool
是否显示过滤框
PageSize
int
列表中每页显示记录条数
ViewType (视图类型)说明:
值
对应视图
1
Inbox(待办任务)
2
Outbox(已办任务)
3
Overdue(过期任务)
4
Urgent(紧急任务)
5
其它自定义视图
…
其它自定义视图
Sample:采购模块的任务列表
<uc1:TaskListCtrl id=TaskListCtrl1 ViewType="6" PageSize=10 ShowCategoryColumn=false ShowCompletionDateColumn=false ShowDetailColumn=true DetailColumnTitle="Supplier" runat="server"></uc1:TaskListCtrl>
b) 审批控件User Control
审批控件主要功能包括:审批要素和日志的保存、审批日志的显示等功能;
Approve User Control的属性列表:
属性名称
属性类型
属性说明
CurrentUser
string
当前登录用户,必须设置
PID
Int
任务ProcessID,必须设置
TID
Int
任务TaskID,必须设置
IsResponsibl
bool
是否任务的责任人,只读
IsApproveTask
bool
是否审批任务,必须设置
IsReady
bool
任务状态是否为Ready,只读
审批控件的补充说明:审批控件根据IsResponsibl、IsApproveTask、IsReady三个属性判断是否显示审批的四个要素,只有当当前用户又是责任人,又是一个审批任务,并且当前状态又为Ready时,审批控件才可以审批,否则只显示审批日志供用户查看。
- Teamplate 工作流开发技术总结(2)
- Teamplate 工作流开发技术总结(1)
- Teamplate 工作流开发技术总结(3)
- 工作流开发总结
- 工作流技术jbpm学习总结
- 工作流技术JBPM开发入门
- 关于OA系统的工作流开发总结
- 工作流总结
- 【基础篇】工作流技术JBPM4.4开发入门(一)
- 【基础篇】工作流技术JBPM4.4开发入门(二)
- 【思想篇】工作流技术JBPM4.4开发入门(三)
- 【思想篇】工作流技术JBPM4.4开发入门(四)
- 【思想篇】工作流技术JBPM4.4开发入门(五)
- 工作流开发
- 轻量级开发技术总结
- web开发技术总结
- Android开发技术总结
- JBPM工作流demo--websale的开发 (2)
- 表格线条细化的html代码
- 在vs2005中如何设置使用Jmail收发邮件
- 对视频网站的运营要有国有控股的参加,网上购买彩票的取消,网店的开设要有营业执照等一点随想
- win 2003 文件夹 文件 拒绝访问 无法访问 终极解决方法 您无权查看或编辑目前 的权限设置;但是,您可以取得所有权或更改审核设置
- sql server 修改列名
- Teamplate 工作流开发技术总结(2)
- JAVA 数据库的操作方法 基类
- 常用Javascript代码
- Silverlight(银光)北京开发团队2号QQ群53054462创建,欢迎加群!
- JAVA高手的基础素养 (转载)
- .net UrlRewrite重写访问URL
- Teamplate 工作流开发技术总结(3)
- MTD源代码分析(一)
- 可执行文件分析