ProcessMaker 3.7新建用户角色下拉无显示 报SQL日期错误寻修改位置
ProcessMaker 3.7 新建用户角色下拉为空问题修复
问题根因
- 故障触发场景:全新安装ProcessMaker 3.7,创建新用户时角色下拉无选项
- 接口报错信息:userAjax接口返回SQL执行错误,核心错误为
Incorrect DATETIME value: '',触发问题的SQL片段为RBAC_ROLES.ROL_CREATE_DATE<>'' AND RBAC_ROLES.ROL_UPDATE_DATE<>'' - 兼容性原因:MySQL 5.7及以上版本默认开启严格模式,不支持对DATETIME类型字段做空字符串不等值判断,正确判断非空的语法为
字段名 IS NOT NULL
具体代码修改位置
你之前定位的ProcessMaker\BusinessModel\User路径下的UserRoles、BaseUserRoles类为上层业务封装类,实际构造SQL过滤条件的代码位置如下:
- 第一处修改(核心修复点)
- 文件路径:
workflow/engine/classes/model/Base/RbacRoles.php - 定位到构造角色列表查询条件的代码段,找到针对
ROL_CREATE_DATE、ROL_UPDATE_DATE两个字段添加<>''判断的逻辑,将原空字符串判断替换为IS NOT NULL判断,对应Propel框架写法为:
// 替换原 ROL_CREATE_DATE <> '' 条件 $criteria->add(RbacRolesPeer::ROL_CREATE_DATE, null, Criteria::ISNOTNULL); // 替换原 ROL_UPDATE_DATE <> '' 条件 $criteria->add(RbacRolesPeer::ROL_UPDATE_DATE, null, Criteria::ISNOTNULL); - 文件路径:
- 第二处校验修改
- 文件路径:
workflow/engine/classes/class.userRoles.php - 定位到供新建用户接口调用的
getAvailableRoles()方法,检查方法内的查询条件构造,如果存在对两个日期字段的空字符串判断,同步替换为IS NOT NULL写法。
- 文件路径:
修复后操作
- 清除系统缓存:删除
shared/compiled目录下所有编译缓存文件 - 重新登录后台,进入新建用户页面验证角色下拉菜单加载正常,接口不再返回SQL错误
提示:如果使用MySQL 8.0版本,建议同步排查所有RBAC相关查询中对日期、时间字段的判断逻辑,统一将空字符串判断改为IS NULL/IS NOT NULL写法,避免同类报错。
内容的提问来源于stack exchange,提问作者dBillo
相关产品推荐
相关产品推荐

