APEX 版本:4.1.1
Example:
http://apex.oracle.com/pls/apex/f?p=27554:53
User name: demo
PW: demo
我正在使用以下博客 ( http://spendolini.blogspot.com/2006/04/custom-export-to-csv.html ) 创建一个 .CSV 文件,但是如何将该 .CSV 文件添加为附件到在 APEX 中创建/生成的电子邮件?我想要一个创建 .CSV 文件的页面进程,将该 .CSV 文件添加到 APEX 生成的电子邮件中,并在单击 APEX 页面上的按钮时发送该电子邮件。
我还使用以下Oracle 文档作为指导。
单击“应用更新”按钮时的当前页面处理代码:(当代码运行时,会创建 .CSV 文件并发送电子邮件,但电子邮件不包含 .CSV 文件作为附件)
declare
l_body_html varchar2(4000);
l_subj varchar2(200);
l_from varchar2(200);
l_cc_address varchar2(2000);
l_cc varchar2(500);
l_id NUMBER;
begin
l_subj := '***TEST - DQ MANUAL EDIT - Daily Field Report - ***TEST';
l_body_html := '<html>
<head>
<style type="text/css">
body{font-family: Calibri, Arial, Helvetica, sans-serif;
font-size:11pt;
margin:30px;
color:#1F497D;
background-color:#ffffff;}
</style>
</head>
<body>';
l_body_html := l_body_html || '<body><div><p><span style="font-size:12.0pt;font-family:Calibri,sans-serif;color:#1F497D;font-weight:bold;">Attached is the manual edit report for today.</b>';
l_body_html := l_body_html;
l_body_html := l_body_html;
l_body_html := l_body_html || '<p>' || ' will contact you in the near future to prioritize the request and discuss an estimated completion date. Please note that many requests are received daily and it can take several days to couple of weeks on some requests. If this request is of a high critical nature, please feel free to contact directly or reply to this email.</p>';
l_body_html := l_body_html || '</div></body></html>';
begin
-- Set the MIME type
owa_util.mime_header( 'application/octet', FALSE );
-- Set the name of the file
htp.p('Content-Disposition: attachment; filename="Manual_Edit_Selected_Records.csv"');
-- Close the HTTP Header
owa_util.http_header_close;
-- Loop through all rows in EMP
htp.prn('Data Fields,Grouping,Channel,Month,Year,Edits' || chr(13));
for x in (select
dq_attribute,
dq_grouping,
case
when DQ_CHANNEL = 'Retail' then 'Retail/CD'
when DQ_CHANNEL = 'Consumer Direct' then 'Retail/CD'
else DQ_CHANNEL
end as dq_channel,
to_char(to_date(INSERT_DATE,'yyyy-mm'),'Month') as Month,
to_char(to_date(INSERT_DATE,'yyyy-mm'),'YYYY') as Year,
case when count(reason_for_change)=0 then 'N/A' else to_char(count(reason_for_change)) end as Edits
from DQ_MANUAL_EDIT
where
decode(NVL(:P50_DQ_ANALYST, 'ALL'), 'ALL','ALL',DQ_ANALYST) = NVL(:P50_DQ_ANALYST, 'ALL')
and decode(NVL(:P50_DQ_FIELD, 'ALL'), 'ALL','ALL',DQ_ATTRIBUTE) = NVL(:P50_DQ_FIELD, 'ALL')
and decode(NVL(:P50_DQ_CHANNEL, 'ALL'), 'ALL','ALL',DQ_CHANNEL) = NVL(:P50_DQ_CHANNEL, 'ALL')
and decode(NVL(:P50_DQ_GROUPING, 'ALL'), 'ALL','ALL',DQ_GROUPING) = NVL(:P50_DQ_GROUPING, 'ALL')
and decode(NVL(:P50_DQ_IMS, 'ALL'), 'ALL','ALL',DQ_IMS_NUM) = NVL(:P50_DQ_IMS, 'ALL')
and NVL(to_char(to_date(:P50_EDIT_DATE_FROM,'MM/DD/YYYY'),'MM/DD/YYYY'), to_date(sysdate,'MM/DD/YYYY')) <= trunc(INSERT_DATE)
and NVL(to_char(to_date(:P50_EDIT_DATE_TO, 'MM/DD/YYYY'),'MM/DD/YYYY'), to_date(sysdate-28,'MM/DD/YYYY')) >= trunc(INSERT_DATE)
Group by
dq_attribute,
INSERT_DATE,
dq_grouping,
dq_channel
order by to_char(to_date(INSERT_DATE,'yyyy-mm'),'YYYY') desc,
to_char(to_date(INSERT_DATE,'yyyy-mm'),'mm'), dq_attribute asc
)
loop
-- Print out a portion of a row,
-- separated by commas and ended by a CR
htp.prn(
'"' ||x.dq_attribute||'","'||
x.dq_grouping ||'","'||
x.dq_channel ||'","'||
x.Month ||'","'||
x.Year ||'","'||
x.Edits || '"' || chr(13));
end loop;
-- Send an error code so that the
-- rest of the HTML does not render
htmldb_application.g_unrecoverable_error := true;
end;
l_id := APEX_MAIL.SEND(
--P_TO => :P53_EMAIL_TO,
P_TO => 'first_name.last_name@company.com',
P_FROM => 'IT.DEPT@company.com',
P_BODY => l_body_html,
P_BODY_HTML => l_body_html,
P_SUBJ => l_subj);
FOR c1 IN (SELECT filename, blob_content, mime_type
FROM APEX_APPLICATION_FILES
WHERE ID IN (123,456)) LOOP
APEX_MAIL.ADD_ATTACHMENT(
p_mail_id => l_id,
p_attachment => c1.blob_content,
p_filename => c1.filename,
p_mime_type => c1.mime_type);
END LOOP;
COMMIT;
wwv_flow_mail.push_queue(
P_SMTP_HOSTNAME => 'mailhost.company.net',
P_SMTP_PORTNO => '31'
);
end;