SharePoint 2016:仅当Room字段编辑时触发审批工作流的方案咨询
我之前在SharePoint 2016环境里处理过完全一样的需求,给你几个亲测可行的方案,避开你之前踩的坑:
方案1:利用版本历史做字段对比(最省心)
首先确保你的库存列表开启了版本历史:
- 进入列表设置 → 版本设置 → 勾选「创建主要版本」,保留至少1个历史版本
然后在“项目已更改”触发的工作流里做以下步骤:
- 工作流启动后,先查询当前列表项的上一个版本,提取其中的
Room字段值 - 对比当前项的
Room值和上一版本的Room值:- 如果两者相同,直接终止工作流(说明不是Room字段被修改)
- 如果不同,继续执行审批流程
这个方法不需要额外加字段,完全依赖SharePoint自带的版本功能,稳定性很高。
方案2:添加辅助字段跟踪字段变化
如果你的列表无法开启版本历史(比如性能考虑),可以用这个方法:
- 在列表里新增一个单行文本字段,命名为
LastRoomValue,设置为隐藏字段(普通用户看不到),并且设置权限只有工作流能编辑 - 先批量更新现有所有列表项的
LastRoomValue,让它和对应项的Room值保持一致 - 工作流触发后:
- 对比当前项的
Room值和LastRoomValue值 - 如果不同,启动审批流程,审批完成后更新
LastRoomValue为当前Room的值 - 如果相同,直接终止工作流
- 对比当前项的
这个方法的核心是用辅助字段记录上一次的Room值,每次编辑后判断是否有变化,逻辑简单易懂。
方案3:SharePoint Designer自带的“字段已更改”条件
如果你是用SharePoint Designer 2016创建工作流,这个是最直接的方法:
在工作流的触发逻辑里,不要只依赖“项目已更改”的触发事件,而是添加一个条件判断:
当字段「Room」已更改
只有当这个条件满足时,才会执行后续的审批步骤;如果其他字段被修改,条件不满足,工作流直接结束,不会启动审批。
为什么你的“等待”思路行不通?
你之前用等待语句导致工作流挂起,是因为等待语句是让工作流处于休眠状态,直到指定条件(比如Room被修改)发生,但这不是触发审批的正确逻辑——我们需要的是每次编辑后立即判断是否是Room字段被改,而不是让工作流一直等着用户去改Room,方向完全反了。
内容的提问来源于stack exchange,提问作者Cjones
相关产品推荐
相关产品推荐

