Gemini.Workflow 双子工做流,是一套功能强大,使用简单的工做流,简称双子流,目前配套集成在Aries框架中。后端
下面介绍本篇教程:定义流程:流程节点、迁移条件参数配置。app
先介绍这个,是由于普通节点,拥有全部的配置,其它类型的节点(会根据类型,隐藏或减小相应的配置)框架
因此介绍这个,就等于把全部的可配置项都介绍完了。ide
点击不一样的地方,右侧会出现不一样的配置项。 spa
下面看普通节点的配置项:设计
步骤名称(这个是能够更改的,在表单上若是想经过API控制节点,通常也是经过节点名称控制,固然ID也能够)3d
其它都是默认的便可。code
能够指定多种形式的参与者类型。blog
上下级部门角色参与者:这个通常配合自循环节点使用。继承
若是选择的是角色类型:还能够指定是否进一步根据组织部门进行过滤。
组织部门的过滤类型:
在表单页,也能够由系统提供的表单API控制参与者。
能够指定退回的类型。
当退回方式,选择为:任意历史可退步骤时,
默认是任意历史,若是要限制在某几个节点:能够在下面任意历史可退步骤指定节点名称,多个用逗号分隔。
除了此处,也须要总开关(流程图属性)已打开。
通常来讲,路由属性是【发散网关节点、聚合网关节点】的专属属性。
不过全部节点都集成这个属性,因此上篇对节点的介绍,才有那么一句话:
能够指定只选择一条路线、任意路线、所有路线。
当指定为全选时,即为特殊的会签类型(之前有会签分支,去掉了,简约才是硬道理)
当类型为条件聚合时,由迁移条件决定。
当传阅类型为自动传阅时,能够设置自动传阅的用户。
点击,在弹出的窗口中,选择子流程便可。
配置名称为:类全名,程序集名称
代码类继承自:ISubWorflow,示例代码:
public class ISubWorkflowDemo : ISubWorkflow { string appID = "DB"; public string Start(Choice parentChoice) { //Gemini.Workflow //后端提供的API代码,以WF开头 //启动新的流程 WorkflowContext startContext = WF.Context.GetOnNoInstance(appID);//启动HX定义的流程 //指定新的流程的父流程ID(及所在的节点实例ID) startContext.Instance.MainInstanceID = parentChoice.Context.InstanceID.ToString(); startContext.Instance.MainActivityInstanceID = parentChoice.Current.ActivityInstance.ActivityInstanceID.ToString();// startContext.Instance.InstanceTitle = "哥要启动一个新的工单了,快去待办看看吧!"; Choice choice = new Choice() { Command = Command.Start, Context = startContext }; choice.Current.UserList.Add(WF.User.Current);//发送给当前用户好了。 if (WF.Run.Execute(choice)) { //启动后,返回新的工做流实例ID。 return startContext.Instance.InstanceID.ToString(); } return ""; } public bool Invalid(ActivityInstance parentActivityInstance) { //回收子流程 WorkflowContext context = WF.Context.GetOnNoInstance(appID); context.Opinion = "父流程回收,子流程要做废了!"; Choice choice = new Choice() { Command = Command.Invalid, Context = context }; if (WF.Run.Execute(choice)) { return true; } return false; } }
当下一节点的聚合条件为:条件聚合时,迁移条件发生做用。
一、指定是否必参与迁移:该分支是否必须到达。
二、分组名:同名即为一组,同时约束同一组最少到达分支数(若是同一组,即设置了不一样的到达分支数,默认取第一个)
三、备注,用于描述迁移线的做用,(若是是和业务相关,则由业务表单控制)
如:
上面的流程中,会根据业务条件决定不一样的分支,流程图上只做备注,具体由业务表单控制,示例表单中的代码以下:
<script defer="defer"> //控制分支条件 WF.Button.Submit.onBeforeExecute = function () { if (WF.Context.appID == "DC") { if (parseInt($("#Amount").val()) > 50000) { WF.Actor.hideActivity("可选:B"); } else { //WF.Actor.Internal. WF.Actor.hideActivity("可选:A"); //同时控件节点B的用户修改成指定的名称。 WF.Actor.setActivityUser("可选:B", "admin"); } } } </script>
流程设计好后,只须要点一下保存: