workflow core在项目中的使用与实践(三)创建流程模板

创建企业审核流程模板

GitHub地址:https://github.com/gishys/Hx.Workflow

名词解释

流程模板:ProcessModel、ProcessDefinition,上述的流程模板称为流程定义。

流程步骤:每个流程定义都包含若干个流程节点(步骤)ProcessNode、ProcessStep,节点包含一个StartStep、包含一个StopStep和若干个ExecuteStep执行节点。

模板变量:流程整个生命周期中流转的变量,在流程定义中可以成为全局变量,流程创建时定义并传入,在流程定义中有些流程变量为必须有的字段,如果没有则流程实例创建,流程流转中会报错。

流程实例:ProcessInstance,通过流程定义创建的实例叫做流程实例。

步骤体定义

步骤结构

    步骤体用于定义步骤,DisplayName为显示名称,Name步骤体名称,一般作为查询条件(唯一标识),TypeFullName、AssemblyFullName为预先定义好的步骤执行类(编写执行逻辑代码)的类型名与程序集名称,Inputs为步骤体参数;步骤体参数用于定义步骤参数(节点参数),Key为参数名称,Value为参数值(可以为变量、固定值、函数,变量如:data.Key、step.Key其中data代表流程参数,step代表步骤参数;函数如:DateTime.Now(),固定值如:"固定值"、1等),DisplayName为参数描述,StepBodyParaType为参数类型,分为输入参数与输出参数,输入为外部输入赋值给模板参数,输出为步骤参数赋值给模板参数。

    通过Id、Version、Titile等属性来定义流程模板(定义),其中Id作为模板的唯一标识,Version可以设置不同的版本,Titile为流程标题,Color、ICon来用户显示流程模板(如果通过配置文件不使用界面流程图来定义则不需要),Description为流程的描述及适用场景,Nodes为流程步骤(节点)。

    流程步骤在流程模板中为数组,一个流程模板可以包含多个流程步骤,Id为唯一标识,Version控制版本,Name为流程名称(通常为英文或字母),DisplayName显示名称,StepNodeType分为三中类型开始节点、执行节点、结束节点,Position存储位置信息(界面流程图中屏幕位置),StepBodyId为流程步骤的定义(体),NextNodes为转移条件集合。

    步骤体用于定义步骤,DisplayName为显示名称,Name步骤体名称,一般作为查询条件(唯一标识),TypeFullName、AssemblyFullName为预先定义好的步骤执行类(编写执行逻辑代码)的类型名与程序集名称,Inputs为步骤体参数;步骤体参数用于定义步骤参数(节点参数),Key为参数名称,Value为参数值(可以为变量、固定值、函数,变量如:data.Key、step.Key其中data代表流程参数,step代表步骤参数;函数如:DateTime.Now(),固定值如:"固定值"、1等),DisplayName为参数描述,StepBodyParaType为参数类型,分为输入参数与输出参数,输入为外部输入赋值给模板参数,输出为步骤参数赋值给模板参数。

    NextNodes(转换链接),NextNodeName为(同一个流程模板内)下一步骤(节点)的Name,通过NextNodeName来查找下一步骤(节点),如果为空则流程结束;WkConNodeConditions为转移条件集合,Field为条件左参数,Operator为操作操作符如果值类型为String则表达式只能为==或者!=,Value为表达式值。

    Position为使用流程图设计器设计流程时记录流程步骤的屏幕位置信息。

创建流程模板

