This article illustrates the steps to be followed to Email a concurrent program’s output.

  1. Write a procedure that will submit the concurrent program whose output has to be sent as an Email and once the program completes, send the output as Email using UTL_MAIL.send_attach_varchar2.
  2. Register this procedure as a concurrent program so that this program can be run from Oracle Applications which will email a concurrent program’s output.

Detailed explanation with sample code:

  1. Write the below procedure which submits the desired concurrent program and waits until it completes and then sends the output of that program to the specified Email address using the utility UTL_MAIL.send_attach_varchar2

CREATE OR REPLACE PROCEDURE apps.erp_send_email

(

errbuf VARCHAR2,

retode NUMBER,

p_concurrent_program_name VARCHAR2,

p_parameter1 NUMBER

)

IS

/*Variable declaration*/

fhandle UTL_FILE.file_type;

vtextout VARCHAR2 (32000);

text VARCHAR2 (32000);

v_request_id NUMBER := NULL;

v_request_status BOOLEAN;

v_phase VARCHAR2 (2000);

v_wait_status VARCHAR2 (2000);

v_dev_phase VARCHAR2 (2000);

v_dev_status VARCHAR2 (2000);

v_message VARCHAR2 (2000);

v_application_id NUMBER;

v_concurrent_program_id NUMBER;

v_conc_prog_short_name VARCHAR2 (100);

v_conc_prog_appl_short_name VARCHAR2 (100);

v_output_file_path VARCHAR2 (200);

BEGIN

