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. rabbitmq和ons-rocketmq使用对比

    MQ,其实目的都是一样,就是应对系统的并发可以实现消峰和解耦的作用,类似于创建了一个线程异步操作,这一点可以了解一下一款优秀的并发框架(Disruptor),据说是每秒可以处理十万级数据, 目前据本人 ...

  2. 1.Python3标准库--前戏

    Python有一个很大的优势便是在于其拥有丰富的第三方库,可以解决很多很多问题.其实Python的标准库也是非常丰富的,今后我将介绍一下Python的标准库. 这个教程使用的书籍就叫做<Pyth ...

  3. HDU-5317

    RGCDQ Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  4. Intellij idea的maven依赖图

    Intellij idea下查看maven的依赖图与eclipse有所不同.下面简单介绍一下Intellij下maven的查看使用. 使用场景 当你想查看maven依赖的jar都有哪些,是否有冲突,冲 ...

  5. Find Minimum in Rotated Sorted Array I&&II——二分查找的变形

    Find Minimum in Rotated Sorted Array I Suppose a sorted array is rotated at some pivot unknown to yo ...

  6. AC日记——可怜的狗狗 洛谷 P1533

    可怜的狗狗 思路: 主席树第k大: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 300001 #defin ...

  7. Nodejs创建简单的Bot

    官方文档地址:https://docs.microsoft.com/en-us/bot-framework/nodejs/bot-builder-nodejs-quickstart 前提: 1.你已经 ...

  8. 转:攻击JavaWeb应用[6]-程序架构与代码审计

    转:http://static.hx99.net/static/drops/tips-429.html 攻击JavaWeb应用[6]-程序架构与代码审计 园长 · 2013/08/12 16:53 注 ...

  9. 用Fiddler进行弱网测试

    1.作为一个好的程序猿,不但要写一手高质量的代码,而且要学会用高质量的测试工具测试自己的代码效果,接下来给大家推荐一下:用Fiddler进行弱网环境下的测试,请不要忽略这一点,因为用户在网速慢的情况下 ...

  10. 445. Add Two Numbers II【Medium】【两个链表求和】

    You are given two non-empty linked lists representing two non-negative integers. The most significan ...