流程模拟器的界面操作,例如:运行、重启动、用户选择项选择、业务对象选择等操作只是用来模拟工作流平台进行流程定义运转的过程,用以生成流程运转所需的Python脚本信息,流程模拟的全部过程最终都是运行对应的Python脚本。该脚本可以保存下来,以后有修改流程定义之后,可以再次载入该脚本进行流程定义的测试,在覆盖率100%的情况下,可以完整的测试整个流程定义的运转,找出流程定义的缺陷,并及时纠正。工作流高级扩展的环节、参与者、迁移、条件等都可以用流程模拟器来验证编写代码逻辑正确与否。
配置文件图:
1. 配置正确的Center数据库连接字符串,例如:选择自己本机的数据库连接字符串:connectionString="Data Source=.;Initial Catalog=Workflow; User ID = sa; Password = pass@word1"。
配置BizObjectConnectString —— 业务对象数据表的连接字符串,流程模拟器中的BizObject数据来源,配置成和Center连接字符串一样,表示从Center数据库中获取业务表单的表信息。
2. 正确配置所使用FlowProvider的dll名称和类型,选择defaultProvider是使用DBProvider还是FileProvider。
3. Library里面填写的工作流扩展层的dll名称,例如图中所填写的MOSS扩展和脚本扩展,并且将这些dll放入流程模拟器安装目录下。
4. 配置UserLoginId,默认为admin,登录用户的ID只能在此处更改,在程序中更改了登录ID之后,WorkflowHelper对象会重新生成,之前运行的数据则无法继续使用(注:因为模拟器运行的数据都是在内存中,并没有保存到数据库中)。当数据库中没有admin这个用户登录Id时,可以填写数据库中存在的任意一个人员的登录ID;
UserChoiceHandler为用户选择项所使用的Winform所在的dll;
IsFlowTrack为是否在流程模拟结束的时候自动保存模拟命令Log以及覆盖率结果;
FlowTrackPath为自动保存模拟命令Log以及覆盖率结果的路径,填相对路径将会以模拟器exe所在文件夹路径为基准路径。
1) 选择一个需要模拟的流程,如下图所示:
2) 选择【操作】菜单中的 【运行】,或工具条中的【运行】按钮:
启动流程之后将可以在【流转过程】中看到如下结果:
表明模拟的流程已经运行到【任务名】为【启动】的环节,其【任务状态】为【Sent】
3) 再次选择【操作】菜单中的 【运行】,或工具条中的【运行】按钮:
再次选择【运行】操作之后将会运行到下一步,因为《简单流程》的启动环节有【选择项】的配置,所以会弹出一个条件选择的对话框,在这里有【领导审批】和【助理处理】两个条件,这里选择【领导审批】:
单击【确定】之后就可以在【流转过程】中看到如下结果:
表明现在的流程流转到【领导审批】环节。
4) 再次选择【运行】操作则可在【流转过程】中看到如下结果:
当前流程就运行结束了。
注:如果流程后面还有流程没有运行完成,将需要多次选择【运行】操作。
5) 流程结束后可以在【覆盖率】里面看到如下结果:
【统计】是对某一个流程多次运行结果的覆盖率统计
【当前流程】是当前所模拟的流程的覆盖率结果
6) 在流程运行结束之后,可以在【命令】菜单中点击【查看Log】命令:
这时在【命令行】中可以看到模拟器所执行过的命令脚本:
该脚本可以保存,下次可以直接载入该脚本运行
单击【数据对象】中的Simulator选项,在右边【属性】中会出现Simulator属性:
1) ChoiceXml 为流程运行所需要的数据可以通过自己编辑,或者通过弹出的【条件选择】窗口中选择【后续环节】以及【人员选择】来自动生成。
在脚本中的变量名:choiceXml。
2) 登录ID 为系统登录的用户ID,默认流程启动使用admin来登录,只读,可在配置文件中配置。
在脚本中的变量名:userLoginID。
3) 流程版本号为当前运行流程的版本号,只读,通过选择流程定义自动赋值。
在脚本中的变量名:flowVersion。
4) 流程编号为当前运行流程的ID,只读,通过选择流程定义自动赋值。
在脚本中的变量名:flowID。
5) 流程名称为当前运行流程的名称,只读,通过选择流程定义自动赋值。
在脚本中的变量名:flowName。
6) 选择项为条件选择环节所需的选择项,可以手动赋值,或者通过弹出的【条件选择】窗口中【选择项】的选择来自动赋值。
在脚本中的变量名:userChoice。
7) 业务对象为当前运行流程所需的业务数据,只读,通过业务对象选择窗口来显示其对象名称。
在脚本中的变量名:bizObject。
在【属性条件例子】中,在连接启动环节的两条迁移之中,连接备案环节的迁移其条件是业务对象的Days<=5将流转到备案环节中,而连接审批环节的迁移其条件是业务对象的Days>5将流转到审批环节中,在很多流程中这样的迁移很多,所以模拟的时候最好先设置好该流程所对应的业务对象。
在数据对象中双击业务对象栏,就会弹出业务对象编辑的窗口:
先选择业务类型然后双击该类型或者点击确定、则会默认生成该类型实例、然后确定就可以将业务对象实例赋值到模拟器参数的业务对象属性上。
如上图所示,Days的初始值为0,修改为7之后,在【属性条件例子】的流转过程中会通过Days>5的那条迁移流转到【审批】环节,如果设置为5及其以下的数值则会流转到【备案】环节。
1. 运行命令
运行【命令行编辑器】中的所有代码,内部之前的命令Log会被重新赋值。
2. 查看Log
查看命令Log,将内部的命令Log载入【命令行编辑器】查看。
3. 载入
载入包含命令Log的Python文件到【命令行编辑器】中,可以修改、运行。
4. 保存
将【命令行编辑器】中的命令保存为Python文件,以供下次使用。
5. 查看覆盖率结果
点击该菜单,会弹出查看覆盖率结果的如下图所示的窗口:
左边的列表可以选择的流程名由 【流程编号】、【流程版本】、【流程名称】构成,例如:
流程编号为1,版本号为2,流程名称为简单流程的例子,其合成后的名称则为【1_2_简单流程】。
选择对应的流程,可以查看该流程多次运行结束之后的流程覆盖率统计情况。
字段解释:
Coverage:覆盖率
Fin:已完成流转的环节名称
Unfin:未完成流转的环节名称
正如之前工具说明所述:流程模拟的全部过程最终都是运行对应的Python脚本。所以,在脚本中修改和添加所需的命令,模拟器将可以完成界面操作默认生成脚本所不能完成的流程模拟,例如:带有MOSS环节、脚本环节、脚本迁移等工作流扩展的扩展环节流程。
1. 载入脚本运行所需的dll
模拟器使用sys.path.append(curWorkDirectory)命令默认加入了当前工作路径,默认值为curWorkDirectory由模拟器中的代码获取模拟器exe所在文件夹的路径。这个路径的加入用于clr.AddReferenceToFile('')命令,该命令用于去sys.path所包含的路径下查找对应名称的dll并载入,以下的示例命令载入了工作流流程运行所需的最基本的几个dll。
import sys, clr
#sys.path中加入当前工作路径
sys.path.append(curWorkDirectory)
clr.AddReference('mscorlib','System','System.Xml')
clr.AddReferenceToFile('Bingosoft.Workflow.Business.DataAccess.dll')
clr.AddReferenceToFile('Bingosoft.Workflow.Kernel.dll')
clr.AddReferenceToFile('Bingosoft.Workflow.Providers.dll')
clr.AddReferenceToFile('Bingosoft.Workflow.WFAPI.dll')
2. 配置Bingosoft.Workflow.WFAPI.dll运行所需工作流扩展dll
上节载入的是模拟器运行脚本所需要导入的dll,当运行扩展流程的时候,工作流引擎(WFAPI)需要使用工作流扩展所在的dll,所以需要在模拟器config文件中配置所需dll的文件名,请参见二、配置config文件中的第3节:Library里面填写的工作流扩展层的dll名称,并将dll放入模拟器exe所在文件夹,WFAPI就可以正常运行扩展环节了。
3. 从dll的命名空间中导入所需的类型
命令:
a) from 命名空间 import *
b) from 命名空间 import 类型1, 类型2, … , 类型n
a)从命名空间导入所有的类型,b)从命名空间导入指定的类型。
模拟器默认载入以下类型:
from System import Guid,DateTime,Activator
from Bingosoft.Workflow.Business import WorkflowInstance
from Bingosoft.Workflow.Kernel import WorkItemStatus
from Bingosoft.Workflow.Providers import OrganizationProvider
from Bingosoft.Workflow.WFAPI import WorkflowHelper
from System.Xml import XmlDocument
4. Python脚本说明
模拟脚本的流程:
1) 加入当前工作路径及导入流程运行所需的类型
2) 定义TaskID获取函数
3) 初始化变量数据
4) Step 0 流程启动命令
5) Step 1 流程TaskId = 1的工作项的运行命令
6) Step 2 流程TaskId = 2的工作项的运行命令
7) ……
8) Step n 流程TaskId = n的工作项的运行命令
9) 直到流转到结束步骤
5. MOSS扩展流程模拟
a) 先在【流程】菜单中选择【扩展环节流程】,如下图所示:
b) 再选择【运行】让流程启动,再次点击【运行】则出现以下用户选择项窗口:
c) 选择“MOSS列表”选择项后确定,模拟器会出现运行异常,这是因为找不到MOSS所需的数据,这时就需要去修改脚本以正常运行该流程。
d) MOSS环节需要使用到System.Net.NetworkCredential类,在使用该类型之前需要加入from System.Net import NetworkCredential 命令以导入该类型。
e) 在Step 1的数据设置里面加入数据设置之后的命令如下脚本所示:
红色矩形中的代码为新加入的脚本命令,再选择【命令】菜单中的【运行命令】,这时就可以运行通过Step 1了,这时可以选择【操作】菜单中的【运行】以继续模拟该流程的后续步骤。
流程模拟器工具自带了一个用户选择项的对话框:
该对话框继承自Form和IUserChoice:
public class frmUserChoice : Form, IUserChoice
对话框的构造函数如下:
/// <summary>
/// 用户选择项对话框构造函数
/// </summary>
/// <param name="choices">当前环节的选择项属性(UserChoices)</param>
/// <param name="needChoice">当前环节的需要选择(NeedChoice)属性</param>
/// <param name="workflow">当前流程实例BusinessWorkflow</param>
/// <param name="currentUser">当前用户</param>
/// <param name="bizObject">已选择的业务对象</param>
public frmUserChoice(ActivityChoices choices, bool needChoice, BusinessWorkflow workflow, IUser currentUser, object bizObject)
当模拟器工具自带的对话框无法满足需要的时候,可对此对话框进行扩展,参考模拟器自带的frmUserChoice的继承类和接口,使用相同的构造函数(注:一定要使用和frmUserChoice一样的构造函数,否则模拟器将会产生异常)则可以扩展出用户自己的选择项对话框,在对话框中实现选择项的选择,后续环节以及后续环节参与人员的选择,并将选择的结果赋值给IUserChoice接口里面的UserChoice(选择项,即下一步环节的名称)和ChoiceXml(后续环节的XML字符串,即后续环节的参与者和后续环节名称所组成的XML)。例如:【选择用户流程】【启动】环节的后续环节需要选择【选择参与者审批】这个环节,且其参与者为【系统管理员】,则组成后的XML格式如下所示:
<NextStep>
<Choice>选择参与者审批</Choice>
<Participant>
<User ID="fefa532c-c79a-4076-bf71-e7f2284d2891" Name="系统管理员" step="选择参与者审批"></User>
</Participant>
<AlertTypes/>
</NextStep>
模拟器在对话框确定之后将会获取选择项对话框里面的UserChoice和ChoiceXml属性值以进行接下来的模拟操作。
扩展对话框完成之后,需要在模拟器的config配置文件里面<appSettings>节点设置一下选择项对话框的类全名及其Namespace,如下代码所示:
<add key="UserChoiceHandler" value="Bingosoft.Workflow.Simulator.UserChoiceHandler.frmUserChoice, Bingosoft.Workflow.Simulator.UserChoiceHandler" />
八、 其他参考
品高工作流下载试用地址:http://www.cnblogs.com/briankfc/archive/2010/07/30/1788818.html
品高工作流Procez One V4.0最新功能全览:http://www.cnblogs.com/briankfc/archive/2010/07/29/1787783.html
品高工作流原理介绍:http://www.cnblogs.com/briankfc/archive/2010/07/28/1787205.html
品高工作流Procez One的快速入门:http://www.cnblogs.com/firewing/tag/Quick+Start/