fnd_file.put_line (fnd_file.output, '------------------------------------------------------);

fnd_file.put_line (fnd_file.output, 'Conc Prog: ' || p_concurrent_program_name);

fnd_file.put_line (fnd_file.output, 'Parameter 1:' ||p_parameter1);

/* Get Concurrent_program_id of the desired program and application_id */

BEGIN

SELECT concurrent_program_id, application_id

INTO v_concurrent_program_id, v_application_id

FROM fnd_concurrent_programs_tl

WHERE user_concurrent_program_name = p_concurrent_program_name;

fnd_file.put_line (fnd_file.LOG,'Conc Prog ID:' || v_concurrent_program_id);

fnd_file.put_line (fnd_file.LOG, 'Application ID: ' || v_application_id );

/* Get the program's Short name */

SELECT concurrent_program_name

INTO v_conc_prog_short_name

FROM fnd_concurrent_programs

WHERE concurrent_program_id = v_concurrent_program_id;

fnd_file.put_line (fnd_file.LOG,'Conc Prog Short Name: ' || v_conc_prog_short_name);

/* Get the Application Short name */

SELECT application_short_name

INTO v_conc_prog_appl_short_name

FROM fnd_application

WHERE application_id = v_application_id;

fnd_file.put_line (fnd_file.LOG,'Application Short Name:' || v_conc_prog_appl_short_name);

EXCEPTION

WHEN OTHERS THEN

fnd_file.put_line (fnd_file.LOG, 'Error: ' || SQLERRM);

END;

/* Calling fnd_request.submit_request to submit the desired the concurrent program*/

v_request_id:=

fnd_request.submit_request(v_conc_prog_appl_short_name,

v_conc_prog_short_name,

NULL, --Description

NULL, --Time to start the program

FALSE, -- sub program

p_parameter1

);

fnd_file.put_line (fnd_file.LOG,'Concurrent Request Submitted Successfully: ' || v_request_id);

COMMIT;

IF v_request_id IS NOT NULL

THEN

/*Calling fnd_concurrent.wait_for_request to wait for the program to complete */

v_request_status:=

fnd_concurrent.wait_for_request

(

request_id => v_request_id,

INTERVAL => 10,

max_wait => 0,

phase => v_phase,

status => v_wait_status,

dev_phase => v_dev_phase,

dev_status => v_dev_status,

MESSAGE => v_message

);

v_dev_phase := NULL;

v_dev_status := NULL;

END IF;

/* Getting the path where output file of the program is created */

SELECT outfile_name

INTO v_output_file_path

FROM fnd_concurrent_requests

WHERE request_id = v_request_id;

/* Open the output file in Read mode */

fhandle := UTL_FILE.fopen ('/opt/oracle/ERPS/common/admin/out/ERPSchools','o' || v_request_id || '.out', 'r');

IF UTL_FILE.is_open (fhandle)

THEN

DBMS_OUTPUT.put_line ('File read open');

ELSE

DBMS_OUTPUT.put_line ('File read not open');

END IF;

/* Get the contents of the file into variable "text"*/

LOOP

BEGIN

UTL_FILE.get_line (fhandle, vtextout);

text := text || vtextout || UTL_TCP.crlf;

EXCEPTION

WHEN NO_DATA_FOUND THEN

EXIT;

END;

END LOOP;

UTL_FILE.fclose (fhandle);

/*Calling UTL_MAIL.send_attach_varchar2 to send the output as

Email attachment */

UTL_MAIL.send_attach_varchar2

(

sender => 'prudhvi@erpschools.com',

recipients => 'training@erpschools.com',

subject => 'Testmail',

MESSAGE => 'Hello',

attachment => text,

att_inline => FALSE

);

END;

  1. Register the above written procedure as a concurrent program
  • Define Executable:

  • Define Concurrent program with 2 parameters: Concurrent Program Name and Program short Name.

Email the output of a concurrent program as Attachment的更多相关文章

  1. IGS_学习笔记05_IREP开发Concurrent Program为客户化集合接口(案例)

    20150819 Created By BaoXinjian

  2. How to Create a Java Concurrent Program

    In this Document   Goal   Solution   Overview   Steps in writing Java Concurrent Program   Template ...

  3. Dependent Parameters in Concurrent Program using Special Value Set

    Dependent Parameters in Oracle Applications Requirement: Say there is a concurrent program that lets ...

  4. [转]oracle EBS 基础100问

    from:http://www.cnblogs.com/xiaoL/p/3593691.html  http://f.dataguru.cn/thread-51057-1-1.html 1001 OR ...

  5. [笔记]学习EBS建议有的知识

    http://f.dataguru.cn/thread-51057-1-1.html ORACLE EBS学习的其他资源有哪四个? ORACLE OPEN WORLD大会是不是一个市场营销活动? Or ...

  6. Credit Summaries & Importing External Credit Exposure

    In this Document   Goal   Solution APPLIES TO: Oracle Order Management - Version 11.5.10.2 to 12.1.3 ...

  7. Output of C++ Program | Set 14

    Predict the output of following C++ program. Difficulty Level: Rookie Question 1 1 #include <iost ...

  8. Output of C++ Program | Set 13

    Predict the output of following C++ program. 1 #include<iostream> 2 using namespace std; 3 4 c ...

  9. 《Oracle Applications DBA 基础》- 9 - Concurrent Processing[Z]

    <Oracle Applications DBA 基础>- 9 - Concurrent Processing================================== 参考资料 ...

随机推荐

  1. 1003: FFF团的情侣活动--课程作业--找出N个数字中唯一出现奇数次的数

    1003: FFF团的情侣活动 Time Limit: 1 Sec  Memory Limit: 2 MB Description 圣诞节快到了,Water作为大FFF团团长,组织许多对情侣进行电影院 ...

  2. HDU 5116 Everlasting L

    题目链接:HDU-5116 题意:给定若干个整数点,若一个点集满足P = {(x, y), (x + 1, y), . . . , (x + a, y), (x, y + 1), . . . , (x ...

  3. 大小端 Big-Endian 与 Little-Endian

    应该说没做底层开发(硬件或驱动)的人很可能不会彻底理解大小端的概念,大小端不是简单的一句“大端在前”还是“小端在前”能够概括的问题.在cpu, 内存, 操作系统, 编译选项, 文件,网络传输中均有大小 ...

  4. Redis -- 数据类型小结

    redis key 的命名规则: 对象类型:对象id:对象属性  (hset car:1: price 500.hset car:1: name:tom) 一.redis 数据类型: 1. 字符串类型 ...

  5. C#判断目录是否为隐藏

    判断方法: DirectoryInfo di = new DirectoryInfo(path); if ((di.Attributes & FileAttributes.Hidden) == ...

  6. DateTimeToUnix/UnixToDateTime 对接时间转换

    问题,通过毫秒数来解析出时间:(很多对接的时候经常需要用到) <?php $MyJson = '{"jingdong_vas_subscribe_get_responce": ...

  7. http中使用json封装数据的性能测试

    http中使用json封装数据的性能测试     一个项目使用json封装数据,接口例如:   客户端发送:   POST /list.do HTTP/1.1   Host: zoomi.com.cn ...

  8. 从TS流定位H264的每一个视频帧开始,判断出帧类型

    从TS流定位H264的每一个视频帧开始,判断出帧类型(待续)

  9. C++ 单例模式的几种实现研究

    都是从网上学得,整理下自己的理解. 单例模式有两种实现模式: 1)懒汉模式: 就是说当你第一次使用时才创建一个唯一的实例对象,从而实现延迟加载的效果. 2)饿汉模式: 就是说不管你将来用不用,程序启动 ...

  10. android ListView 在初始化时多次调用getView()原因分析

    今天在做一个功能:在初始化ListView时,把第一行背景置为黄色,同时保存第一行对象,用于在点击其他行时将该行重新置为白色. if(position==0){ convertView.setBack ...