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

Oracle EBS标准并发程序(Auto Invoice Master)完成后邮件通知方案咨询

Oracle E-Business Suite Auto Invoice 邮件通知解决方案

以下是几种可靠的实现思路,附代码片段和关键注意事项:

方案1:并发程序后处理程序(推荐)

通过给Auto Invoice Master程序绑定自定义后处理程序,在程序执行完成后自动触发邮件通知。

步骤

  1. 注册一个PL/SQL类型的自定义并发程序,关联下面的包过程。
  2. 进入「系统管理员职责 -> 并发 -> 程序 -> 定义」,找到Auto Invoice Master Program,在「后处理」字段选择你的自定义程序。

核心代码

CREATE OR REPLACE PACKAGE auto_inv_notification AS
  PROCEDURE send_status_email (
    errbuf OUT VARCHAR2,
    retcode OUT VARCHAR2
  );
END auto_inv_notification;
/

CREATE OR REPLACE PACKAGE BODY auto_inv_notification AS
  PROCEDURE send_status_email (
    errbuf OUT VARCHAR2,
    retcode OUT VARCHAR2
  ) IS
    l_request_id NUMBER := fnd_global.conc_request_id;
    l_status VARCHAR2(30);
    l_subject VARCHAR2(100);
    l_message VARCHAR2(2000);
    l_recipient VARCHAR2(200) := 'your_notify_email@domain.com'; -- 替换为实际收件人邮箱
  BEGIN
    -- 获取当前请求的最终状态
    SELECT phase_code || '-' || status_code
    INTO l_status
    FROM fnd_concurrent_requests
    WHERE request_id = l_request_id;

    -- 构建邮件内容
    CASE l_status
      WHEN 'C-S' THEN
        l_subject := 'Auto Invoice 执行成功';
        l_message := 'Auto Invoice Master Program(请求ID: ' || l_request_id || ')已成功完成。';
      WHEN 'C-E' THEN
        l_subject := 'Auto Invoice 执行失败';
        l_message := 'Auto Invoice Master Program(请求ID: ' || l_request_id || ')执行失败,请登录系统查看请求日志。';
      WHEN 'C-W' THEN
        l_subject := 'Auto Invoice 执行存在警告';
        l_message := 'Auto Invoice Master Program(请求ID: ' || l_request_id || ')执行完成,但存在警告,请登录系统查看请求日志。';
      ELSE
        l_subject := 'Auto Invoice 状态未知';
        l_message := 'Auto Invoice Master Program(请求ID: ' || l_request_id || ')当前状态:' || l_status;
    END CASE;

    -- 调用EBS内置API发送邮件
    fnd_notification.send(
      recipient => l_recipient,
      subject => l_subject,
      message => l_message,
      sender => fnd_profile.value('MAIL_SENDER_ADDRESS')
    );

    retcode := '0';
    errbuf := '通知邮件已发送';
  EXCEPTION
    WHEN OTHERS THEN
      retcode := '2';
      errbuf := '邮件发送失败: ' || SQLERRM;
  END send_status_email;
END auto_inv_notification;

注意事项

  • 确保并发程序执行用户拥有FND_NOTIFICATION包的执行权限。
  • 检查系统配置文件MAIL_SENDER_ADDRESS和SMTP_HOST_ADDRESS是否正确配置,保证EBS能正常连接邮件服务器。

方案2:数据库状态监听触发器

通过监听FND_CONCURRENT_REQUESTS表的状态变化,触发邮件通知。

核心代码

CREATE OR REPLACE TRIGGER auto_inv_status_trigger
AFTER UPDATE OF status_code, phase_code ON fnd_concurrent_requests
FOR EACH ROW
DECLARE
  l_program_short_name VARCHAR2(30);
  l_recipient VARCHAR2(200) := 'your_notify_email@domain.com';
  l_subject VARCHAR2(100);
  l_message VARCHAR2(2000);
BEGIN
  -- 仅针对Auto Invoice Master Program(短名称为RAXMTR,可根据实际版本查询确认)
  SELECT short_name
  INTO l_program_short_name
  FROM fnd_concurrent_programs
  WHERE concurrent_program_id = :new.concurrent_program_id
    AND application_id = :new.application_id;

  IF l_program_short_name = 'RAXMTR' AND :new.phase_code = 'C' THEN
    CASE :new.status_code
      WHEN 'S' THEN
        l_subject := 'Auto Invoice 执行成功';
        l_message := '请求ID: ' || :new.request_id || ' - Auto Invoice已成功完成。';
      WHEN 'E' THEN
        l_subject := 'Auto Invoice 执行失败';
        l_message := '请求ID: ' || :new.request_id || ' - Auto Invoice执行失败,请查看请求日志。';
      WHEN 'W' THEN
        l_subject := 'Auto Invoice 执行有警告';
        l_message := '请求ID: ' || :new.request_id || ' - Auto Invoice完成但有警告,请查看请求日志。';
    END CASE;

    fnd_notification.send(
      recipient => l_recipient,
      subject => l_subject,
      message => l_message,
      sender => fnd_profile.value('MAIL_SENDER_ADDRESS')
    );
  END IF;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    NULL; -- 非目标程序,忽略
  WHEN OTHERS THEN
    -- 记录错误,避免触发器异常影响原并发程序
    INSERT INTO custom_alert_errors (error_msg, log_date)
    VALUES ('Auto Invoice通知触发器报错: ' || SQLERRM, SYSDATE);
END;
/

注意事项

  • 触发器必须包含异常捕获逻辑,防止因邮件发送失败导致并发程序执行异常。
  • 确认FND_CONCURRENT_PROGRAMS中Auto Invoice的短名称是否为RAXMTR,不同版本可能有差异。

方案3:排查原有Alert未生效的问题

若想继续使用Alert功能,检查以下几点:

  • 触发条件:确认Alert是否正确监听FND_CONCURRENT_REQUESTS表,过滤条件是否包含Auto Invoice的程序ID/短名称,且状态为完成(phase_code='C')。
  • 动作配置:检查Alert的邮件动作是否正确设置,收件人邮箱、邮件模板内容无误。
  • Alert日志:进入「系统管理员职责 -> 预警 -> 历史」,查看Alert执行记录,是否存在权限不足、邮件服务器连接失败等报错。
  • Alert管理器:确认Alert Manager并发程序是否正常运行,未被挂起或终止。

通用配置检查

无论采用哪种方案,都需要确保:

  • EBS邮件服务器配置正确,可通过发送测试邮件验证。
  • 执行用户拥有FND_CONCURRENT_REQUESTS、FND_CONCURRENT_PROGRAMS表的查询权限,以及FND_NOTIFICATION包的执行权限。

内容的提问来源于stack exchange,提问作者Nayan Semwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:02:47