You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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 &currentRow = &rsTargetData.GetRow(&rowIndex);
    Local string &currentEmail = &currentRow.YOUR_RECORD_NAME.Email.Value; // 替换成你的邮箱字段名

    // 当当前邮箱和上一个不同,且上一个邮箱不为空时,发送邮件
    If &currentEmail <> &previousEmail And &previousEmail <> "" Then
        // 调用自定义的邮件发送函数,把上一个邮箱传进去
        SendSingleEmail(&previousEmail);
    End-If;

    // 更新上一个邮箱为当前邮箱,继续下一行对比
    &previousEmail = &currentEmail;
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:42:59