请求参数

    流程模板(流程定义)介绍查看上一篇博文的(流程结构设计-基于workflow core、创建流程模板(定义)章节)。

  1 {
  2   "version": 1,
  3   "title": "企业用户注册",
  4   "icon": "icon.jpg",
  5   "color": "red",
  6   "discription": "用于互联网+企业用户注册",
  7   "nodes": [
  8     {
  9       "name": "Start",
 10       "displayName": "开始",
 11       "stepNodeType": 1,
 12       "version": 1,
 13       "sortNumber": 0,
 14       "wkStepBodyId": "",
 15       "position": [
 16         {
 17           "left": 10,
 18           "right": 30,
 19           "top": 10,
 20           "bottom": 30
 21         }
 22       ],
 23       "nodeFormType": 1,
 24       "nextNodes": [
 25         {
 26           "nextNodeName": "Receive"
 27         }
 28       ]
 29     },
 30     {
 31       "name": "Receive",
 32       "displayName": "收件受理",
 33       "stepNodeType": 2,
 34       "version": 1,
 35       "sortNumber": 2,
 36       "wkStepBodyId": "917ac78c-83f5-a8e2-5f85-39fc6cb17d64",
 37       "position": [
 38         {
 39           "left": 10,
 40           "right": 30,
 41           "top": 10,
 42           "bottom": 30
 43         }
 44       ],
 45       "nodeFormType": 1,
 46       "nextNodes": [
 47         {
 48           "nextNodeName": "PrimaryAudit"
 49         }
 50       ]
 51     },
 52     {
 53       "name": "PrimaryAudit",
 54       "displayName": "审核",
 55       "stepNodeType": 2,
 56       "version": 1,
 57       "sortNumber": 4,
 58       "wkStepBodyId": "917ac78c-83f5-a8e2-5f85-39fc6cb17d64",
 59       "position": [
 60         {
 61           "left": 10,
 62           "right": 30,
 63           "top": 10,
 64           "bottom": 30
 65         }
 66       ],
 67       "nodeFormType": 1,
 68       "nextNodes": [
 69         {
 70           "nextNodeName": "Receive",
 71           "wkConNodeConditions": [
 72             {
 73               "field": "DecideBranching",
 74               "operator": "==",
 75               "value": "Receive"
 76             }
 77           ]
 78         },
 79         {
 80           "nextNodeName": "End",
 81           "wkConNodeConditions": [
 82             {
 83               "field": "DecideBranching",
 84               "operator": "==",
 85               "value": "End"
 86             }
 87           ]
 88         }
 89       ]
 90     },
 91     {
 92       "name": "End",
 93       "displayName": "结束",
 94       "stepNodeType": 3,
 95       "version": 1,
 96       "sortNumber": 4,
 97       "wkStepBodyId": "",
 98       "position": [
 99         {
100           "left": 10,
101           "right": 30,
102           "top": 10,
103           "bottom": 30
104         }
105       ],
106       "nodeFormType": 1
107     }
108   ]
109 }
View Code

    此流程分为开始、企业用户申请、管理员审核、结束四个节点。

接口描述

 返回参数

返回状态204,返回值null。

查询流程模板

请求参数

    通过流程模板的Title属性来查询流程模板。

接口描述

