SharePoint Online及Designer工作流:请假申请日期校验与审批触发设置求助
作为SPD新手,咱们一步步来落地你要的功能,先从基础的列表配置开始,再到前端校验和工作流设置:
一、先搭建SharePoint请假列表
首先得创建一个用于记录请假申请的列表,至少包含以下核心字段:
- 申请人:人员字段,设置默认值为当前用户
- 休假类型:下拉选项字段,添加「年假」「事假」等你需要的选项
- 开始日期:日期时间字段(仅保留日期部分即可)
- 经理:人员字段,可设置为自动关联申请人的直属经理,也可让用户手动选择
二、实现「开始日期小于今日时触发错误提示」
这里分两种方案,先讲零代码的基础版,再给你进阶的强拦截版(满足你要的「未点击确定禁止其他操作」需求):
方案1:列表自带验证规则(提交时校验)
适合新手快速上手,无需写代码:
- 打开列表设置 → 点击「验证设置」
- 在「公式」框中输入:
=[开始日期]>=TODAY() - 在「用户消息」中填写:
开始日期必须大于或等于今日日期,请修改后提交! - 保存设置即可。用户提交申请时,如果选了过去的日期,页面顶部会直接弹出提示,阻止提交。
方案2:前端JavaScript弹窗拦截(实时校验+强约束)
如果要实现「弹出提示后必须点击确定、修改日期才能继续操作」的效果,需要给表单嵌入一段JS:
- 打开列表的「新建表单」(或编辑表单),点击页面顶部「设置」→「编辑页面」
- 添加一个「脚本编辑器」Web部件
- 在脚本编辑器中粘贴以下代码:
$(document).ready(function() { // 监听开始日期输入框的变化 $("input[title='开始日期']").change(function() { var selectedDate = new Date($(this).val()); var today = new Date(); // 去掉时间部分,只比较日期 today.setHours(0,0,0,0); if (selectedDate < today) { // 弹出模态提示框 alert("开始日期必须大于今日日期!"); // 清空错误输入并聚焦到输入框,强制修改 $(this).val("").focus(); // 禁用保存按钮,直到日期正确 $("input[value='保存']").prop("disabled", true); } else { // 日期合规时重新启用保存按钮 $("input[value='保存']").prop("disabled", false); } }); // 页面加载时先做一次校验 var initialDate = $("input[title='开始日期']").val(); if (initialDate) { var selectedDate = new Date(initialDate); var today = new Date(); today.setHours(0,0,0,0); if (selectedDate < today) { $("input[value='保存']").prop("disabled", true); } } });
- 保存页面即可。用户选了错误日期时,会立刻弹出提示,清空输入并锁定保存按钮,直到选对日期才能继续操作。
三、设置工作流条件:年假+开始日期>今日时触发审批邮件
接下来用SharePoint Designer 2013创建审批工作流:
- 打开SharePoint Designer,连接到你的目标站点
- 点击「工作流」→「列表工作流」,选择你刚创建的请假列表
- 给工作流命名(比如「请假审批触发流」),触发条件选择「当项目被创建时」
- 添加条件判断:
- 点击「条件」→「比较值」,第一个值选「当前项目: 休假类型」,操作符选「等于」,第二个值选「年假」
- 点击「添加条件」→「比较值」,新增第二个条件:「当前项目: 开始日期」>「当前日期」
- 确保两个条件是「与」的关系(必须同时满足)
- 条件满足时(年假+开始日期>今日):
- 添加操作:「发送电子邮件」
- 收件人选「当前项目: 经理」,邮件主题写「[请假审批] 待处理申请」,正文里可以插入申请人、休假类型、开始日期等字段(用「添加或更改查找」功能快速插入)
- 条件不满足时:
- 因为前端已经做了拦截,工作流这里可以做二次兜底,比如添加操作「更新列表项」,把申请状态设为「驳回」,或者发邮件告知申请人不符合提交要求(可选)
- 保存并发布工作流即可
小提示
- 确保你的账户有SharePoint Designer的访问权限,以及列表的编辑、工作流创建权限
- 如果用JavaScript方案,要先确认站点允许自定义脚本(可在SharePoint管理中心的「设置」里开启)
- 工作流用的是服务器时间,和用户本地时间可能有差异,建议统一用服务器时间做校验
内容的提问来源于stack exchange,提问作者Ambika Bhatnagar




