如何配置SharePoint项创建者告警:通过jQuery或事件处理器实现增改通知
嘿,我来帮你搞定这个SharePoint的告警需求!根据你的要求,我会提供基于jQuery+SharePoint JSOM的客户端实现方案,同时也会提一下更省心的无代码备选方案,你可以根据自己的环境和需求选择。
核心思路
我们可以通过监听SharePoint列表的新建/编辑表单提交事件,在表单完成保存前后获取项的创建者信息,然后调用SharePoint内置的邮件发送接口给创建者推送通知。这个方案不需要依赖外部服务,完全基于SharePoint自身能力实现。
方法一:经典版SharePoint表单(jQuery+JSOM实现)
这个方法适用于经典版SharePoint(2013/2016/2019或Online经典体验),你可以把脚本添加到列表的NewForm.aspx和EditForm.aspx页面中(通过内容编辑器Web部件或脚本编辑器Web部件)。
完整代码示例
// 确保SharePoint核心脚本加载完成后再执行 SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function() { $(document).ready(function() { // 匹配保存按钮(中文环境用'保存',英文环境替换为'Save') const submitBtn = $("input[value='保存']"); submitBtn.on("click", function(e) { e.preventDefault(); // 先阻止默认提交,处理完通知再保存数据 const ctx = SP.ClientContext.get_current(); const web = ctx.get_web(); const targetList = web.get_lists().getById(_spPageContextInfo.pageListId); const isNewForm = window.location.href.includes("NewForm.aspx"); // 处理新建项场景:创建者就是当前操作的用户 if (isNewForm) { const currentUser = web.get_currentUser(); ctx.load(currentUser); ctx.executeQueryAsync(function() { sendNotification( currentUser.get_email(), "新项已创建", `你在${targetList.get_title()}列表中创建的项已成功保存!` ); $("#aspnetForm").submit(); // 通知处理完成后提交表单 }, function(sender, args) { alert(`获取用户信息失败: ${args.get_message()}`); $("#aspnetForm").submit(); // 即使失败也提交,避免数据丢失 }); } // 处理编辑项场景:获取原有项的创建者 else { const itemId = _spPageContextInfo.pageItemId; const targetItem = targetList.getItemById(itemId); ctx.load(targetItem, "Author"); // 加载项的创建者字段 ctx.executeQueryAsync(function() { const creator = targetItem.get_item("Author"); ctx.load(creator); ctx.executeQueryAsync(function() { sendNotification( creator.get_email(), "项已被编辑", `你在${targetList.get_title()}列表中创建的项已被修改!` ); $("#aspnetForm").submit(); }, function(sender, args) { alert(`获取创建者信息失败: ${args.get_message()}`); $("#aspnetForm").submit(); }); }, function(sender, args) { alert(`获取项信息失败: ${args.get_message()}`); $("#aspnetForm").submit(); }); } }); // 封装邮件发送逻辑 function sendNotification(toEmail, subject, body) { const ctx = SP.ClientContext.get_current(); const emailProps = new SP.Utilities.EmailProperties(); emailProps.set_to([toEmail]); emailProps.set_subject(subject); emailProps.set_body(body); SP.Utilities.Utility.sendEmail(ctx, emailProps); ctx.executeQueryAsync(function() { console.log("通知邮件已成功发送"); }, function(sender, args) { alert(`发送邮件失败: ${args.get_message()}`); }); } }); });
关键注意事项
- 按钮选择器适配:如果你的SharePoint是英文环境,要把
input[value='保存']改成input[value='Save'];也可以用浏览器F12工具查看按钮的ID,直接用ID选择器会更稳定。 - 权限与配置:当前用户需要有发送邮件的权限,同时SharePoint的邮件服务器配置必须正常(一般由管理员完成)。
- 脚本加载时机:用
SP.SOD.executeFunc确保SP.js加载完成再执行代码,避免出现JSOM对象未定义的错误。
方法二:无代码替代方案(Power Automate)
如果是现代版SharePoint Online,我强烈推荐用**Power Automate(微软流)**实现,完全不需要写代码:
- 新建一个自动化流,触发条件选择"当项被创建或修改时"(选择目标列表)
- 添加"发送电子邮件(V2)"动作,收件人选择项的"创建者"字段
- 自定义邮件主题和内容,保存流即可
这个方案更稳定、维护成本更低,适合大多数现代SharePoint场景。
内容的提问来源于stack exchange,提问作者Dipanshu
相关产品推荐
相关产品推荐

