如何在PeopleCode中遍历表格并在邮箱字段变化时触发单次邮件发送
如何在PeopleCode中遍历表格并在邮箱字段变化时触发单次邮件发送
嘿,这个需求我之前也碰到过,刚好可以给你分享个靠谱的实现思路,结合PeopleCode的写法来搞:
首先核心逻辑很清晰——因为你的表格已经按邮箱排好序了,我们只需要遍历每一行,记住上一个邮箱地址,当遇到不同的邮箱时,就给上一个邮箱的用户发邮件;最后别忘了处理最后一组数据,不然最后一个用户收不到邮件。
下面是具体的代码示例,你可以根据自己的实际记录和字段名调整:
// 首先获取目标数据的行集,这里假设你是从组件滚动区获取,或者后台读取的记录行集 Local Rowset &rsTargetData = GetRowset(Record.YOUR_RECORD_NAME); // 替换成你的记录名称 Local string &previousEmail = ""; Local integer &rowIndex; // 遍历每一行数据 For &rowIndex = 1 To &rsTargetData.ActiveRowCount Local Row ¤tRow = &rsTargetData.GetRow(&rowIndex); Local string ¤tEmail = ¤tRow.YOUR_RECORD_NAME.Email.Value; // 替换成你的邮箱字段名 // 当当前邮箱和上一个不同,且上一个邮箱不为空时,发送邮件 If ¤tEmail <> &previousEmail And &previousEmail <> "" Then // 调用自定义的邮件发送函数,把上一个邮箱传进去 SendSingleEmail(&previousEmail); End-If; // 更新上一个邮箱为当前邮箱,继续下一行对比 &previousEmail = ¤tEmail; End-For; // 遍历结束后,发送最后一组数据的邮件 If &previousEmail <> "" Then SendSingleEmail(&previousEmail); End-If;
接下来是自定义的邮件发送函数,你可以根据需求调整主题、正文内容,甚至把同一邮箱对应的所有记录信息汇总进去:
Function SendSingleEmail(&recipientEmail As string) // 定义邮件的主题和正文 Local string &emailSubject = "你的邮件主题"; Local string &emailBody = "您好,这是针对您的批量通知邮件"; // 如果需要汇总同一邮箱的所有记录,你可以在遍历的时候维护一个临时集合,把数据存进来,这里就可以直接调用 // 比如:&emailBody = &emailBody | Char(13) | "关联记录:" | &collectedRecords; // 使用PeopleCode自带的SendMail函数发送邮件 Local integer &sendStatus = SendMail("", &recipientEmail, "", "", &emailSubject, &emailBody, "", %SendMail_HTML); // 记录日志,方便排查问题 If &sendStatus = 0 Then WriteToLog(%ApplicationLog, "邮件发送成功:" | &recipientEmail); Else WriteToLog(%ApplicationLog, "邮件发送失败,地址:" | &recipientEmail | ",错误码:" | &sendStatus); End-If; End-Function;
最后给你几个小提示:
- 如果需要在邮件里展示同一邮箱对应的所有记录(比如Steve的A12、A13这些条目),你可以在遍历的时候加一个字符串变量或者数组,把同一邮箱的记录信息拼接进去,当邮箱变化时,把这个拼接好的内容放进邮件正文,然后清空变量。
- 确保行集的获取方式正确:如果是组件内的滚动区,用
GetRowset(Scroll.YOUR_SCROLL_NAME);如果是后台直接读取数据库记录,用CreateRowset(Record.YOUR_RECORD_NAME)然后调用Fill方法加载数据。 - 测试阶段可以先把邮件发送换成日志输出,确认逻辑没问题后再实际发邮件,避免不小心发一堆测试邮件给用户。
备注:内容来源于stack exchange,提问作者Ashley
相关产品推荐
相关产品推荐

