SharePoint 2013工作流:设置任务状态为已完成导致其余审批任务异常消失
异常问题根因与修复方案
核心触发逻辑冲突
你遇到的异常本质是自定义任务列表工作流完全打乱了SP2013原生Start a task process任务流程活动的内置状态机规则。
SP2013工作流中的任务流程活动并非单纯批量生成任务项,它自带一套完整的关联任务监听、状态判定、结果回传逻辑,外部流程对关联任务状态的直接硬编码修改,会直接触发活动的提前终止分支。
完整异常触发链路
- 项目列表工作流执行到
Start a task process活动时,会为3位审批人生成关联到同一父工作流实例的独立审批任务,所有任务默认受该活动的状态机管控 - 第一位审批人通过自定义表单修改当前任务的Task Outcome值(批准/拒绝),触发任务列表上的自定义工作流启动
- 自定义工作流不做任何判断,直接给当前任务写入
% Complete = 1、Task Status = Completed Start a task process活动的内置监听到首个关联任务被标记为已完成,匹配到活动默认配置的「任意审批人提交即结束流程」规则,自动执行终止动作:取消剩余2个未审批的关联任务- 终止流程中,活动需要读取当前已完成任务的Outcome值作为最终结果,但因为自定义表单写Outcome、自定义工作流改状态的两个列表更新操作存在SharePoint并发锁冲突,活动读取Outcome值时拿到的是未同步完成的旧空值,就会取活动内置的兜底默认值「拒绝」赋值给Outcome变量,最终导致整个项目列表工作流直接结束,页面展示的最终结果为拒绝
可落地的修复步骤
- 第一时间调整任务列表自定义工作流的逻辑:不要在工作流启动后直接硬编码修改任务状态与完成度。原生
Start a task process活动本身就会监听Task Outcome字段的变更、自动更新对应任务的状态与完成度,外部直接改写状态字段会和内置逻辑形成冲突 - 检查
Start a task process活动的详细配置:打开活动设置面板,找到流程控制选项,确认是否开启了「当任意审批人完成任务时,提前结束整个审批流程」——如果需要3位审批人全部完成后再返回结果,关闭该选项,改为「等待所有审批人完成任务后再汇总结果」;同时核对任务结果的默认配置,避免兜底值绑定为「拒绝」 - 优化自定义表单的提交流程:原有逻辑仅写Task Outcome字段的基础上,增加字段写入完成后的回调确认,确保Outcome值持久化到列表后,再通知工作流执行后续状态更新,避免读写时序导致的取值失败
- 收紧任务列表自定义工作流的触发条件:不要设置为「任何字段修改都触发工作流」,增加过滤规则——只有当Task Outcome字段发生变更、且任务原状态为「未完成」时,才启动工作流,避免重复触发状态修改动作
内容的提问来源于stack exchange,提问作者Chao
相关产品推荐
相关产品推荐

