流程模型
流程模型包含主数据、流程包,以树形结构的方式进行建模。用户可以方便的按照自己的业务方式进行划分和梳理流程。
主数据
主数据是H3 BPM系统中可以维护的主数据,比数据字典可维护的内容更为丰富,例如客户信息表、物料信息表等基础数据。
主数据有2种存储方式:
存储在H3 BPM系统中,可以在H3 BPM系统中进行维护,发布后会创建H3 BPM的系统表;
存储在业务系统中,H3 BPM系统不存储数据,但是可以通过绑定业务系统的接口进行维护;
添加主数据
通过DataTableAdatper实例快速创建
如果已经绑定了业务系统的数据表时,可以通过【切换导入模式】快速创建主数据。
导入模式
发布
主数据需要进行发布后,才可以被其他流程包进行访问和使用。
点击【发布】按钮
发布后,我们可以看到主数据的属性都为已发布状态:
主数据添加数据
本地存储的主数据可以在数据库中添加数据,也可以页面中导入数据。
点击导入,系统弹出框下载模板,模板为excel形式,填写数据后导入到主数据中。
主数据部署
当在测试环境创建好主数据后,我们需要迁移到正式环境时,可以采用导出和导入的方式。在主数据的右侧工具栏按钮中,点击导出按钮图标,系统将生成一份XML文件提供下载,如下图所示:
导出格式为XML文件。
到服务上,在主数据的右侧工具栏中,点击导入按钮图标
在导入界面中上传已下载的XML文件,点击导入进行完成导入。
当初次导入时,系统会自动创建,当更新导入时,需要选择覆盖模式才能成功进行导入。
业务方法
主数据默认包含以下五个业务方法
Create:普通方法,主数据实体创建;
Load:普通方法,主数据单个实体加载;
Update:普通方法,主数据单个实体更新;
Remove:普通方法,主数据单个实体移除;
GetList:集合方法,获取主数据列表;
主数据业务方法可以绑定一个或多个业务服务的方法,例如员工基本信息存储于A系统中,员工绩效考核信息存储于B系统中,我们需要获取一个完整的员工信息,以提供给流程审批时使用。
你可以添加自己的业务方法,用以和业务服务方法进行绑定。业务服务方法有2个类型:
普通方法:该方法有参数的输入和输出,需要先构造实例化的BizObject对象后方可执行,例如Create方法;
集合方法:该方法返回集合对象,例如GetList方法;
静态方法:该方法不需要构造BizObject的实例化对象即可执行,该方法不能接收返回值。
绑定业务服务
绑定业务服务是将主数据方法和业务服务方法进行绑定,当在执行主数据方法时,最终是根据业务方法的映射关系执行绑定的业务服务方法。例如Load方法绑定了A服务.LoadA方法,在执行主数据的Load方法时,实际上执行A服务.LoadA方法,并且根据输入和输出参数的绑定关系,将主数据对象的属性做为参数传递到业务服务方法,并且将业务服务方法的返回参数再绑定到主数据对象的属性上。
点击绑定业务服务按钮,进入选择业务服务方法页面,如下图
选择需要绑定的业务服务方法,点击【保存】和【自动创建属性并绑定】按钮,系统将会给该主数据创建对应的属性,并和业务服务的方法参数进行绑定。
当需要使用自定义的主数据属性和业务服务方法参数进行绑定时,可以点击右边的【打开】链接,进行重新选择数据项进行绑定;
绑定业务规则
绑定业务规则操作方式与【绑定业务服务】章节相同,只是绑定的业务规则对象是属于【业务规则】模块创建的。
业务规则与业务服务区别在于,业务规则是完全在H3系统中进行定义的计算规则,而业务服务是访问业务系统的接口进行交互。
查询列表
查询列表是主数据一个重要的属性。
主数据提供给表单或查询列表使用时,都需要创建一个查询对象。在查询对象中,我们可以定义查询界面显示的查询条件、数据列表显示的字段等
新建查询对象
在新建查询对象界面中,勾选需要显示的字段名称
添加查询条件
查询条件匹配类型有四个方式
完全匹配:相当于SQL查询条件中的=符号;
模糊匹配:相当于SQL查询条件中的%符号;
范围匹配:使用下拉框的方式,可以设置固定的选项或者数据字典进行绑定;
系统参数:系统默认提供3个参数、当前用户ID、当前用户账号和当前用户所在组织ID,当使用该类型查询条件时,系统会将获取当前用户的值赋值给该参数;
查询条件可以根据需要,设置为显示或者不显示,当设置为不显示时,可以设置当前参数的默认值,在执行查询时默认加上该参数的默认值条件进行过滤,而不显示从查询区域中;
查询条件的显示类型有4个类型的控件:文本框、下拉框、单选框和复选框;
运行
添加查询对象后,可以返回列表中点击【运行】按钮,查看当前新建的查询对象运行效果。
当出现以下界面时,表示查询对象创建是成功的。
自定义查询页面
查询对象可以将系统默认效果导出ASPX页面,你可以在该页面基础上进行自己的个性化修改。
点击生成页面按钮
在新的界面中,输入页面的名称,点击生成即会产生ASPX和cs文件。
查询应用
表单设计器中,下拉框、单选框、列表框以及开窗查询,均可以绑定查询列表对象。如下图所示,下拉框的列表来源于查询对象的绑定设置。
选中下拉框,设置 SchemaCode或者QueryCode属性
弹出的配置向导中,选择需要绑定的主数据、查询列表、查询条件绑定的字段以及下拉框的显示值、文本绑定的属性,点击确定。
流程包
流程包由数据模型、表单、流程模型等对象组成,每个流程包必须并且唯一存在一个数据模型,可以有多个表单和流程。
当流程包中存在多个流程时,他们将使用同一个数据源,所有数据都存储于同一个数据模型中。当存在父子流程时,父子流程数据将对应同一个数据模型实体。
流程包如下图所示:
添加
导入导出
当流程包需要从测试环境迁移至正式环境时,我们可以采用导入导出的方式;
在需要导出的流程包中,点击右边的导出按钮图标,系统会将该流程包导出成一个XML文档,如下图所示:
到服务器后,我们可以到对应的目录,点击导入按钮进行执行导入:
选择之前导入的XML文件,进行上传
初次导入时点击导入按钮即可完成。如果是更新导入,那么需要选择覆盖模式。
锁定与解锁
由于所有流程都属于在线编辑方式,为防止多人同时编辑而造成相互覆盖,H3对整个流程包提供锁定和解锁功能。
当需要编辑流程包的文件时,可以先进行锁定操作,锁定成功后,只有锁定人可以进行编辑,其他人员将看到被他人锁定状态。当编辑完成后,可以使用解锁功能,此时其他人可以继续锁定或者编辑操作。
锁定操作按钮如下图所示:
锁定后,再次看到工具栏变成解锁按钮,如下图所示:
数据模型
数据模型是H3系统业务数据存储的数据结构,所有流程数据或者基于H3开发平台设计的业务系统数据存储都以数据模型为基础。对外部业务系统,数据模型可以通过业务方法进行绑定业务服务进行交互,对内部定义的业务规则,数据模型可以通过业务方法绑定业务规则进行实现。
数据模型由数据项、业务方法、查询对象、监听器、定时作业计划等功能组成。
每个数据模型发布后,H3都在数据库中自动创建一张逻辑表进行对应。
数据项
数据项是组成数据模型的元数据,是数据模型中所有功能的基础。
在创建流程时,通常第一步就是建立数据模型中的数据项。
例如我们请假需要填写请假申请单,在请假申请单中我们要填写请假人、请假开始时间、结束时间、请假类型、请假原因,以及上级主管需要填写审核意见,这些填写内容都是数据项。
数据项类型:决定数据字段的存储方式,以及在表单中的对应控件
基础数据项类型包含:
数据项类型 | 对应字段类型 | 说明 |
短文本 | Nvarchar(200) | 可使用单文本框、下拉框、单选框等控件 |
长文本 | Nvarchar(2000) | 可使用多行文本框控件 |
逻辑型 | Int | 0否,1是 |
整数 | Int | 可使用单文本框控件 |
长整数 | BigInt | 可使用单文本框控件 |
数值 | Float | 可使用单文本框控件 |
日期 | Datetime | 可使用日期控件 |
参与者单人 | Nvarchar(200) | 可使用选人控件 |
参与者多人 | Xml | 可使用选人控件 |
时间段 | bingint | 可使用时间段控件 |
HTML | image | 可使用在线编辑器文本框控件 |
链接 | Nvarchar(200) | 可使用链接控件 |
审批意见 | - | 复合控件,存储于OT_Comment表 |
附件 | - | 复合控件,存储于OT_Attachment表 |
子表 | - | 子表控件 |
虚拟字段:设置为虚拟字段,则不会在数据库中建立对应字段
存储选项:
痕迹:选择该数据项是否保留每次修改的痕迹,如果是则会记录每次的变更历史数据和变更人,
创建索引:该数据项是否会在数据库表中创建索引
查询:该数据项是否可用于被查询,如果选择该项,那么在流程数据查询中可以使用该数据项做为查询条件。
数据模型中的数据项建立完毕后,需要将数据模型进行“发布”,系统会在数据库中建立数据项的对应数据表、字段,之后才可以在表单及流程路由中使用这些数据项。
关联关系
关联对象类似于子表,与数据项【业务对象数组】类型显示效果一致,但关联对象是一个独立的数据模型或者主数据。
在数据模型的功能按钮中,点击【关联对象】按钮
进入添加关联对象的界面
基本设置包含
关系名称,设置关联对象关系的名称;
显示名称,设置关联对象的显示名称;
对应关系,设置映射关系,有2种方式一对一和一对多的模式;
数据模型,选择需要关联对象的数据模型编码;
过滤方法,选择关联对象的获取集合的方法;
属性设置可以设置关联关系
左侧是被关联对象的数据项名称,中间选择框是选择关联方式,右侧区域选择当前数据模型的关联数据项。例如:当前数据模型是Customer,关联对象数据模型是Product,关联关系是Product.CustomerCode=Customer.Code;那么从左侧关联对象中选择CustomerCode,右侧选择数据项Code。
设置好关联关系后,点击保存,并发布数据项后生效。
业务方法
数据模型默认包含以下五个业务方法
Create:普通方法,数据实体创建;
Load:普通方法,数据单个实体加载;
Update:普通方法,数据单个实体更新;
Remove:普通方法,数据单个实体移除;
GetList:集合方法,获取数据列表;
业务方法可以绑定一个或多个业务服务的方法,例如员工基本信息存储于A系统中,员工绩效考核信息存储于B系统中,我们需要获取一个完整的员工信息,以提供给流程审批时使用。
你可以添加自己的业务方法,用以和业务服务方法进行绑定。业务服务方法有2个类型:
普通方法:该方法有参数的输入和输出,需要先构造实例化的BizObject对象后方可执行,例如Create方法;
集合方法:该方法返回集合对象,例如GetList方法;
静态方法:该方法不需要构造BizObject的实例化对象即可执行,该方法不能接收返回值。
绑定业务服务
绑定业务服务是将数据模型方法和业务服务方法进行绑定,当在执行数据模型方法时,最终是根据业务方法的映射关系执行绑定的业务服务方法。例如Load方法绑定了A服务.LoadA方法,在执行数据模型的Load方法时,实际上执行A服务.LoadA方法,并且根据输入和输出参数的绑定关系,将数据模型对象的属性做为参数传递到业务服务方法,并且将业务服务方法的返回参数再绑定到数据模型对象的属性上。
点击绑定业务服务按钮,进入选择业务服务方法页面,如下图
选择需要绑定的业务服务方法,点击【保存】和【自动创建属性并绑定】按钮,系统将会给该数据模型创建对应的属性,并和业务服务的方法参数进行绑定。
当需要使用自定义的数据模型属性和业务服务方法参数进行绑定时,可以点击右边的【打开】链接,进行重新选择数据项进行绑定;
绑定业务规则
绑定业务规则操作方式与【绑定业务服务】章节相同,只是绑定的业务规则对象是属于【业务规则】模块创建的。
业务规则与业务服务区别在于,业务规则是完全在H3系统中进行定义的计算规则,而业务服务是访问业务系统的接口进行交互。
监听实例
数据模型的监听实例来自正在运行的流程实例数据,并且当前活动环节处于【等待】类型的活动节点(参考活动节点等待说明)。
执行策略
OneByOne,遍历每个正在运行的流程实例方式,检查当前流程实例是否满足检查条件,适用于等待数量较小的情况;
批量检查更新,批量获取最近一次检查时间到当前时间中的所有正在运行的流程实例,逐个检查是否满足等待条件,适用于等待数量较大的情况;
发生更新/删除检查监听,适用于有特殊变化时再检查是否满足条件的实例;
基于事件的监听和批量监听的混合模式,为批量和事件的组合模式;
轮询时间,设置检查监听的间隔时间,最短支持30秒;
监听实例,当前正在运行的流程实例,并且处于等待类型活动节点;
查询列表
数据模型查询对象和主数据查询对象功能相同,从系统功能角度考虑,数据模型完全涵盖主数据功能。
定时作业
定时作业类似于计划任务,可以每隔一段时间执行查询方法,将查询的数据实例集合,单个遍历去执行绑定的业务方法。
定义定时作业,在数据模型的右侧菜单区域中点击定时作业按钮
系统弹出添加定时作业界面
显示名称,输入定时作业的显示名称;
描述,输入描述信息
状态,设置当前定时作业启用/禁用状态;
开始日期,设置定时作业的开始执行时间;
结束日期,设置定时作业的结束时间,当为空时表示永久执行;
轮询次数,设置当前定时作业是否是始终执行,还是执行一次后就自动设置为禁用;
轮询的时间间隔,以秒为单位设置间隔,最短可以设置30秒;
表单模型
H3 BPM表单有2种类型,系统表单和自定义表单,如下图所示:
系统表单,是由系统自动按照数据项生成的表单,用户通过在该系统生成表单基础上使用表单设计器进行设计。
自定义表单,是指通过自行开发,建立一个ASPX表单页面,或者是通过URL引用外部自定义开发的表单(如JSP表单、PHP表单等)。H3 BPM可以根据系统默认表单,生成一份对应的ASPX表单代码,用户可以在此基础上进行设计与开发
无论是系统表单还是自定义表单,H3提供了一份完整的用户控件和一个具有标准接口的表单基类。表单控件用于表单数据的呈现,自动实现表单数据的读写、必填控制,也包含一些复合型控件如审批控件、附件控件、在线编辑器、选人控件等,大大方便和节约了我们在系统实施过程中的时间成本。
默认表单
数据模型发布后,进入表单设计,H3 BPM会提供一份根据控件显示顺序而排列的系统表单,用户可以基于该基础进行表单的设计和二次开发
表单设计器
表单设计器是H3 BPM提供的一项系统表单调整功能。功能页面如下:
设计器最左侧是数据项列表,其中包括在数据模型中建立的数据项,还包括一些系统自带的流程数据项。
在页面中部是表单部分,在这里显示表单样式,并进行相应的调整操作,并在底部有功能标签,可以切换显示页面、代码页面
在页面最右侧是表单属性部分,此部分需要先在页面中部的表单区域进行控件选择,选择后,此部分页面会显示控件的相应属性,用户可以通过调整这些属性,对表单控件进行细致的配置。
无论是手动建立,还是系统自动建立的系统表单,都会根据已发布的数据项内容,自动生成一个默认的表单页面,我们可以在此基础上通过表单设计器进行调整。
表单设计器的具体功能主要有以下两部分:
1. 通过图形+参数的方式,调整表单
2. 通过编辑ASPX和CS的方式,调整表单
1、通过图形+参数的方式,调整表单
表单的右键菜单调整:在表单中,鼠标右键点击,会出现调整菜单,可以在菜单中进行调整操作。点击控件/表格,会出现不同的菜单。
表单拖拽调整:可以通过拖拽调整表单中控件位置
可以将左侧的数据项拖拽到表单设计区域中,选择需要显示的控件类型进行放置。
控件属性
表单设计器中选择指定控件后,右侧属性区域将显示该控件属性,我们可以进行修改控件属性实现业务需求。
表单属性
在表单设计器区域中选择空白区域后,将在右侧显示表单属性。
表单属性包含表单编码、表单名称、javascript、和打印模板。
javascript:允许设置一段脚本,在表单加载后会加载在表单中,例如:
表单打印模板:
允许设置自定义打印内容,打印内容可以是一个HTML文档,例如 <div>{数据项编码1}</div>,在打印时则会将数据项编码1的值显示在打印表单中。
对于审批意见属性,例如数据项名称是{App},那么设置{App}则会显示意见内容,{App.UserName}显示填写意见人的姓名,{App.DateTime}显示为填写意见的日期。
如果有子表时,可以设置<Row></Row>为重复项,例如
<table border="1"> <tr> <th>编码</th> <th>显示名称</th> </tr> <Row> <tr> <th>{子表数据项.编码字段名}</th> <th>{子表数据项.显示名称字段名}</th> </tr> </Row> </table> |
当未设置打印模板时,系统将会打印表单页面。
2、通过编辑ASPX和CS的方式,调整表单
表单设计器支持对ASPX和CS的编辑,其中ASPX的编辑和界面编辑时同步的,当手工修改ASPX内容时,界面也会同样发生变化,反之修改界面设计时,ASPX也会即时发生变化。
H3 BPM表单的ASPX和代码,允许直接拷贝到ASPX文件和CS文件中,是可以直接执行的程序文件。也可以拷贝到VS中进行编辑后,再拷贝到表单设计器中。
ASPX/CS切换
切换到ASPX后,可以直接编辑HTML代码
切换到代码后,可以启用代码再进行编辑
表单控件属性
所有控件共有属性 | |
控件ID | 控件的唯一标识,可以手动输入设置,同一表单下,控件ID不可重复 |
控件类型 | 控件的类型,不能直接进行属性设置,只能通过变更控件的方式改变 |
样式 | 控件显示的样式名称,可以手动输入设置 |
高度 | 控件显示的高度,有百分比(%)、像素(px)两种形式,默认为空,可以手动输入设置,内容需输入数值 |
宽度 | 控件显示的宽度,有百分比(%)、像素(px)两种形式,默认为空,可以手动输入设置,内容需输入数值 |
是否可见 | 控件是否可见,默认都为可见,可手动选择设置。 本属性的优先级低于活动节点的 |
DataField | 控件绑定的数据项名称,内容无法进行更改 |
控件 | 单行文本 |
图例 | |
控件属性 | ComputationRule 设置控件的计算规则公式,内容必须为符合规则的公式。 公式由计算函数、常量、系统数据项、其他流程数据项、运算符号组成。例:SUM({子表.金额}) 点击此项会弹出公式设置面板。 当设置了公式后,将不能直接进行文本输入,只可由系统根据计算公式进行自动计算 公式设置面板
DefaultValue 设置控件的默认值,内容需要手动输入,可以为一般文本或由系统函数、系统数据项、流程数据项组成的表达式。
DisplayRule 设置控件的显示规则,常用于通过其他控件的数据变化调整自身可见性的需求。 点击会出现弹窗,需要在窗口中手动输入显示规则表达式,例:{danxuanzu}=='显示' 当属性进行了有效设置时,只有在表达式为True时,控件才会可见,否则为不可见
FormatRule 设置控件的格式化规则,用户输入的内容会根据格式化规则进行格式转换。规则采用C#语言的格式化规则,具体规则如下: 字符说明示例输出C货币{0:C3}$2.000E科学计数法{0:E}1.20E+001N用分号隔开的数字string.Format("{0:N}", 250000)250,000.00P百分比{0:P2}30.00% 指定数字格式{0:000.000}012.200
PlaceHolder 设置控件的水印文本(控件未输入内容时的浅灰色提示文本)
ToolTip 设置显示的提示信息(鼠标悬停于控件之上时出现)
RegularExpression 设置控件的正则表达式规则,用于对输入内容进行正确性校验。 点击会出现设置窗口。窗口中的设置内容除正则表达式本身外,还包括“RegularInvalidText”属性(正则验证失败提示信息)。 系统中提供了一些常规正则表达式模板,也可以进行自定义输入。
RegularInvalidText 设置正则表达式验证失败时显示的文本,在用户输入了不符合正则表达式规则的文本内容时出现。 点击会出现设置窗口。窗口中的设置内容除验证失败时的提醒信息外,还包括“RegularExpression”属性(正则表达式;)。
VaildationRule 设置控件的必填验证表达式,常用于通过其他控件的数据变化调整是否必填的需求。 点击会出现弹窗,需要在窗口中手动输入必填验证表达式,例:{danxuanzu}=='显示' 当属性进行了有效设置时,当表达式为True时,控件必须填入内容表单才可以进行提交
PopupWindow 设置是否支持开窗查询,用于文本数据内容来自于其他数据源的需求 通过下拉菜单进行选择,有三个选项: None 默认选项,不进行任何数据查询支持 PopupWindow 会在文本框后显示一个文本链接,点击链接出现弹窗,在其中进行查询及数据选择。 Dropdown点击文本框后显示查询窗口,在其中进行查询及数据选择。 DisplayText 设置开窗查询的链接文本,仅在属性“PopupWindow”的值为“PopupWindow”时有效 PopupHeight 设置开窗查询的窗口高度,仅在属性“PopupWindow”的值为“PopupWindow”时有效 PopupWidth 设置开窗查询的窗口宽度,仅在属性“PopupWindow”的值为“PopupWindow”时有效 SchemaCode 设置文本框开窗查询绑定的数据模型,仅在属性“PopupWindow”的值为“PopupWindow”或“Dropdown”时有效 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“InputMappings”“OutputMappings”四个属性进行设置设置 QueryCode 设置文本框开窗查询绑定的数据模型对应的查询方法,仅在属性“PopupWindow”的值为“PopupWindow”或“Dropdown”时有效 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“InputMappings”“OutputMappings”四个属性进行设置设置
InputMappings 设置开窗查询条件(输入参数与数据项的映射) 仅在属性“PopupWindow”的值为“PopupWindow”或“Dropdown”时有效 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“InputMappings”“OutputMappings”四个属性进行设置设置
OutputMappings 设置开窗查询结果(输出数据与控件的映射) 仅在属性“PopupWindow”的值为“PopupWindow”或“Dropdown”时有效 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“InputMappings”“OutputMappings”四个属性进行设置设置
ViewInNewContainer 设置在移动端是否将开窗改为显示到新窗口 |
控件事件 | OnChange OnFocus OnKeyDown OnKeyUp |
控件 | 多行文本 |
图例 | |
控件属性 | AutoTrim 设置是否自动去除文本前后空格,有“true”“false”两个选项可以进行选择,当选择“true”时自动去除。 只有作为文本开头或结束的空格才会被去除。
设置控件的默认值,内容需要手动输入,可以为一般文本或由系统函数、系统数据项、流程数据项组成的表达式。
DisplayRule 需要手动输入显示规则表达式,例:{danxuanzu}=='显示' 当属性进行了有效设置时,只有在表达式为True时,控件才会可见,否则为不可见 PlaceHolder RichTextBox ToolTip
VaildationRule 需要手动输入必填验证表达式,例:{danxuanzu}=='显示' 当表达式为True时,控件必须填入内容表单才可以进行提交
PopupWindow 设置是否支持开窗查询,用于文本数据内容来自于其他数据源的需求 通过下拉菜单进行选择,有三个选项: None 默认选项,不进行任何数据查询支持 PopupWindow 会在文本框后显示一个文本链接,点击链接出现弹窗,在其中进行查询及数据选择。 Dropdown点击文本框后显示查询窗口,在其中进行查询及数据选择。 DisplayText 设置开窗查询的链接文本,仅在属性“PopupWindow”的值为“PopupWindow”时有效 PopupHeight 设置开窗查询的窗口高度,仅在属性“PopupWindow”的值为“PopupWindow”时有效 PopupWidth 设置开窗查询的窗口宽度,仅在属性“PopupWindow”的值为“PopupWindow”时有效 SchemaCode 设置文本框开窗查询绑定的数据模型,仅在属性“PopupWindow”的值为“PopupWindow”或“Dropdown”时有效 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“InputMappings”“OutputMappings”四个属性进行设置设置 QueryCode 设置文本框开窗查询绑定的数据模型对应的查询方法,仅在属性“PopupWindow”的值为“PopupWindow”或“Dropdown”时有效 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“InputMappings”“OutputMappings”四个属性进行设置设置 InputMappings 设置开窗查询条件(输入参数与数据项的映射) 仅在属性“PopupWindow”的值为“PopupWindow”或“Dropdown”时有效 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“InputMappings”“OutputMappings”四个属性进行设置设置
OutputMappings 设置开窗查询结果(输出数据与控件的映射) 仅在属性“PopupWindow”的值为“PopupWindow”或“Dropdown”时有效 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“InputMappings”“OutputMappings”四个属性进行设置设置
ViewInNewContainer 设置在移动端是否将开窗改为显示到新窗口 |
控件 | 下拉菜单 |
图例 | |
重要属性 | DefaultItems 设置菜单的选项,多个选项之间以“;”进行分隔。 例:“办公;活动;生产;管理;福利”(显示效果如上图)
DisplayEmptyItem 设置是否默认显示空项。有true和false两个选项,默认为false。 当选择true时,如果“EmptyItemText”属性未设置,表单初始加载时菜单不会选中任何选项,如果“EmptyItemText”属性进行了设置,表单表单初始加载时菜单选中“EmptyItemText”属性设置的选项。
EmptyItemText 设置空项显示文本。需要手动输入文本,仅属性“DisplayEmptyItem”为true时生效。 进行了设置,并且属性“DisplayEmptyItem”为true时,菜单中会增加一个选项,选项文本为输入文本。 多用于为菜单增加一个“全部”选项。
DisplayRule 需要手动输入显示规则表达式,例:{danxuanzu}=='显示' 当属性进行了有效设置时,只有在表达式为True时,控件才会可见,否则为不可见
MasterDataCategory 设置绑定数据字典的类型。菜单会加载出所有的数据字典类型,如果进行了选择,表单加载时,会加载所选数据字典类型的字典数据成为菜单选项。
Queryable 设置是否允许对项目进行搜索。 有true、false两个选项,默认为true,改为false会取消菜单中的搜索文本框 SchemaCode 设置下拉菜单绑定的数据模型,设置后下拉菜单的数据通过绑定的数据模型查询方法获得 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“Filter”“DataValueField”“DataTextField”五个属性进行设置设置 QueryCode 设置下拉菜单绑定的数据模型对应的查询方法 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“Filter”“DataValueField”“DataTextField”五个属性进行设置设置
Filter 设置数据查询方法的查询条件,只有在查询方法存在查询条件时,才可以进行设置。 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“Filter”“DataValueField”“DataTextField”五个属性进行设置设置
DataValueField 设置数据源绑定时的数据项值 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“Filter”“DataValueField”“DataTextField”五个属性进行设置设置
DataTextField 设置数据源绑定时的数据项文本 点击会出现弹窗,在窗口中同时对“SchemaCode”“QueryCode”“Filter”“DataValueField”“DataTextField”五个属性进行设置设置
SelectedValue 设置下拉框初始选定值,需要手动输入文本,内容必须是下拉菜单中存在的内容项文本 只能用于数据来源为“DefaultItems”属性或数据字典的下拉菜单
TextDataField
VaildationRule 需要手动输入必选验证表达式,例:{danxuanzu}=='显示' 当表达式为True时,控件必须选择一个选项后,表单才可以进行提交
ViewInNewContainer |
事件 | OnChange |
控件 | 一组单选框 |
图例 | |
重要属性 | DefaultItems 例:“办公;活动;生产;管理;福利”(显示效果如上图) DefaultSelected 设置是否默认选中。属性有true、false两个选项,选项默认值为true。 当属性值为true时,如果“SelectedValue”属性为设置,表单加载时默认选中首个单选框; 如果设置了属性“SelectedValue”,则选中属性“SelectedValue”设置的单选框 SelectedValue 设置控件选中的选项,当属性“DefaultSelected”为true时生效。 属性值需要手动输入文本,文本内容必须与其中的一个选项相同。 DisplayRule 需要手动输入显示规则表达式,例:{danxuanzu}=='显示' 当属性进行了有效设置时,只有在表达式为True时,控件才会可见,否则为不可见 MasterDataCategory RepeatColumns RepeatDirection 有“Horizontal”(横向排列)、“Vertical”(纵向排列)两个选项,默认值为“Horizontal” VaildationRule 需要手动输入必选验证表达式,例:{danxuanzu}=='显示' 当表达式为True时,控件必须选择一个选项后,表单才可以进行提交 |
控件 | 一组复选框 |
图例 | |
重要属性 | DefaultItems 设置选项,多个选项之间以“;”进行分隔。 例:“办公;活动;生产;管理;福利”(显示效果如上图)
DisplayRule 需要手动输入显示规则表达式,例:{danxuanzu}=='显示' 当属性进行了有效设置时,只有在表达式为True时,控件才会可见,否则为不可见 MasterDataCategory
RepeatColumns RepeatDirection 有“Horizontal”(横向排列)、“Vertical”(纵向排列)两个选项,默认值为“Horizontal”
SelectedValue 设置控件选中的选项。 属性值需要手动输入文本,文本内容为选项文本内容,多个文本之间用“;”分隔。 例:“办公;活动;生产” VaildationRule 设置控件的必选验证表达式,常用于通过其他控件的数据变化调整是否必选的需求。 需要手动输入必选验证表达式,例:{danxuanzu}=='显示' 当表达式为True时,控件必须至少选择一个选项后,表单才可以进行提交 |
控件 | 单个复选框(无文本) |
图例 | |
重要属性 | 无 |
控件 | 优先级菜单(一个只含有高、中、低3个选项的下拉菜单) |
图例 | |
重要属性 | DefaultValue 获取或设置默认选定的值 属性有3个可选项“High”(高)、“Normal”(中)、“Low”(低),默认选中“Normal” |
控件 | 日期 |
图例 | |
重要属性 | DefaultValue 设置默认显示的日期。需要手动输入文本,初始值为“CurrentTime”,表示流程申请时间。
TimeMode 设置日期控件的显示模式,有“OnlyDate”“FullTime”“SimplifiedTime”“OnlyTime”四个选项可供选择。 OnlyDateFullTimeSimplifiedTimeOnlyTime
MinValue 获取或设置日期控件显示的最小值,需要手动输入文本,默认为“2010-01-01 00:00:00”
MaxValue 设置日期控件显示的最大值,需要手动输入文本,默认为“2050-12-31 23:59:59”
WdatePrickerJson
ViewInNewContain 设置在移动端是否将开窗改为显示到新窗口 |
控件 | 附件上传 |
图例 | |
重要属性 | AllowBatchDownload 设置是否允许批量下载附件,默认为“true”(允许) FileExtensions 设置允许上传的附件格式,需要手动输入文本,多个格式之间用“,”隔开。例:“.doc,.xlsx” MaxUploadSize 设置允许上传的附件大小限制,需要手动输入数值,单位为MB,默认值为10 |
控件 | 附件上传(SHEETOFFICE) |
图例 | |
重要属性 | |
控件 | 时间段 |
图例 | |
重要属性 | 无 |
事件 | OnChange |
控件 | 审批意见 |
图例 | |
说明 | 流程中有数据权限的审批人都可以进行填写,查看时会依次显示每一个审批人的信息(头像、名字、活动节点、审批时间、审批意见) |
重要属性 | DefaultComment 设置默认审批意见,需要手动输入文本 DisplaySign 设置是否显示用户签章。签章在“个人设置-签章设置”中进行设置 DisplayHead 设置是否显示用户头像。用户头像在“个人设置-个人信息”中进行设置 DisplayBorder 设置历史意见是否显示边框 FrequentCommentVisible 设置是否显示常用意见 FrequentSettingVisible 设置是否显示设置为常用意见 LastestCommentOnly 设置是否显示最后一条意见 NullCommentTitleVisible 设置当意见为空时是否显示意见标题 OUNameVisible 设置是否显示部门名称 ActivityNameVisible 设置是否显示活动节点名称 DateNewLine 设置签名和日期是否换行
|
控件 | 富文本 |
图例 | |
属性 | 与多行文本相同 |
控件 | 参与者(单人) |
图例 | |
重要属性 | DefaultValue 内容一般为系统提供的数据项,并使用“{”“}”,作为内容的起始与结尾,例:“{Originator}” PlaceHolder SegmentVisible 设置是否选择【组织群】 OrgUnitVisible 设置是否选择【组织单元】 GroupVisible 设置是否选择【用户组】 PostVisible 设置是否选择【岗位】 UserVisible 设置是否选择【用户】 RootUnit 设置根节点显示的组织节点编码 Recursive 设置是否递归显示所有子节点 VisibleUnits 设置后,控件只显示根节点与输入内容对应的组织单元。 RoleName 设置后,控件只显示指定的组名称中的用户 OrgJobCode 如果输入的职务编码不存在或没有对应用户,控件中将不显示任何内容 OrgPostCode 如果输入的岗位编码不存在或没有对应用户,控件中将不显示任何内容 OrgCode MappingControls |
控件 | 参与者(多人) |
图例 | |
重要属性 | 与参与者(单人)相同 |
控件 | 页面链接控件 |
图例 | |
重要属性 | NavigateUrl 如果输入内容以“http”为开头,则页面跳转以输入文本为URL 如果输入内容不是以“http”为开头,则页面跳转路径为服务器“Portal”目录+输入文本 NavigateUrlDataField Text TextDataField |
控件 | 子表 |
图例 | |
重要属性 | DisplayAdd DisplayClear DisplayDelete DisplayExport DisplayImport DisplayInsertRow DefaultRowCount DisplaySequenceNo DisplaySummary AlternatingRowStyle |
自定义表单
系统默认表单
系统表单即是在添加表单时,选择类型为系统表单,该类型表单没有实际的URL地址需要配置,由H3系统自动生成表单效果,并且可以支持表单设计器进行再次设计。
自定义表单
自定义表单是在添加表单时,选择类型为自定义表单。该表单需要输入一个URL地址
我们通常将自定义表单保存在Portal/Sheets目录下,例如我们将自定义表单保存在Portal/Sheets/Apply.aspx,那么这里表单URL只需要输入:Sheets/Apply.aspx。
如果是外部表单,那么也可以输入完整URL的方式,例如:http://www.xxx.com/Sheets.aspx;
手机和打印默认使用与电脑相同的表单URL(移动办公会自动转存移动办公适应表单,方便手机浏览,请参考移动办公部分介绍)。
当手机或者打印需要设置不同的表单时,可以去掉与PC同一表单选项,再次输入不同的URL地址即可,如下图所示:
这里需要注意的是:当移动办公指定了不同表单URL时,移动办公不会为该表单做移动终端的自适应转换,将会显示表单的原始效果。
还原
在表单设计后,如果需要恢复到系统给定的默认表单效果,可以点击【还原】按钮。
注意:点击还原后设计效果都会被重置。
流程建模
流程建模是H3 BPM中对流程过程的设计功能。
流程建模的设计页面如图:
流程建模整体是一个流程图,其中的单一环节,称为活动节点。我们提供了多种活动节点可选。
点击活动节点,在右侧会显示该活动节点的对应属性值。
这些属性用于控制该项活动节点由谁进行处理,需要查看哪些数据、进行哪些操作等等。
活动节点
活动节点按照是否用户参与分类,可分为用户参与者活动和系统活动。用户参与活动由用户操作进行完成,系统活动则由系统逻辑自动处理完成。
用户参与活动节点包含:手工、审批、传阅;
系统活动节点包含:开始、结束、消息、等待、连接点、业务动作、子流程;
按是否阻塞流程,可以分为阻塞流程节点和非阻塞流程节点,阻塞流程节点包含:手工、审批、等待、子流程(同步方式);非阻塞流程节点包含:开始、结束、消息、传阅、连接点、业务动作、子流程(异步方式)。
开始:流程的唯一入口节点,在流程创建的时候系统会默认添加该活动,不可删除。
结束:流程的唯一结束节点,在流程创建的时候系统会默认添加该活动,不可删除。
手工:在业务上可以理解为一个填写表单的人工参与活动,可以支持单人、多人并行、多人串行等执行方式。
审批:在业务理解上是一个审批业务单据的操作,需要填写审批意见,可以支持单人、多人并行、多人串行等执行方式。
传阅:节点是一个不阻塞流程的活动,接收者可以仅可查看表单。当流程结束时,传阅的任务也不会自动结束,需要用户点击已阅后才会完成。
消息节点:可以给接收人发送消息,该活动节点由系统自动完成。消息可以是邮件、短信方式,并且可以支持自定义,例如支持:RTX、Lync、或者企业内部消息平台等。
等待:节点是需要等到的某个条件成立,才会继续往下执行。等待条件可以设置为一个公式,例如检测某个值是否等于某个状态,还可以和业务服务进行联合使用,用以检测其他业务系统的数据是否满足特定的条件。
连接点:是一个中转节点,该节点不会阻塞流程,当流程满足条件到达后,会立即结束并继续往下执行。通常可以使用以下场景:分解条件路由,流程的路由美观,汇集活动节点
业务动作:可以调用一个或多个业务服务方法,并且业务服务的方法返回值绑定到流程表单数据。
子流程:是一个独立的流程,每个子流程活动节点,都可以启动一个或多个并行的子流程。当父流程和子流程在同一个流程包下时,那么父子流程的数据是共享的,否则父子流程的数据需要进行设置数据项映射来相互传递。
建模操作
节点是通过拖、拉、拽的方式,将节点从上方的节点模板中,拖动到设计区域。
线条操作
若初次使用连接线,请仔细做这一步操作。
将鼠标移到“开始”活动节点下边缘处,看到鼠标变成手形,摁住左键不放开移到“手工”活动节点的上边缘处,松开鼠标,看到“开始”和“手工”活动节点间画出了一条连接线,如图:
使用同样的操作,我们将其他活动节点顺序连接起来。得到如下的流程图:
格式化
格式化功能的目的,是对已有活动节点进行美观性调整,是它们看起来更清晰。
功能包含等高度、等宽度、等大小、竖排等间距、横排等间距5项;
等高度:以第一个被选中的节点为基准将所有被选中节点高度对齐;
等宽度:以第一个被选中的节点为基准将所有被选中节点宽度对齐;
等大小:以第一个被选中的节点为基准将所有被选中节点大小对齐;
竖排等间距:在被选中节点的Y轴最小值和Y轴最大值区间将所有被选中节点按照相同的Y轴间距进行排列;
横排等间距:在被选中节点的X轴最小值和X轴最大值区间将所有被选中节点按照相同的X轴间距进行排列;
保存
点击【保存】按钮,将会保存当前流程配置
检验
检验是一项配置校验功能,通过此功能,可以检测当前流程路由配置是否符合系统规范;
发布
点击【发布】,系统会先执行校验、保存动作,然后将流程发布成为正式版本;只有流程路由发布后,在系统中才可以申请及执行该项流程。
导出图片
点击【存为图片】,系统将目前流程导出成一个图片,显示如下:
设置节点模板
流程设计器允许将某个活动节点的属性设置为模板,下次再拖动相同的节点时,自动具备同样的属性。例如给审批活动节点设置选上驳回到上一步、协助操作,设为模板后,下次再拖动审批节点时,会具有相同的属性,如驳回上一步、协助操作。
值得注意的是,对于根据不同流程个性化的数据不会被模板化,例如数据权限、活动事件、自定义代码、参与者、协助等属性节点的设置;
多选操作
相同的活动节点可以允许多选并设置相同的活动属性,例如全部选择所有审批节点,设置节点的表单或者数据项权限。
摁住ctrl键,点击需要多选的活动节点,选择完成后,在右侧属性中批量设置全部已选择的活动节点属性。
流程属性
1 一般设置
流程编码,查看当前流程编码
实例名称,流程运行时显示的实例名称,可以输入字符串和数据项值的组合方式,例如{Originator.Name}的报销申请,将显示为:张三的报销申请,其中张三表示流程发起人姓名;
描述,设置当前流程模板的描述信息;
选择角色,提交时选择角色身份;
消息推送,在流程中启动消息推送,消息发送配置在系统设置-消息设置中;
传阅发起人,流程结束或取消会传阅给发起人;
2 计划
计划时长:输入时间段,从流程发起时间开始计算,如果超过该时间段仍未完成,则视为流程超时。注意,当有设置工作日历时,会按照工作时间进行计算。
3 扩展属性
扩展属性*,设置一个文本值,该值会记录在活动节点属性上;
4 执行的动作
取消时,在流程被取消的时候由系统触发的事件,可以调用一个或多个业务方法。
开始时,在流程被取开始时候由系统触发的事件,可以调用一个或多个业务方法。
结束时,在流程被结束的时候由系统触发的事件,可以调用一个或多个业务方法。
活动属性
一般设置
编码,设置活动节点的唯一编码,在API函数中获取活动相关信息,都以该编码为参数;
显示名称,设置该活动节点在流程中的显示名称;
排序码,设置该活动节点在流程中的顺序编码,默认为1;
前置条件,设置路由的汇集方式,分为任一和全部两种类型,设置任一时,只需要有一个条件路由到达,活动节点被激活,设置为全部时,则需要所有的前置条件路由都到达,才会激活。例如有以下场景:
任务表单,设置当前活动节点打开任务时绑定的表单。
审批结果,可以选择数据模型中的数据类型为“逻辑型”的数据项,作为该环节的审批结果
意见数据,可以选择数据模型中的数据类型为“长文本”的数据项,作为该环节的审批意见
摘要,活动节点的描述说明。
参与者
参与者:设置活动的参与人,采用公式编辑器的方式进行输入,具体说明见【参与者】及【公式编辑器】章节;
参与者类型:可以选择单人或者多人,如果设置单人时,并且参与者中存在多个参与者表达式,那么只返回表达式数组找到的第一个人;如果设置多人,那么会将参与者中所有的用户做为活动参与人,并且可以选择参与方式和完成出口(同意出口/否决出口);
参与方式:可以选择串行或者并行;当选择串行时,那么系统将按照参与者顺序依次创建任务,当前一个人任务结束后才创建后一个人的任务,直到所有人的任务都结束活动才结束,在活动结束之前,串行允许再扩充用户,例如原先有A、B参与,在进行过程中增加了用户C、D,那么整个活动会依次给到A、B、C、D四个人。当选择并行时,那么所有活动参与者将同时收到任务,并且不允许在活动过程中增减人员
完成出口:当参与者是多人时,可以设置完成出口,允许使用数值方式表示完成出口为具体人数,例如2,表示2个人通过即活动完成。
同意出口,当参与者是多人时,可以设置同意出口,允许使用数值方式表示完成出口为具体人数,例如2,表示2个人通过即活动完成,也可以使用百分比,例如51%,表示超过半数人通过即活动完成。
否决出口,当参与者是多人时,可以设置否决出口,允许使用数值方式表示完成出口为具体人数,例如2,表示2个人通过即活动驳回,也可以使用百分比,例如51%,表示超过半数人通过即活动驳回。
无参与者,当前活动没有任何参与人时的处理方案,可选内容有以下3种:
不做处理:当无参与者时,系统会发给异常管理员,如果没有设置异常管理员,那么会给到发起人;
使用上一次审批结果:自动结束当前任务,并且复制上一次的审批意见;
审批通过:自动审批通过当前任务;
是发起人,设置当前活动的参与者是流程发起人时的处理策略,策略参考【无参与者】;
前一活动参与,设置当前活动的参与者与前一活动的参与者是同一人时的处理策略,策略参考【无参与者】;
参与过流程,设置当前活动的参与者,参与过之前的流程环节时的处理策略,策略参考【无参与者】。
注:已驳回的环节在重新提交后,不计为参与过流程。
数据权限
数据权限是指每个活动节点针对数据项的可见、可写、必填、查看痕迹、移动办公可见的权限控制;
数据项来源于当前流程包中已发布的数据模型;
可见:表示该数据项在表单上允许该活动人员可见;
可写:表示该数据项在表单上允许该活动人员可写;
必填:表示该数据项在表单上允许该活动人员必填;
痕迹:表示该数据项在表单上允许该活动人员查看历史修改痕迹,该功能需要数据项有设置记录痕迹。
移动:表示该数据项允许用户在使用移动办公审批的时候可见;
操作权限
操作权限是指当前活动节点在打开表单时可以执行的操作,默认包含的操作有:转发、查看流程图、邮件通知、移动办公、驳回到开始;
手工选择,设置该操作权限后,如果当前活动节点存在多个后续活动节点,在用户提交表单时,需要用户选择下一步活动节点;当未选上该属性时,系统将按照路由条件进行自动查找后续环节;
跳转,允许当前用户将流程不按照正常顺序,直接跳转到指定的活动环节;
转发,允许当前用户将任务转发给其他人,转发后自己的任务消失,由转发人进行继续处理;
取回,当用户提交任务后,并且下一活动环节未处理时,那么允许用户进行取回,取回后任务重新回到当前用户的待办中;
加签,仅当节点为审批,参与者为多人,参与方式为并行时有效,允许操作人自行添加一个其他人参与当前活动。
加签功能一般用于不确定性多人参与:
该环节业务复杂,申请人无法一次性有效识别,需要逐步识别;
业务关联性很强,需要审核人根据业务关联性纳入更多人员
参与人为主、次业务部门,但次级部门不明确,需要参与审核的主管部门根据需要纳入
提交前可取消,允许用户在提交之前,取消当前流程;
提交后可取消,允许用户在提交之后,取消当前流程;
批量处理,允许用户进行批量提交、驳回此流程模板的任务;
移动办公,允许当前活动任务在移动办公平台可以进行处理;
结束流程,允许当前用户可以进行结束流程操作;
驳回到开始,允许当前用户可以驳回到流程发起环节;
驳回上一步,允许当前用户可以驳回到上一环节,注:只会驳回到提交到该环节的活动,例如A提交B,B提交C,C驳回给B,此时 B驳回上一步将给到A;
驳回到指定的活动,允许用户从所有活动中选择一个活动多个活动可以驳回,实际运行中不可以驳回到未经过的环节和当前环节;
提交到驳回的活动,当流程在某活动节点被驳回时,重新提交可不在进行逐级审批,直接到达被驳回的活动节点
征询意见,允许用户在处理任务时征询他人的意见,例如A处理任务时,征询B的意见,B在待办看到任务并填写意见,B不可以修改表单其他数据,待B提交后,只有A可以看到B填写的内容。此过程中A的任务处理不受B是否完成而影响;
协助,允许用户在处理任务时征询他人的意见,例如A处理任务时,征询B的意见,B在待办看到任务并且像A一样具有表单填写权限,待B提交后,所有用户都可以看到B填写的内容。此过程中A的任务处理不受B是否完成而影响;
传阅,允许当前活动环节可以传阅给其他用户;
数据映射
数据映射是指父子流程数据项之间的映射,支持将父流程的数据映射到子流程中,也可以支持子流程数据项映射到父流程。
需要注意的是,当父流程和子流程在同一流程包下时,数据映射关系可以不需要进行设置,因为父流程和子流程使用的是同一个业务数据源。
映射关系包含以下几个方式:
映射关系 | 说明 |
In | 父流程数据项值传递到子流程 |
Out | 子流程数据项值传递到父流程 |
InOut | 父流程数据项值传递到子流程,子流程做修改后也会传递到父流程 |
OutAppend | 子流程以追加方式传递到父流程,当子流程是多个时有效 |
协办
协办选项允许在系统将任务发送给用户时,同时以协助、征询意见或者传阅的方式发给其他用户,这里主要是配置对应协办的人员信息。
协助办理,选择协助的参与者,协办请参考操作权限描述;
征询意见,选择征询意见的参与者,征询意见请参考操作权限描述;
传阅,选择传阅的参与者,传阅请参考操作权限描述;
高级
提交检查,可以选择在提交时检查下一活动参与者是否为空;
锁策略,可以选择不执行锁定、打开表单执行锁定、请求时执行锁定,打开表单锁定指用户在打开任务表单时自动完成锁定操作,请求锁定需要用户点击工具栏的锁定按钮进行锁定操作;选择锁定策略后,将可以选择【表单锁】执行方式;
表单锁有三种方式
多人编辑表单时弹出提示,用户A锁定后,用户B打开表单仅弹出提示信息;
禁止多人同时编辑表单,用户A锁定后,用户B打开表单弹出提示并调整至非工作模式表单状态;
请求独占时取消他人任务,用户A锁定后,用户B任务被取消;
许可时间,设定当前任务的许可时间,超过该时间系统即认为该任务超时,设定值类型为时间段值或者时间段类型数据项;时间段设置参考:02:00:00表示2个小时,2.02:00:00表示2天零2个小时。超时时间受超时轮询时间和工作日历影响:
当设置超时检查时间小于最短轮询时间时(参考系统参数->常规参数->超时检测的时间间隔),那么超时时间检查为系统设置的轮询时间;
当设置应用了工作日历时,那么超时时间将会排除非工作时间,如:9月3号17:00的任务超时时间是2小时,当天在18:00下班,并且在9月4号早上9点上班,那么超时时间是9月4号早上10:00。
超时策略,在超过许可时间后任务仍未处理,系统执行的操作,包含以下方式:
不执行策略
审批通过
审批拒绝
超时提醒策略(可以绑定邮件、短信、以及自定义提醒方式),需要在H3管理中心->系统参数->消息设置->通知内容中做提醒策略配置。在提醒后,仍然可以在H3管理中心->系统参数->消息设置->消息通知->超时提醒策略模块,设置一个策略时间,在该时间之后发送给超时用户的经理,或者先提醒后结束任务的方式。
javascript扩展,允许输入一段javascript脚本,在打开表单时,会直接输出在表单上。SheetOffice控件的权限就是通过javascript脚本进行控制的。
事件处理
事件处理是针对活动和任务的生命周期而触发的事件,事件可以是设置数据项的值,或者是触发某个业务方法;
活动激活前,在活动由系统创建之前,在系统内部触发的事件;
活动激活后,在活动由系统创建之后,在系统内部立即触发的事件;
活动完成后,在活动完成后,由系统内部立即触发的事件;
活动取消,在活动被取消时,由系统内部立即调用的事件;
任务异步结束,当活动中的某个任务完成后(不区分提交和驳回),由系统内部立即调用的事件;例如活动多人参与,其中任意一个参与者驳回/提交都会触发该事件。
任务提交后,当活动中的某个任务提交后,由系统内部立即调用的事件;
任务驳回后,当活动中的某个任务驳回后,由系统内部立即调用的事件;
有效时间,可以设置一个时间或者时间段数据项。
有效时间事件,在有效时间到达后如果活动仍未完成,那么由系统立即调用的事件
任务提交/驳回,如3个人并签处理,需要张三提交/驳回后才调用事件,需自定义事件用定制化代码,判断任务处理人是张三才触发事件来实现。
所有活动事件设置包含以下内容:
消息通知,允许发送消息通知给到指定的接收人;
设置数据,可以设置数据项的值,操作类型有3个方式
名称 | 说明 |
Set | 直接设置数据项的值 例如:设置数据项{A}的值等于1, A Set 1 |
LeftAppened | 左追加的方式,例如数据项{A}的值为x,左追加1后变成1x |
RightAppened | 右追加的方式,例如数据项{A}的值为x,右追加1后变成x1 |
可以绑定数据模型中的业务方法进行执行;
取消并行活动,当前一个活动节点提交到后续多个活动节点时,其中某一个活动节点驳回后,同时取消并行的其他活动,如下图所示
手工提交后同时激活A/B/C三个活动,当A驳回时,同时取消B和C的任务。
扩展属性
任务标记:设置文本或者选择数据项的值,该值会记录在工作任务表OT_WorkItem中,作为对此任务的一个区分标记,例如某合同流程对合同金额十分注重,即可通过任务标记配置“合同金额”选项来满足。
扩展属性:设置一个文本值,该值会记录在流程模板表WorkflowTemplateDraft的属性上,当业务有特殊的场景时,根据这些特殊的扩展字段来对流程模板进行标记或做逻辑判断使用,例如与第三方系统对接什么时候需要回写值,可通过扩展字段来标记判断,当满足条件时才回写值。
字体大小:设置活动节点显示的字体大小
字体颜色:允许设置活动节点字体颜色
参与者
为复杂的公式方式。
参与者设置采用公式编辑器的方式进行输入,如下图所示:
指定组织
可以从左侧的组织中,直接选定组织、组、或者用户进行绑定。例如选择活动参与者是全体物资管理部员工,绑定方式如下:
数据项参与者
在数据模型中定义【参与者单人】或者【参与者多人】类型数据项,使用该数据项做为活动的参与者进行绑定。结果将由用户在表单中选择具体的人员做为活动的参与人。
添加参与者类型数据项
选择【参与者】类型数据项做为活动参与人
如此,当在表单中选择了员工A作为申请人是,A将做为下一活动参与人;
流程相关参与者
可以使用发起人、上一活动参与人、当前活动参与人、以及流程所有参与人等相关函数;
· 发起人函数表达式:{Originator}
· 上一活动参与人表达式:{LastParticipant}
· 当前活动参与人表达式:{ActivityParticipant}
· 流程所有参与人表达式:{AllParticipants}
更多说明请参考公式编辑器
公式编辑器
公式编辑器应用于活动参与者、条件路由、业务规则执行条件等设置。
公式编辑器窗体
公式编辑器系统提供常量、变量和函数三种类型。
变量和常量
变量和常量
分类 | 名称 | 类型 | 说明 |
常量 | True | bool | True |
False | bool | False | |
null | 空对象 | ||
系统数据 | AllParticipants | String[] | 流程所有参与人 |
InstanceId | string | 流程实例ID | |
BizObjectId | string | 数据模型id | |
SequenceNo | string | 流程流水号 | |
InstanceName | string | 流程实例名称 | |
InstancePriority | string | 紧急程度 | |
OriginateTime | datetime | 流程发起时间 | |
CurrentTime | datetime | 当前系统时间 | |
WorkflowCode | string | 流程编码 | |
WorkflowVersion | int | 流程版本号 | |
ActivityName | string | 当前活动节点名称 | |
ActivityCode | string | 当前活动节点编码 | |
最后活动参与者 | LastParticipant | string | 最后活动参与人,返回单个 |
LastParticipant.Mobile | string | 最后活动参与人手机 | |
LastParticipant.Email | string | 最后活动参与人邮箱 | |
LastParticipant.UserCode | string | 最后活动参与人账户 | |
LastParticipant.OU | string | 最后活动参与人所在组织ID | |
LastParticipant.UserID | string | 最后活动参与人ID | |
LastParticipant.FullName | string | 最后活动参与人完整显示名称 | |
LastParticipant.UserName | string | 最后活动参与人名称 | |
LastParticipant.Manager | string | 最后活动参与人的经理 | |
LastParticipants | String[] | 活动参与人,返回多个(流程设计的参与者) | |
LastFinishers | String[] | 活动完成人,返回多个(在该活动中进行了转发操作时,返回转发后实际完成活动的参与者) | |
发起人 | Originator | string | 发起人 |
Originator.UserID | string | 发起人ID | |
Originator.Email | string | 发起人邮箱 | |
Originator.LoginName | string | 发起人登录账号 | |
Originator.UserName | string | 发起人姓名 | |
Originator.FullName | string | 发起人完整显示名称 | |
Originator.Mobile | string | 发起人手机号码 | |
Originator.OfficePhone | string | 发起人办公电话 | |
Originator.OU | string | 发起人所在组织ID | |
Originator.OUName | string | 发起人所在组织名称 | |
Originator.OUFullName | string | 发起人所在组织完整名称 | |
Originator.OUCategoryCode | |||
Originator.Appellation | |||
Originator.EmployeeNumber | string | 发起人工号 | |
Originator.EmployeeRank | string | 发起人员工职级 | |
Originator.IsOUManager | string | 发起人是否组织经理 | |
Originator.OUManager | string | 发起人OU经理,当发起人所在OU经理为空时,则递归找上一级OU经理 | |
发起人经理 | Originator.Manager.Email | string | 发起人经理邮箱 |
Originator.Manager.OU | string | 发起人经理所在OU | |
Originator.Manager.UserID | string | 发起人经理用户ID | |
Originator.Manager.FullName | string | 发起人经理完整显示名称 | |
Originator.Manager.UserName | string | 发起人经理姓名 | |
Originator.Manager.Mobile | string | 发起人经理的手机号码 | |
Originator.Manager.OfficePhone | string | 发起人经理的办公电话 | |
发起人角色 | OriginatedJob | string | 发起人角色ID |
OriginatedJob.Name | string | 发起人角色名称 | |
OriginatedJob.Level | string | 发起人角色等级 | |
OriginatedJob.FullName | string | 发起人角色完整名称 | |
OriginatedJob.Members | String[] | 发起人所在角色的所有成员 | |
当前活动 参与者 | ActivityParticipant | string | 当前活动参与人 |
ActivityParticipant.Email | string | 当前活动参与人邮箱 | |
ActivityParticipant.Mobile | string | 当前活动参与人手机 | |
ActivityParticipant.Department | string | 当前活动参与人所在组织 | |
ActivityParticipant.EmployeeRank | string | 当前活动参与人员工职级 | |
ActivityParticipant.UserID | string | 当前活动参与人ID | |
ActivityParticipant.FullName | string | 当前活动参与人完整显示名称 | |
ActivityParticipant.UserName | string | 当前活动参与人姓名 | |
ActivityParticipant.Manager | string | 当前活动参与人经理 | |
ActivityParticipant.OUManager | string | 当前活动参与人部门负责人 | |
ActivityAllParticipants | String[] | 当前活动节点所有参与人 |
运算函数
运算函数由数学函数、时间函数、运算表达式等函数组成。
ABS
函数说明 | 返回指定数值的绝对值 | |
参数名称 | 参数类型 | 说明 |
V | Dobule,Int | 输入一个数值类型 |
返回值 | 数值类型的绝对值 |
COS
函数说明 | 返回指定数值的COS值 | |
参数名称 | 参数类型 | 说明 |
V | Dobule,Int | 输入一个数值类型 |
返回值 | 数学函数COS的值 |
FORMAT
函数说明 | 返回字符的格式化值 | |
参数名称 | 参数类型 | 说明 |
F | string | 格式化方式 |
V | Bool/Int/Double/DateTime/String | 待格式化的值 |
返回值 | V安装F格式化后的值,类型:Bool/Int/Double/DateTime/String | |
示例 | 将数值格式显示为千分位 FORMAT("C",数值) 将日期格式显示为日期 FORMAT("yyyy-MM-dd",日期) |
IIF
函数说明 | 运算表达式 | |
参数名称 | 参数类型 | 说明 |
B | Bool | 返回值为bool类型的表达式 |
V1 | 表达式1 | 当B为True时执行的表达式 |
V2 | 表达式2 | 当B为False时执行的表达式 |
返回值 | V1或者V2 | |
示例 | 如果总金额大于100由用户A审核,否则由B审核 IIF({总金额数据项}>100,A用户,B用户) |
MAX
函数说明 | 返回2个数值最大的一个值 | |
参数名称 | 参数类型 | 说明 |
V1 | Int/Double/DateTime/TimeSpan | 输入值1 |
V2 | Int/Double/DateTime/TimeSpan | 输入值2 |
返回值 | Int/Double/DateTime/TimeSpan | |
示例 | MAX({A},{B}) |
MIN
函数说明 | 返回2个数值最小的一个值 | |
参数名称 | 参数类型 | 说明 |
V1 | Int/Double/DateTime/TimeSpan | 输入值1 |
V2 | Int/Double/DateTime/TimeSpan | 输入值2 |
返回值 | Int/Double/DateTime/TimeSpan | |
示例 | MIN({A},{B}) |
NOW
函数说明 | 返回系统的当前时间 | |
参数名称 | 参数类型 | 说明 |
无 | ||
返回值 | DateTime |
PI
函数说明 | 返回圆周率的值 | |
参数名称 | 参数类型 | 说明 |
无 | ||
返回值 | Double,圆周率的值 |
SIN
函数说明 | 返回数学函数SIN的值 | |
参数名称 | 参数类型 | 说明 |
V | Double/int | 输入值 |
返回值 | Double/int | |
示例 | 获取数据项A的SIN值 SIN({A}) |
SQRT
函数说明 | 返回数学函数SQRT的值 | |
参数名称 | 参数类型 | 说明 |
V | Double/int | 输入值 |
返回值 | Double/int | |
示例 | 获取数据项A的SQRT值 SQRT ({A}) |
Contains
函数说明 | 返回子对象是否在父对象中存在 | |
参数名称 | 参数类型 | 说明 |
Parent | Object[] | 数组 |
Child | Object | 子对象 |
返回值 | Child是否为Parent的子成员 | |
示例 |
Shrink
函数说明 | 删除指定数组中重复的数据 | |
参数名称 | 参数类型 | 说明 |
Parent | Object[] | 数组 |
返回值 | Object[] | |
示例 | 例如数组数据项A:1,2,1,3,2,5 Shrink({A}),结果:1,2,3,5 |
参与者函数
参与者函数
StartsWith
函数说明 | 数据项1是否以数据项2开始 | |
参数名称 | 参数类型 | 说明 |
String1 | string | 数据项1 |
String2 | string | 数据项2 |
返回值 | Bool | |
示例 | StartsWith(String,String) |
FindPostByCode
函数说明 | 通过角色编码和组织类型编码查找用户 | |
参数名称 | 参数类型 | 说明 |
Unit | SingleParticipant;MultiParticipant; | 指定组织 |
OrgPostCode | ShortString; | 指定的角色编码 |
[CategoryCode] | ShortString; | 指定的组织类型编码 |
返回值 | ||
示例 | FindPostByCode({Unit}, "OrgPostCode","CategoryCode") |
FindManagerByCategoryCode
函数说明 | 根据组织类型编码查找经理 | |
参数名称 | 参数类型 | 说明 |
Unit | SingleParticipant;MultiParticipant; | UnitID |
CategoryCode | ShortString | 组织类型编码 |
返回值 | ||
示例 | FindManagerByCategoryCode({Originator}, "CategoryCode") |
GetMembers
函数说明 | 获取指定组织的所有成员 | |
参数名称 | 参数类型 | 说明 |
Parent | SingleParticipant;MultiParticipant; | 指定组织 |
返回值 | 返回指定组织的所有成员,string[]; | |
示例 |
IsMemberOf
函数说明 | 判定一个组织对象是否是另外一个组织对象的子成员 | |
参数名称 | 参数类型 | 说明 |
Child | SingleParticipant; | 子成员组织 |
Parent | SingleParticipant | 父组织 |
返回值 | Bool,返回Child是否是Parent的子成员 | |
示例 |
ManagerByEmployeeRank
函数说明 | 获取指定组织在组织架构中指定员工级别的经理 | |
参数名称 | 参数类型 | 说明 |
Unit | SingleParticipant;MultiParticipant; | 指定组织 |
Level | int | 指定员工级别 |
返回值 | String[] | |
示例 | 返回张三的上级经理中,级别是3的用户 ManagerByEmployeeRank({Originator},3) |
MangagerByUnitLevel
函数说明 | 获取指定组织在组织架构中指定目录层次级别的经理 | |
参数名称 | 参数类型 | 说明 |
Unit | SingleParticipant;MultiParticipant; | 指定组织 |
Level | Int; | 指定目录层次级别 |
返回值 | ||
示例 | ManagerByUnitLevel(FinanceDept, 3) |
ManagerOf
函数说明 | 获取指定用户的上级经理 | |
参数名称 | 参数类型 | 说明 |
UserId | SingleParticipant;MultiParticipant; | 指定用户id |
返回值 | ||
示例 | ManagerOf(User) |
OUManagerOf
函数说明 | 获取指定组织或指定用户所在组织的上级经理 | |
参数名称 | 参数类型 | 说明 |
Unit | SingleParticipant;MultiParticipant; | 指定组织 |
返回值 | ||
示例 | OUManagerOf(FinanceDept) |
ParentPostByLevelRange
函数说明 | 查找指定级别区间的上级角色 | |
参数名称 | 参数类型 | 说明 |
UserId | SingleParticipant;MultiParticipant; | 起始角色ID |
PostCode | ShortString | 角色编码 |
StartLevel | Int | 起始角色层级 |
EndLevel | Int | 截至角色层级 |
CategoryCode | ShortString | |
返回值 | ||
示例 | ParentPostByLevelRange(UserID, PostCode,StartLevel,EndLevel,CategoryCode) |
ParentPostOf
函数说明 | 获取指定角色的上级角色 | |
参数名称 | 参数类型 | 说明 |
UnitID | SingleParticipant;MultiParticipant; | 指定组织 |
OrgPostCode | ShortString; | 指定的角色编码 |
[CategoryCode] | ShortString; | 指定的组织类型 |
返回值 | String[] | |
示例 | ParentPostOf({UserID,PostCode,CategoryCode}) |
RecursivePostOf
函数说明 | 获取递归上级岗位直到某个岗位级别的所有用户 | |
参数名称 | 参数类型 | 说明 |
Post | SingleParticipant;MultiParticipant; | 指定组织 |
Interval | Int | 递归结束的上级岗位级别 |
返回值 | String[] | |
示例 | 实习生岗位上级岗位工程师,工程师上级岗位主管,主管上级岗位经理 实习生岗位级别是1,工程师级别2,主管级别3,经理级别4 递归实习生上级岗位到3的用户 ParentPostByLevel({实习生岗位},3),返回结果:工程师、主管 |
RecursiveManagersOf
函数说明 | 获取指定用户递归上级经理到指定员工级别的经理的集合 | |
参数名称 | 参数类型 | 说明 |
Unit | SingleParticipant;MultiParticipant; | 指定组织 |
Level | Int | 指定员工级别 |
返回值 | ||
示例 | RecursiveManagersOf(FinanceDept, 3) |
SecretaryOf
函数说明 | 获取指定用户的秘书 | |
参数名称 | 参数类型 | 说明 |
User | SingleParticipant;MultiParticipant; | 指定用户 |
返回值 | String | |
示例 | 张三的秘书是王二 SecretaryOf({张三}),返回:王二 |
ExecuteBizService
函数说明 | 执行业务服务方法获取返回值,使用方式:ExecuteBizService("业务服务名称","业务方法名称",参数1,...参数N) | |
参数名称 | 参数类型 | 说明 |
ServiceName | String | 业务服务名称 |
MethodName | String | 业务方法名称 |
返回值 | ||
示例 | ExecuteBizService("ServiceCode","MethodName",{Originator}) |
参与者函数-场景说明
1 根据负责范围查询角色
函数信息
名称:FindPostByCode
参数1:Unit(指定组织)
参数2:OrgPostCode(指定角色编码)
参数3:CategoryCode(指定组织类型编码)
函数说明:
递归查询组织Unit的上级组织,直至某个上级组织的组织类型为CategoryCode,如果不存在,则查询至组织树顶点。将此上级组织或顶点,记为组织A。
在组织Unit至组织A的链式组织结构中,查询角色OrgPostCode的成员集B。
查询成员集B中角色管理范围包含组织Unit的成员,将查询结果的成员集返回
函数场景举例:
财务部有三个出纳角色 分别负责 华南 华东 华北 大区。华北区下属的某个销售组的成员提交申请时,查询逻辑为此销售部向上查询部门直至组织类型为 大区 ,最终找到华北区 然后找到负责华北区的出纳
2 根据所在组织查询角色
函数:FindPostByCategoryCode
参数1:Unit(指定组织)
参数2:OrgPostCode(指定角色编码)
参数3:CategoryCode(指定组织类型编码)
函数说明:
递归查询组织Unit的上级组织,直至某个上级组织的组织类型为CategoryCode,如果不存在,则查询至组织树顶点。将此上级组织或顶点,记为组织A。
在以组织A为顶点的组织树结构中,查询角色OrgPostCode的成员集,将查询结果返回。
函数场景举例:
华东、华南、华北大区 分别都有自己的公文管理员,分别属于各大区下设的公文管理部,华东区下某开发小组的成员提交申请时,查询逻辑为 从此开发小组向上查找至组织类型为大区的组织,即华东区,然后向下查询,华东区及下属各个下级部门的成员,找到该区下的公文管理员。
3 根据组织类型查询组织某个层级的负责人
函数名:FindManagerByCategoryCode
参数1:Unit(指定组织)
参数2:CategoryCode(指定组织类型编码)
函数说明:
如果组织Unit的组织类型为CategoryCode,返回Unit的负责人;否则逐级查询Unit对应的上级组织,直至某个上级组织的组织类型为CategoryCode,返回这个组织的负责人;如果没有对应组织类型的组织,返回null
场景举例:
华东、华南、华北 三个大区,各区下的员工请假超过3天都需要区总进行审批。华东区下某销售部员工请3天假,查询逻辑为从该部门向上查询组织,直到查询到组织类型为“大区”的部门(华东区),然后查询该区的负责人
4 查询指定组织的成员
函数名:GetMembers
参数:Unit(指定组织)
函数说明:
查询参数组织的成员
5 判断子对象是否为父对象的子成员
函数名:IsMemberOf
参数1:Child(子成员对象,可以是OU/员工)
参数2:Parent(父组织对象,可以是组/OU)
函数说明:
判断子对象是否为父对象的子成员,通常与IFF函数结合使用。
场景举例:
如公司一般部门的汇报由副总进行审批,财务部的汇报由总经理审批
6 查询某部门负责人的指定级别的上级
函数名:ManagerByEmployeeRank
参数1:Unit(指定组织)
参数2:Level(指定级别)
函数说明:
查询组织Unit的负责人,再递归查询其上级,直至某个人的员工职级在Level之上(该员工的员工职级<= Level),返回该人。
PS:
员工职级有管理员用户在员工信息中进行设置,职级内容为数字,1为最高。函数执行是第一个被查询到的员工职级小于/等于level的员工将被返回
7 返回某组织指定层级的上级组织的负责人
函数名:ManagerByUnitLevel
参数1:Unit(指定组织类型)
参数2:Level(指定级别)
函数说明:
从组织Unit向上递归查询,直至某组织的组织层级小于等于Level,返回其负责人。
PS:组织层级由系统自动判断,公司顶点的组织层级为0,向下依次加1。
场景举例:华东区下属销售部门员工A申请请假,需要华东区负责人进行审批,查询逻辑为从员工A所在部门向上查询,直至组织类型为“大区”(华东区),查询该部门的负责人。
按照公司的组织结构,顶点部门level为0,向下依次递增。
8 查询指定人员的上级
函数名:ManagerOf
参数:User(指定人员)
函数说明:
查询指定人员User的上级,如果没有上级,找所在部门负责人
9 查询某部门的负责人
函数名:OUManagerOf
参数:Unit(指定组织)
函数说明:
查询组织Unit的负责人
10 查询某组织范围内某角色指定层级区间角色的成员
函数名:ParentPostByLevelRange
参数1:Unit(指定组织)
参数2:PostCode(角色编码)
参数3:StartLevel(起始角色层级)
参数4:EndLevel(截止角色层级)
参数5:CategoryCode(组织类型)
函数说明:
将组织Unit上级组织中第一个组织类型编码为CategoryCode的组织或顶点组织为顶点的树形组织结构,记为查询范围A。
递归查询角色PostCode的所有上级角色,获得角色层级在StartLevel和EndLevel区间内的角色集合,记为集合B。
在范围A中,查询所有集合B中角色的成员。
11 查询某角色上级角色的成员
函数名:ParentPostOf
参数1:Unit(指定组织)
参数2:PostCode(角色编码)
参数3:CategoryCode(组织类型编码)
函数说明:
查询角色PostCode的上级角色成员
查询范围为:组织Unit上级组织中第一个组织类型编码为CategoryCode的组织或顶点组织为顶点的树形组织结构
查询范围中中,角色PostCode的上级角色的成员
12 递归上级角色到指定级别
函数名:RecursivePostOf
参数1:Unit(指定组织)
参数2:PostCode(角色编码)
参数3:Interval(截止角色层级)
参数3:CategoryCode(组织类型编码)
函数说明:
递归上级角色到指定级别
查询范围为:组织Unit上级组织中第一个组织类型编码为CategoryCode的组织或顶点组织为顶点的树形组织结构
13 RecursiveManagersOf
函数名:RecursiveManagersOf
参数1:Unit(指定组织)
参数2:Level(指定员工级别)
函数说明:
获取指定用户递归上级经理到指定员工级别的经理的集合
问题:报异常
14 获取指定用户的秘书
函数名:SecretaryOf
参数:User(指定用户)
函数说明:
获取用户User的秘书
15 调用业务服务中的方法
函数名:ExecuteBizService
参数1:ServiceName(业务服务方法的服务编码)
参数2:MethodName(业务方法名称)
参数3:Param(方法参数,多个之间用“,”隔开)
函数说明:执行业务服务方法,获取返回值。
运算符
运算符包含:+、-、*、/、=、>、>=、<、<=、==、!=、&&、||、!、(、)。
历史版本
系统会将每次发布的流程版本进行保存,可以在流程模板的历史版本菜单中进行查看。系统会将每次发布的流程版本进行保存,可以在流程模板的历史版本菜单中进行查看。
点击【查看】按钮,可以打开选定的历史版本,如下图所示点击【查看】按钮,可以打开选定的历史版本,如下图所示
历史版本允许重新发布,并且设置为当前最新版本。
流程模拟
当流程设计好发布以后,我们可以建立一些模拟数据,让流程按照不同身份的用户自动发起和运行,以检测在不同用户、不同的系统参数情况下,流程的运行情况是否正确。该功能可以大大减少人工对流程测试的时间和准确性。
流程模拟操作:
1. 首先增加测试用例,填写预设测试数据。
2. 在测试用例页面可以勾选需要运行的用例进行运行。
3. 运行结束后,点击【查看历史】可查看单个用例实例信息。点击【查看详情】可查看用例运行的流程状态。
4. 支持导入历史流程实例作为模拟用例,输入历史流程表单流水号,点击【导入】-【保存】,即可导入该表单的相关数据信息作为一个新的模拟用例使用。
5. 测试用例增加完后,在测试用例集页面,【添加测试集】,在已建的用例中勾选需要的用例组合为用例集。
6. 选择需要运行的用例集,点击【运行】,运行结束后,点击【查看报告】
测试报告显示测试用例总数,用例集的用例通过率。报告列表显示每个用例的详细情况,包括用户总环节数,可忽略环节数,通过环节数,不通过的环节数以及通过率。
通过环节数:实际参与者与预设参与者匹配的环节
不通过的环节数:实际参与者与预设参与者不匹配的环节,排除可忽略的环节
可忽略环节数:勾选了可忽略或者没有预设参与者的环节
环节通过率:通过率=通过环节数/(总环节数—可忽略环节数)
7. 点击【查看详情】可以查看到流程具体通过与不通过环节的信息。
运行参数
1 一般设置
显示名称,设置在发起流程界面中的流程显示名称;
默认版本号,从已发布的所有版本中选择一个默认使用的版本号,一般是最新发布的版本为默认版本号;
排序码,设置流程在流程包中显示的顺序;
启用,设置当前流程模板是否启用状态;
移动办公可发起,设置当前流程是否允许在移动办公发起,该设置需要与移动办公一起使用。
工作日历,设置流程模板绑定的工作日历,该功能需要先在【系统参数】-【工作日历】中设置好工作日历;
异常管理员,设置当前流程出现异常时会将任务默认发给流程异常管理员。当活动节点未找到参与者,并且未做策略处理时,那么系统将会把任务给到流程异常管理员,如果未设置流程异常管理员那么将给到系统异常管理员(注:在系统参数一般参数设置)。
流水号代码,设置当前流程生成流水号的代码,例如BX,那么流水号规则包含流程代码时,该类型流程流水号将包含BX关键词,该设置需要在【系统参数】-【常规参数设置】中流程实例流水号模式设置为Template时有效。
流水号重置策略,可以支持天、周、月、年的周期进行流水号重置。该设置需要在【系统参数】-【常规参数设置】中流程实例流水号模式设置为Template时有效。
2 流程发起权限
允许按照OU、组、用户、群组等不同类型的组织进行设置流程的发起权限。这里需要注意,每个发布的流程,会自动默认分配给所有组织有发起权限,如果需要进行发起权限控制,需要删除系统默认给的发起权限;
流程配置实例—请假流程
1、点击目录, 点击创建流程包,输入编码和显示名称,点击保存,生成流程包。
2、添加数据项:包括申请人,部门请假类型、原型、时间等,不同数据项需要不用类型,如申请人就需要参与者类型,请假时间就是日期类型,审批是审批意见类型等。
数据项添加后,点击保存、检验、发布。一定要发布后才可以继续。
3、流程设计
设置节点的信息,点击保存,检验,发布。
手工节点设置:
审批节点:
参与者设置为申请人的经理,使用函数managerof({Originator})
4、表单设置:
1)设置控件类型,请假类型的空间类型修改为下拉列表( SheetDropDownList)形式,并使用数据字典的请假类型。数据字典在系统参数中配置。
其他控件不修改,点击保存、预览,预览表单内容。
配置完成后,在前台发起流程中,即可查看到请假流程。