十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

泛微OA流程搭建实战:节点出口、字段落表与SQL排错

泛微OA流程搭建实战:节点出口、字段落表与SQL排错 简介面向泛微OA系统管理员与流程搭建初学者的一份实操型PDF文档围绕流程引擎中表单与路径的配置展开可帮助需要落地审批流、加值班登记等业务场景的读者理清从建表到归档的完整链路。文档共1个文件为PDF格式压缩包约1.39MB内容以图文步骤与界面截图为主便于对照系统后台逐项操作。已有3308人学习下载说明其在同类OA配置资料中具备一定参考度。读者可获得新建表单的字段与数据库命名规则、路径绑定表单的方法、流转节点的创建与归档设置以及操作组、Html模式表单内容、同步节点、自由退回与节点前附加操作等关键配置细节适合作为日常流程搭建与排错时的速查手册。1. 泛微OA流程搭建到底在搭什么从一张差旅报销单说清建模边界假设你收到需求把销售部的差旅报销搬进泛微OA。表面上只是把纸质单变成电子单拆开看却要同时定四件事——谁发起、填哪些字段、按什么规则往下走、终点落在什么状态。这四件事就是泛微OA流程搭建的全部边界。我见过太多流程画得挺漂亮出口条件写错一行整条流程卡在第一个审批节点用户页面上只留一句“提交失败”然后实施顾问和开发互相甩锅。这篇文章面向企业IT、泛微OA实施顾问以及做业务系统对接的后端同学新手能照着下文把一条差旅报销流程从建模板跑到落数据熟手能看到节点出口、字段落表和版本管理上的取舍。文中涉及的库表以常见的泛微OA e-cology工作流结构为例不同版本字段名可能略有差异落地时以你实际库表为准不要照抄表名。2. 泛微OA流程建模的底层结构节点、出口、字段与数据表泛微OA的流程引擎不是一张图而是一组有引用关系的记录。你在前台点的每一个“保存节点”“新增出口”最后都落到几张固定的表里。搞清楚这个映射关系后面排错就不用靠猜。下面先拆结构再给出核验用的SQL。2.1 流程模板、节点、出口的三层结构与各自落表一个流程模板描述整条流程的元信息节点是流程里的环节出口是节点之间的连线和条件。节点至少要有入口和出口否则流程会断在中间。常见做法是先建模板拿到流程ID再往模板里挂节点节点之间用出口串起来。节点类型上发起节点负责表单渲染审批节点负责操作者和出口判断归档节点负责收尾。前台一个“新建流程”背后往往只是往流程主表插一行。建模概念前台对应操作常见落表流程模板新建流程、填写流程名称与模块workflow_base节点新增节点、设置节点类型与操作者workflow_nodebase流程-节点关系节点在流程中的顺序workflow_flownode出口节点之间连线、设置出口条件workflow_flowoperate表单字段拖拽字段、设字段类型与权限workflow_billfield先用一句SQL把一条流程的节点和顺序拉出来确认你前台看到的结构和库里一致-- 说明表名以 e-cology 常见结构为例实际以你的库表为准 SELECT b.id AS workflowid, b.workflowname AS flow_name, n.id AS nodeid, n.nodename AS node_name, n.nodetype AS node_type -- 0发起 1审批 2归档等按版本确认 FROM workflow_base b JOIN workflow_flownode fn ON fn.workflowid b.id JOIN workflow_nodebase n ON n.id fn.nodeid WHERE b.workflowname 差旅报销流程 ORDER BY fn.nodeorder;逻辑上这是一次多表连接workflow_base过滤出目标流程workflow_flownode提供流程到节点的关联再回workflow_nodebase取节点详情。nodetype和nodeorder是排错时最先看的两个字段——顺序错乱通常意味着节点关系表里有一行没写对。2.2 节点出口与条件规则怎么配出口的核心是条件表达式它决定当前节点是否可以把单据放行到下一个节点。泛微OA的出口条件一般按“表单字段 比较符 值”的形态写多条条件用与或关系组合。常见坑是条件只写了一半比如只判断了金额没判断部门结果所有部门的大额单子都走了同一条路径。配置时把条件拆成“先宽后窄”先用字段把大范围圈住再用部门、职级收窄。// 出口条件示例金额超过5000且属于研发中心走总监审批出口 {amount} 5000 AND {department} 研发中心 // 出口条件示例其余情况走普通审批出口该出口不写条件视为默认 // 默认出口放在所有条件出口之后避免无匹配时流程卡死条件表达式的字段名要和表单字段的绑定名完全一致大小写、下划线都对得上才生效。我一般会先配一条“无条件默认出口”再往上叠条件出口这样即使前几条都没命中流程至少不会停在原地。配完出口后回到2.1的SQL把workflow_flowoperate里的条件字段导出来和前台配置逐条比对一次。2.3 表单字段与建模数据的落表关系表单字段是流程和数据的接触面。字段定义在字段表里节点上显示哪些字段、字段是否可写则落在节点表单关系表里。很多人改完字段在前台看不到变化原因就是只改了字段定义没把它挂到当前节点上。字段类型也直接影响存储单行文本、数字、日期、选择框在库里的列类型不同跨类型查询时要显式转换否则SQL会隐式转换导致索引失效。字段类型前台表现常见存储形态单行文本输入框varchar数字数值输入numeric / int日期日期选择datetime / 时间戳选择框下拉或单选值集编码 文本-- 查某流程用到的表单字段及类型 SELECT f.id, f.fieldname, f.fielddbtype, f.fieldhtmltype FROM workflow_billfield f WHERE f.billid ( SELECT formid FROM workflow_base WHERE workflowname 差旅报销流程 ) ORDER BY f.id;fielddbtype决定数据库列类型fieldhtmltype决定前台控件类型。两者不一致时前台能填但入库报错。核验时重点看日期和数字字段日期字段如果fieldhtmltype是文本、fielddbtype是datetime用户手填的字符串会在提交瞬间被解析失败。3. 从零搭一条请假流程泛微OA流程搭建操作流程的分步配置结构讲清了接下来按操作顺序把一条请假流程搭到能提交、能审批、能落库。步骤按后台配置的顺序排每一步我都给出要核验的点避免配完就跑。3.1 建流程模板与基础信息后台进入流程管理新建流程填写流程名称、所属模块、表单类型。表单类型在明细场景下选明细表简单场景用主表即可。保存后记下流程ID后面所有SQL都靠它关联。基础信息里有几个开关要小心流程类型选“有向流程”是按固定路径走选“自由流程”则节点可跳转前者更适合审批类流程。配置项建议值说明流程名称请假流程用户可见避免带版本号流程类型有向流程审批路径固定表单类型主表请假单字段不多版本号1.0上线前独立版本配完先别急着加节点用2.1的SQL确认workflow_base里已经有一行流程ID能查到再继续。很多“节点保存失败”的问题根源是流程主记录还没落库。3.2 节点与出口条件配置先加发起节点再加审批节点两个节点之间连线做出口。发起节点的操作者一般设为“创建人”审批节点设为“指定人”或“角色”。出口条件按2.2的写法配置先配默认出口再加条件出口。审批节点至少要有一个出口指向归档节点否则单据永远停在审批中。-- 配置后核验该流程每个节点有几个出口 SELECT fn.nodeid, n.nodename, COUNT(o.id) AS exit_count FROM workflow_flownode fn JOIN workflow_nodebase n ON n.id fn.nodeid LEFT JOIN workflow_flowoperate o ON o.nodeid fn.nodeid WHERE fn.workflowid ( SELECT id FROM workflow_base WHERE workflowname 请假流程 ) GROUP BY fn.nodeid, n.nodename;exit_count为0的节点就是断点。审批节点的出口数通常大于等于1发起节点也至少要有1个出口。查询结果里出现0回到前台补出口即可不用重建流程。3.3 表单字段、权限与默认值字段部分分两步先在表单设计里建字段再把字段挂到对应节点并设置读写权限。发起节点上请假天数、开始时间可写审批节点上这些字段只读审批意见字段只在审批节点可写。默认值能省事比如申请人默认取当前登录用户申请时间默认取当前时间避免用户手填出错。-- 核验字段是否挂到发起节点且权限正确 SELECT nf.nodeid, bf.fieldname, nf.isview, nf.isedit FROM workflow_nodeform nf JOIN workflow_billfield bf ON bf.id nf.fieldid WHERE nf.nodeid ( SELECT fn.nodeid FROM workflow_flownode fn JOIN workflow_base b ON b.id fn.workflowid WHERE b.workflowname 请假流程 ORDER BY fn.nodeorder LIMIT 1 );isview是可见isedit是可编辑。审批节点上如果申请人字段isedit还是1审批人就能改申请人这是实打实的权限漏洞。核验时逐个节点对一遍比上线后被业务投诉再回改省力得多。3.4 后台SQL核验流程实例数据流程跑通后数据会落到请求表和请求日志表。请求表存单据主体日志表存每个节点的操作轨迹。核验一条实例最直接的方式是拿请求ID去日志表看节点流转是否和设计一致。-- 查最近一条请假实例的流转日志 SELECT r.requestid, r.requestmark, l.nodeid, l.operator, l.operatedate, l.logtype FROM workflow_requestbase r JOIN workflow_requestlog l ON l.requestid r.requestid WHERE r.workflowid ( SELECT id FROM workflow_base WHERE workflowname 请假流程 ) ORDER BY l.operatedate DESC LIMIT 20;logtype区分提交、审批、退回等动作operatedate是时间戳。一条完整的请假实例日志里应该能看到发起、审批、归档三个阶段。如果日志只到审批就断了回到3.2查出口八成是审批节点没有指向归档的出口。4. 流程搭建后的调试与排错泛微OA里最常见的几类翻车流程能提交不代表没问题真正麻烦的是那种“偶尔走不通”的流程。下面按排错优先级从高到低讲三类高频问题每类给出可执行的排查路径。4.1 流程走不通出口条件与操作者匹配出口条件不命中是流程卡死的头号原因。排查顺序是先看当前节点有几个出口再看每个出口的条件最后看单据字段值。操作者匹配不上是第二原因尤其是从金蝶完成单点登录进入泛微OA的用户如果身份映射没落库节点上按角色指定的操作者就匹配不到人流程会停在“待办未生成”的状态。-- 查节点出口条件逐条核对字段值 SELECT o.id, o.nodeid, o.condition, o.nextnodeid FROM workflow_flowoperate o WHERE o.nodeid ( SELECT n.id FROM workflow_nodebase n WHERE n.nodename 部门经理审批 );condition字段里存的就是2.2写的表达式。把单据对应字段的值代入表达式手算一遍命中哪个出口一目了然。如果所有条件都不命中又没配默认出口流程就会原地不动。修法有两种补一条默认出口或把条件里的范围放宽。4.2 表单字段不显示、只读、值丢失字段问题的表现有三种看不见、改不了、值没了。看不见通常是节点表单关系表里没挂这个字段改不了是isedit为0值丢失最常见于日期和数字字段的类型不匹配。排查时先用3.3的SQL确认字段挂没挂、权限对不对再单独查一条实例的字段值。-- 查实例字段值核对是否丢失或截断 SELECT fd.fieldname, fd.fieldvalue FROM workflow_formdata fd WHERE fd.requestid 你的请求ID;fieldvalue为空而前台填过值说明提交时校验或转换失败。日期字段被存成空串、数字字段被存成带千分位的字符串都会在后续统计里出错。这类问题最好在测试环境用边界值先跑一遍别等上线后从报表里反查。4.3 数据不一致与日志排查同一张单前台状态显示已归档请求表状态却还是审批中这种不一致一般来自两次写入之间的事务中断或手动改库。排查时把请求表、日志表、字段值表三张表按请求ID对齐看请求表的状态、日志表的最后一条动作、字段值表的完整性三者对不上就能定位到断点在哪张表。现象优先查常见原因流程卡审批出口条件、操作者条件不命中或身份未映射字段为空节点表单关系、字段类型未挂载或类型不匹配状态不一致请求表与日志表事务中断或手动改库排查任何一类问题都先拿请求ID把三张表对齐再回到前台看同一单的界面表现。两边对上了问题基本就落在配置而非代码上。5. 泛微OA流程搭建的进阶技巧批量配置、版本管理与上线前自检流程搭多了重复劳动就是最大的成本。一条审批链十几个节点每个节点都要挂表单字段、配出口手工点一遍容易漏。我一般会把节点和字段关系整理成表导入前先拿SQL批量核验导入后再跑一遍差异比对。下面这段用于比对两个流程版本之间的节点出口差异是上线前最值钱的一次检查。-- 比对流程V1与V2的节点出口数量差异找出新增或漏配的出口 SELECT COALESCE(a.nodeid, b.nodeid) AS nodeid, a.exit_count AS v1_exits, b.exit_count AS v2_exits FROM ( SELECT fn.nodeid, COUNT(o.id) AS exit_count FROM workflow_flownode fn LEFT JOIN workflow_flowoperate o ON o.nodeid fn.nodeid WHERE fn.workflowid (SELECT id FROM workflow_base WHERE workflowname 请假流程V1) GROUP BY fn.nodeid ) a FULL JOIN ( SELECT fn.nodeid, COUNT(o.id) AS exit_count FROM workflow_flownode fn LEFT JOIN workflow_flowoperate o ON o.nodeid fn.nodeid WHERE fn.workflowid (SELECT id FROM workflow_base WHERE workflowname 请假流程V2) GROUP BY fn.nodeid ) b ON a.nodeid b.nodeid;v1_exits和v2_exits不等的那一行就是版本差异。v2_exits为0的节点是断点v1_exits为0而v2_exits有值是新增节点需要确认操作者和字段是否都补齐。版本管理上我习惯给每个上线版本单独建流程名不带“新版”“最终版”这种词用V1、V2区分回滚时直接切回旧流程比在原流程上改配置安全得多。上线前的自检清单固定五项节点出口数量、节点操作者是否可解析、表单字段读写权限、日期数字字段类型、以及一条完整测试实例的日志轨迹。这五项过了流程基本能扛住真实业务的第一波量。本文还有配套的精品资源点击获取
返回列表