0

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 ページでボタンがクリックされたときにその電子メールを送信する 1 ページ プロセスが必要です。

次の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;
4

1 に答える 1

0

このトピックに関連する Oracle フォーラムで、質問への回答に役立つ有益なディスカッションを見つけました: https://forums.oracle.com/forums/thread.jspa?threadID=989396

電子メールへの添付ファイルは、電子メール自体とは別の物理ファイルではないという議論があります。これは、最初に物理ファイルを作成してから、電子メールの下書きを送信するときに問題になる可能性があります。Web メール クライアントや電子メール ソフトウェア アプリケーションを使用して電子メールを送信するときとは異なります。utl_mail電子メール メッセージの MIME-BODY を変更して添付ファイルを追加する方法を示す、パッケージの仕組みに関する Bill Verreyne の説明を参照してください。

簡単に言えば、概念は、データを電子メール自体の本文に入れるだけですが、適切な MIME ヘッダーによって「添付ファイル」として扱われることになっている部分を特定することです。UTL_MAILこれを管理する最も簡単な方法のように見えますが、おそらくいくつかの単純なヘッダーを忍耐と試行錯誤で手作りするか、APEX_MAILパッケージでさらに実験することができます.

最も重要な部分をコピーしました。これは、「添付ファイル」を含むメール本文の例です...メール内に物理ファイルがまったくないことに注意してください。1 つの電子メール メッセージのように最初から最後まで読み上げます。

From: noreply@oracle-server.domain
To: scott@tiger.com
Subject: =?ISO-8859-1?Q?Sample=20Mail=20from=20UTL=5FMAIL?=
X-Priority: 3
Content-Type: multipart/mixed; boundary="------------4D8C24=_23F7E4A13B2357B3"
Return-Path: noreply@oracle-server.domain
Date: 19 Nov 2009 07:45:15 +0200
Mime-Version: 1.0

This is a multi-part message in MIME format.
--------------4D8C24=_23F7E4A13B2357B3
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

This is the e-mail message part that the mail reader will display.


--------------4D8C24=_23F7E4A13B2357B3
Content-Type: text/csv; name="sample.csv"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline; filename="sample.csv"

col1,col2,col3
col1,col2,col3
col1,col2,col3
--------------4D8C24=_23F7E4A13B2357B3--
于 2012-12-04T01:20:42.280 に答える