返回参数

  1 {
  2   "version": 1,
  3   "title": "企业用户注册",
  4   "limitTime": null,
  5   "wkDefinitionState": 1,
  6   "icon": "icon.jpg",
  7   "color": "red",
  8   "groupId": null,
  9   "discription": "用于互联网+企业用户注册",
 10   "sortNumber": 0,
 11   "tenantId": null,
 12   "nodes": [
 13     {
 14       "wkStepBodyId": null,
 15       "wkDefinitionId": "56d854a6-ff19-0c5c-e432-39fc6cc056f5",
 16       "name": "Start",
 17       "displayName": "开始",
 18       "stepNodeType": 1,
 19       "version": 1,
 20       "limitTime": null,
 21       "stepBody": null,
 22       "position": [],
 23       "nodeFormType": 1,
 24       "applicationForms": [],
 25       "nextNodes": [
 26         {
 27           "label": "",
 28           "nextNodeName": "Receive",
 29           "wkConNodeConditions": []
 30         }
 31       ]
 32     },
 33     {
 34       "wkStepBodyId": "917ac78c-83f5-a8e2-5f85-39fc6cb17d64",
 35       "wkDefinitionId": "56d854a6-ff19-0c5c-e432-39fc6cc056f5",
 36       "name": "Receive",
 37       "displayName": "收件受理",
 38       "stepNodeType": 2,
 39       "version": 1,
 40       "limitTime": null,
 41       "stepBody": {
 42         "name": "FixedUserAudit",
 43         "displayName": "指定用户审核",
 44         "inputs": [
 45           {
 46             "wkNodeId": "917ac78c-83f5-a8e2-5f85-39fc6cb17d64",
 47             "key": "DecideBranching",
 48             "stepBodyParaType": 1,
 49             "name": "DecideBranching",
 50             "displayName": "审核人",
 51             "value": "step.DecideBranching"
 52           },
 53           {
 54             "wkNodeId": "917ac78c-83f5-a8e2-5f85-39fc6cb17d64",
 55             "key": "UserId",
 56             "stepBodyParaType": 0,
 57             "name": "UserId",
 58             "displayName": "审核人",
 59             "value": "data.UserId"
 60           }
 61         ],
 62         "typeFullName": "Hx.Workflow.Application.StepBodys.GeneralAuditingStepBody",
 63         "assemblyFullName": "Hx.Workflow.Application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
 64       },
 65       "position": [],
 66       "nodeFormType": 1,
 67       "applicationForms": [],
 68       "nextNodes": [
 69         {
 70           "label": "",
 71           "nextNodeName": "PrimaryAudit",
 72           "wkConNodeConditions": []
 73         }
 74       ]
 75     },
 76     {
 77       "wkStepBodyId": "917ac78c-83f5-a8e2-5f85-39fc6cb17d64",
 78       "wkDefinitionId": "56d854a6-ff19-0c5c-e432-39fc6cc056f5",
 79       "name": "PrimaryAudit",
 80       "displayName": "审核",
 81       "stepNodeType": 2,
 82       "version": 1,
 83       "limitTime": null,
 84       "stepBody": {
 85         "name": "FixedUserAudit",
 86         "displayName": "指定用户审核",
 87         "inputs": [
 88           {
 89             "wkNodeId": "917ac78c-83f5-a8e2-5f85-39fc6cb17d64",
 90             "key": "DecideBranching",
 91             "stepBodyParaType": 1,
 92             "name": "DecideBranching",
 93             "displayName": "审核人",
 94             "value": "step.DecideBranching"
 95           },
 96           {
 97             "wkNodeId": "917ac78c-83f5-a8e2-5f85-39fc6cb17d64",
 98             "key": "UserId",
 99             "stepBodyParaType": 0,
100             "name": "UserId",
101             "displayName": "审核人",
102             "value": "data.UserId"
103           }
104         ],
105         "typeFullName": "Hx.Workflow.Application.StepBodys.GeneralAuditingStepBody",
106         "assemblyFullName": "Hx.Workflow.Application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
107       },
108       "position": [],
109       "nodeFormType": 1,
110       "applicationForms": [],
111       "nextNodes": [
112         {
113           "label": "",
114           "nextNodeName": "Receive",
115           "wkConNodeConditions": [
116             {
117               "field": "DecideBranching",
118               "operator": "==",
119               "value": "Receive"
120             }
121           ]
122         },
123         {
124           "label": "",
125           "nextNodeName": "End",
126           "wkConNodeConditions": [
127             {
128               "field": "DecideBranching",
129               "operator": "==",
130               "value": "End"
131             }
132           ]
133         }
134       ]
135     },
136     {
137       "wkStepBodyId": null,
138       "wkDefinitionId": "56d854a6-ff19-0c5c-e432-39fc6cc056f5",
139       "name": "End",
140       "displayName": "结束",
141       "stepNodeType": 3,
142       "version": 1,
143       "limitTime": null,
144       "stepBody": null,
145       "position": [],
146       "nodeFormType": 1,
147       "applicationForms": [],
148       "nextNodes": []
149     }
150   ]
151 }
View Code
原文地址:https://www.cnblogs.com/GiserPage/p/14756174.html