workflow-engine-web/flowable-engine-web/docs/assets/js/14.b7ae6679.js

1 line
14 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{397:function(t,s,a){"use strict";a.r(s);var e=a(27),n=Object(e.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"服务端开发指南"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#服务端开发指南"}},[t._v("#")]),t._v(" 服务端开发指南")]),t._v(" "),a("p",[t._v("目前只开源了前端设计器部分,大家配套后端使用的话,需要自行开发服务端应用,可以参考如下说明")]),t._v(" "),a("h2",{attrs:{id:"基本要求"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#基本要求"}},[t._v("#")]),t._v(" 基本要求")]),t._v(" "),a("h3",{attrs:{id:"组织机构选择器"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#组织机构选择器"}},[t._v("#")]),t._v(" 组织机构选择器")]),t._v(" "),a("p",[t._v("组织机构选择器由于在项目很多地方引用了,如果在不修改组件代码的情况下,建议按如下规则适配")]),t._v(" "),a("blockquote",[a("p",[t._v("该组件存在于 "),a("code",[t._v("src\\components\\common\\organizationPicker.vue")]),t._v("对应API接口在 "),a("code",[t._v("src/api/org.js")]),t._v("有2个接口分别如下")])]),t._v(" "),a("h4",{attrs:{id:"获取组织架构列表"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#获取组织架构列表"}},[t._v("#")]),t._v(" 获取组织架构列表")]),t._v(" "),a("p",[t._v("方法: "),a("code",[t._v("getOrgTree")])]),t._v(" "),a("p",[t._v("URL"),a("code",[t._v("/oa/org/tree")])]),t._v(" "),a("p",[t._v("请求类型:"),a("code",[t._v("GET")])]),t._v(" "),a("p",[t._v("参数:")]),t._v(" "),a("ul",[a("li",[t._v("deptId 当前选中的部门ID")]),t._v(" "),a("li",[t._v("type"),a("code",[t._v("user")]),t._v(" - 返回部门和部门内的人员 "),a("code",[t._v("dept")]),t._v("-只返回部门 "),a("code",[t._v("role")]),t._v("-只返回系统角色")])]),t._v(" "),a("p",[t._v("返回结果:(部门和人员结构一致,注意部门应当排序在前)")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"部门/人员ID"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"部门/人员名"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"avatar"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"人员的头像的 base64 / url"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"本数据对象的类型user/dept"')]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("h4",{attrs:{id:"按拼音-姓名搜索人员"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#按拼音-姓名搜索人员"}},[t._v("#")]),t._v(" 按拼音/姓名搜索人员")]),t._v(" "),a("blockquote",[a("p",[t._v("当在搜索框直接输入拼音/姓名时,将会发起搜索请求,后端应当根据参数内容匹配用户的姓名或者姓名拼音")])]),t._v(" "),a("p",[t._v("方法: "),a("code",[t._v("getUserByName")])]),t._v(" "),a("p",[t._v("URL"),a("code",[t._v("oa/org/tree/user/search")])]),t._v(" "),a("p",[t._v("请求类型:"),a("code",[t._v("GET")])]),t._v(" "),a("p",[t._v("参数:")]),t._v(" "),a("ul",[a("li",[t._v("userName搜索参数")])]),t._v(" "),a("p",[t._v("返回结果:(人员列表)")]),t._v(" "),a("div",{staticClass:"language-json line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-json"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"id"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"人员ID"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"人员名"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n\t\t"),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"avatar"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"人员的头像的 base64 / url"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token property"}},[t._v('"type"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"本数据对象的类型user"')]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("h2",{attrs:{id:"流程解析"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#流程解析"}},[t._v("#")]),t._v(" 流程解析")]),t._v(" "),a("p",[t._v("流程的数据存储在 vuex的 "),a("code",[t._v("state.design.process")]),t._v("中由于序列化后是json结构非标准 Bpmn因此需要在后端做转换也建议在后端进行转换。")]),t._v(" "),a("p",[t._v("最常用的Java开源流程引擎有 "),a("code",[t._v("activiti")]),t._v(" 、"),a("code",[t._v("Flowable")]),t._v(" 两者同源差不多用法都提供了使用代码Api来构建Xml的功能。")]),t._v(" "),a("h3",{attrs:{id:"wflow节点与bpmn概念对应关系"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#wflow节点与bpmn概念对应关系"}},[t._v("#")]),t._v(" wflow节点与Bpmn概念对应关系")]),t._v(" "),a("h4",{attrs:{id:"发起人"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#发起人"}},[t._v("#")]),t._v(" 发起人")]),t._v(" "),a("p",[a("code",[t._v("发起人")]),t._v(" 可以映射为"),a("code",[t._v("startEvent")]),t._v(",也可以忽略,发起人主要是为了设置哪些人可以发起该流程,也就是该流程的权限,并且也是默认的候选条件")]),t._v(" "),a("h4",{attrs:{id:"审批人"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#审批人"}},[t._v("#")]),t._v(" 审批人")]),t._v(" "),a("p",[t._v("审批人对应 "),a("code",[t._v("UserTask")]),t._v(" ,该节点是需要审批人对发起人提交的表单进行处理,以及如果有需要的话也可以修改提交的表单(要设置表单可编辑权限)")]),t._v(" "),a("p",[t._v("审批意味着主要是做两件事,"),a("code",[t._v("同意/驳回")]),t._v(" ,同意就进入下一任务, 而驳回的策略有两种,默认直接驳回到"),a("code",[t._v("EndEvent")]),t._v(" ,如果设置了则驳回到指定节点因为有2种结果分流所以此处应该设置条件顺序流。")]),t._v(" "),a("h4",{attrs:{id:"抄送人"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#抄送人"}},[t._v("#")]),t._v(" 抄送人")]),t._v(" "),a("p",[t._v("抄送人对应 "),a("code",[t._v("ServiceTask")]),t._v("应当掉用java指定的功能类传入参数执行发送通知的功能")]),t._v(" "),a("h4",{attrs:{id:"延时处理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#延时处理"}},[t._v("#")]),t._v(" 延时处理")]),t._v(" "),a("p",[t._v("延时处理对应 "),a("code",[t._v("intermediateCatchEvent")]),t._v(",设置为定时器类型的中间事件,根据配置解析")]),t._v(" "),a("h4",{attrs:{id:"触发器"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#触发器"}},[t._v("#")]),t._v(" 触发器")]),t._v(" "),a("p",[t._v("触发器对应 "),a("code",[t._v("ServiceTask")]),t._v("应当掉用java指定的功能类传入参数执行Http请求或者发邮件由于触发器支持脚本因此要完全支持触发器功能的话需要引入"),a("code",[t._v("js执行器")])]),t._v(" "),a("p",[a("strong",[t._v("务必设置运行资源限制,防止用户上传恶意脚本搞崩服务器。")])]),t._v(" "),a("div",{staticClass:"language-xml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("\x3c!-- https://mvnrepository.com/artifact/org.openjdk.nashorn/nashorn-core --\x3e")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dependency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("org.openjdk.nashorn"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("groupId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("nashorn-core"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("artifactId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("15.3"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("</")]),t._v("dependency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("h4",{attrs:{id:"条件分支"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#条件分支"}},[t._v("#")]),t._v(" 条件分支")]),t._v(" "),a("p",[t._v("条件节点对应 "),a("code",[t._v("exclusive gateway")]),t._v(" ,这与普通节点有所不同")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://pic.rmb.bdstatic.com/bjh/fec7f2894a598c5b50f930b3f64ac93c.png",alt:"image-20220720145227591"}})]),t._v(" "),a("p",[t._v("如上图所示,实际上外部还有一个看不到的节点对象,将这几个子分支条件"),a("code",[t._v("包裹起来")]),t._v(",这个红色部分才是条件节点,也就是排他网关,绿色条件块应当解析为"),a("strong",[t._v("带条件的")]),a("code",[t._v("sequenceFlow")]),t._v("连接线,该节点内设置的条件应该作为"),a("code",[t._v("sequenceFlow")]),t._v("的条件")]),t._v(" "),a("h4",{attrs:{id:"并行分支"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#并行分支"}},[t._v("#")]),t._v(" 并行分支")]),t._v(" "),a("p",[t._v("并行分支对应"),a("code",[t._v("parallelGateway")]),t._v(" ,与条件分支一样,外部也有一个对象包裹内部的并行分支,外部这个对象应该解析为"),a("code",[t._v("并行网关")]),t._v(",但是它的分支节点首部应当看做普通顺序流,由于并行网关成对存在,因此需要注意创建合流的分支,将每个子分支末端连接到合流点")]),t._v(" "),a("img",{staticStyle:{zoom:"50%"},attrs:{src:"https://pic.rmb.bdstatic.com/bjh/4ea8259c04daa76b91f8b9863d46a66e.png",alt:"image-20220720150019350"}})])}),[],!1,null,null,null);s.default=n.exports}}]);