Teamplate 工作流开发技术总结(2)

来源:互联网 发布:淘宝买家会员帐号提取 编辑:程序博客网 时间:2024/05/15 00:02

关注一下Add方法所使用的几个参数,请再看第7行代码,

第一个参数是ProcessName,我们这里用业务表单的流水号来修改它,它可以是空字符串,空字符串时产生的流程名称是在设计Model时输入的DefaultProcessName值后面加上流程的ID号。在这里需要补充说明的一点是ProcessName是不能有重复值的,包括不跟FolderNameModelName重名,原因是Teamplate在保存这些对象的Files表中Name字段有一个UNIQUE 约束来强制名称的唯一性。

第二个参数是指定放置这个Process的文件夹ID,这个文件夹不是指的物理磁盘的中的文件夹,而是Teamplate系统虚拟的文件夹,具有唯一的ID

第三个参数指定流程的所有者,微软的网站上介绍Teamplate的文档中是这样描述的:

Teamplate for .NET 也将增强其基于角色(role-based)的安全模型,以充分利用基于人员的工作流服务的不同用户的限制条件。这将保证在一个特定的工作流中,只有创造工作流任务的用户有权委派或分配任务给其他的用户。

很不幸,受微软所吹捧的这一功能在我们的客户面前碰了一个大钉子,客户的需求是:微软文中的创造工作流的用户只能做为一个流程的发起人,而委派或分派任务的权限要交由这个流程模板的管理人员来执行。为了解决这个问题所以有了上面的代码,我们在部署项目时把Model的所有权赋给这个Model的管理人员后,在新建流程之前先获取这个Model的所有人,然后在创建新流程时将流程的所有权限赋给这个Model的所有人(这个值不设置时,默认为就是流程的发起人),从而使Model的所有人获得了Process所有人的权限,问题得到解决。

第四个参数很好理解,就是你要新建ProcessModel对应的ID值。

现在可能已经有人对下面的三行代码提出疑义来了,为什么还需要这么一段代码呢?其实很简单,Add一个Process时,默认的第一个Task的执行人就是Add参数中的所有人,那么现在执行权限都给管理拿过去了,也就是所有的流程都交给管理员去做了,我们就不用做事了,^_^!当然是不可以的,要把执行的权限拿回来,所以就有了后面的三行代码,先LoadProcess,获取TaskID,再Update TaskResponseID(前面有讲过,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的最关键的一句代码也就是最后一行代码,这一句调用ProcessWorkflowAdvance方法来进行流程的流转,详细的说明可以参考Teamplate的帮助文档,这里需要说明的一点是它的第一个参数TaskIDTaskID必须是当前Process的处于Ready状态的TaskID

另一个比较重要的说明,代码的第四行用了一个SaveBindingData方法,在这个方法的主要功能是业务数据的保存和保存ProcessXML数据。前面在讲设计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,只读

审批控件的补充说明:审批控件根据IsResponsiblIsApproveTaskIsReady三个属性判断是否显示审批的四个要素,只有当当前用户又是责任人,又是一个审批任务,并且当前状态又为Ready时,审批控件才可以审批,否则只显示审批日志供用户查看

原创粉丝点击