ProcessMaker v3.5.7社区版流程过期后禁止修改推进的实现问询
在ProcessMaker v3.5.7社区版实现流程过期后只读不可操作
步骤1:添加流程过期时间变量
- 进入流程设计器,打开
Variables面板,创建一个日期时间类型的变量,命名为PROCESS_EXPIRY_DATE(可自定义)。 - 可在流程启动的DynaForm中让用户手动填写过期时间,或通过触发器自动设置(比如启动后N天过期)。
步骤2:创建过期检查触发器
- 进入
Triggers面板,新建触发器CheckProcessExpiry,写入以下PHP代码:
// 获取当前时间和流程过期时间 $currentTime = date('Y-m-d H:i:s'); $expiryTime = @@PROCESS_EXPIRED_DATE; // 比较时间并设置过期状态变量 if (!empty($expiryTime) && strtotime($currentTime) > strtotime($expiryTime)) { @@PROCESS_EXPIRED = true; } else { @@PROCESS_EXPIRED = false; }
- 将该触发器绑定到每个任务节点的Before Assignment或Before Trigger事件,确保用户每次打开任务前都会执行过期检查。
步骤3:设置任务节点的操作权限
- 打开每个任务节点的
Permissions标签:- 找到
Edit Case权限,设置条件为!@@PROCESS_EXPIRED(仅未过期时允许编辑)。 - 找到
Continue Case权限,同样设置条件为!@@PROCESS_EXPIRED(仅未过期时允许推进流程)。
- 找到
- 对于多用户分配的任务(如并行分配),该条件会自动应用到所有被分配用户,确保过期后所有人都无法操作。
步骤4:设置表单字段只读(可选)
- 打开任务对应的DynaForm,编辑每个字段的
Read Only属性:- 设置条件为
@@PROCESS_EXPIRED,流程过期时所有表单字段自动变为只读,进一步限制修改操作。
- 设置条件为
注意事项
- 确保
PROCESS_EXPIRED_DATE变量的日期时间格式与系统默认(Y-m-d H:i:s)一致,避免时间比较出错。 - 触发器必须在用户打开任务前执行,才能实时更新过期状态。
- 社区版原生支持权限条件引用流程变量,无需额外插件。
内容的提问来源于stack exchange,提问作者kkd
相关产品推荐
相关产品推荐

