本文转自 http://www.cnblogs.com/nehc/archive/2007/11/16/961417.html
1 Teamplate中的几个基本概念
说明:作为开始之前预备知识,首先介绍一下Teamplate中的几个基本概念,包括Model、Process、Task、User等。
1.1 Model
Model即流程模板,是我们为一个业务流程定义的一个模板,在这个模板设计时,我们需要为它定义好所有的业务步骤(Task)、所有可能的流转线、以及各种流转的条件(业务规则),具体怎样设计一个Model,请看下文的怎样设计流程模板。
1.2 Process
Process是根据一个现有的Model创建的一个具有实际意义的工作流程,例如创建好一个采购订单的模板以后,我们就可以在这个模板的基础上创建一个新的采购订单流程。
对于Model和Process对象之间的关系我们可以这么来理解,如果把一个Model看作一个类的话,那么Process就相当于这个类的一个实例,每个Model可以产生多个实例,一个Process从创建到走完在Model中定义好的整个流程后,直到最后结束就是这个Process的整个生命周期。
1.3 Task
Task是Model中有实际意义的每个步骤,例如一个采购订单的Model可以分解为创建订单-订单审批-采购合同-仓库收货-财务付款这几个Task。
1.4 User
User 对象放到这里来讲主要是因为在Teamplate本来就是一个基于人员的工作流系统,用户权限无处不在,包括Teamplate中虚拟的每个文件夹,以及文件夹中的每个文档包括Model、Process对象,以及Model中的每个Task都需要设置用户权限。
Teamplate中有两种类型的User,一种是在Teamplate中创建的用户,另一种是从AD或者Windows本地用户中导入的用户,如果要在应用程序中集成Windows或者AD对用户进行权限设置和验证的话就需要采用后一种类型的用户。
1 怎样设计流程模板(Model)
说明:设计流程模板的意义主要实现将流程设计跟应用程序开发分开,根据具体业务数据实现流程自动流转,无需在应用程序中控制流程的流转。
1.1 流程模板的设计环境:
流程模板的设计在Teamplate的IDE环境进行,在Captaris Workflow Client工具中新建一个流程模板或者选择已经存在的流程模板进入IDE环境。
1.2 可以在流程模板中实现的功能:
a) 设计工作流流程模板
根据业务流程的需求设置好对应的处理任务(Task),根据流程流转的规律用链接线(Link)将任务进行链接,并在数据对象的XML对象中定义好在流程流转过程中用于控制流程流转的一些关键字段;
b) 添加流程的业务规则
在需要设置流程流转规则的链接线上加上业务规则,可以使用业务规则向导(通过双击链接线可进入业务规则向导)进行业务规则配置,也可以在流程模板的代码事件中(Ready、Complete、Execute、Failed、Overdue、Reset)直接输入代码;
c) 设置流程任务的执行权限
权限是针对Task对象设置的,选择要设置权限的Task然后在属性栏设置该Task的ResponsibleId属性就可以指定这个Task的执行权限。
d) 使用Actions
在流程模板设计过程中可以使用Teamplate提供的几个标准Actions或者Custom Actions实现一些辅助性的功能。目前Teamplate 5.0提供了BizTalk、Core、Office、SharePoint、RightFax等几个标准Actions。在Task的事件中(Ready、Complete、Execute、Failed、Overdue、Reset)使用这些Actions提供的功能在实际应用中是相当有用的,比如当流程流转时,自动给责任人发送邮件通知,或者当任务过期时自动Share任务等等。具体的这些Actions的用法请查看Teamplate帮助文档的Developer Guide-Actions中的说明。同时我们可以自己开发Custom Actions来实现我们特定的需求,Captaris公司提供了一个开发Custom Actions的SDK包,里面有一个很详细的例子说明怎样开发一个Custom Actions,在5.0的安装程序中可以找到。
1 应用程序中嵌入相应流程控制处理
流程模板设计好以后,我们需要开发对应每个Task的执行功能,也就是相关的应用程序,Teamplate的Task可以是Windows Form,也可以是Web Form以及InfoPath表单或者其它的方式。因为精量项目是采用的BS构架的系统,所以本文主要就Web Form的方式做一些总结,设置Task的执行界面是在Task的DefaultForm中设置的,另外还需要设置流程模板的IIS Server以及IIS的物理路径,这两个参数是通过IISServerName属性和IISDirector以属性来设置的,下面的说明中我们主要就用户认证,怎样发起一个新的流程,怎样进行工作流的流转这几个问题来做一个说明。
1.1 用户认证
Teamplate跟AD的集成认证:Teamplate中导入AD用户后可以通过AD做集成认证,具体的方式为通过Teamplate.BLL提供的BSession对象来进行认证,采用BSession.Connect(“”, “”)方法来做用户登录,登录成功后可以获得用户Token,下面是一段用户登录的代码片断:
Teamplate.BLL.BSession bSess = new Teamplate.BLL.BSession();
bSess.Connect("","") ;
string token = bSess.GetToken() ;
bSess.Dispose();
Token是加过密的一个用于用户认证的字符串,在下文中我们可以看到怎样来使用这个Token。
1.2 新建一个流程
对于一个已经创建好的Teamplate流程模板(Model),现在我们来使用它,首先我们要新建一个流程(Process),创建一个新的工作工作流程是使用Teamplate.BLL提供的BProcess对象的Add()方法来实现的,Add方法参数说明请参考Teamplate的帮助文档中的Workflow API Guide,下面是一段创建一个新流程的代码片断:
int FolderId = TeamplateLib.GetFolderId("Processes");
int ModelId = TeamplateLib.GetModelId("Purchase Order");
int ModelOwner = TeamplateLib.GetModelOwner(ModelId);
int UserId = TeamplateLib.GetUserId(username);
BProcess process = new BProcess();
process.SetSessionToken(token);
int ProcessId = process.Add(this.PONo, FolderId, ModelOwner, ModelId);
process.Load(ProcessId);
int TaskID = process.GetNextTaskID(ModelOwner,BProcess.TaskStatus.Ready);
process.UpdateTask(ProcessId,TaskID,DateTime.Today.AddDays(7),UserId,"Normal");
下面对代码做一些说明:
前面四行代码先不看,第5和第6行代码,先声明一个BProcess对象,然后对它进行SetSessionToken,而这个Token就是前面我们登录时获取的那个用户认证字符串!只有对BProcess对象设置了这个Token值后你才有权限使用Add方法新建一个流程,现在应该对Token这个对象有更深的认识了吧。