感謝湯姆我能得到我最初的問題解決了,我現在能夠有一個表格的形式自動發送出去的電子郵件託運的行,唯一的問題我現在已經是它發送了一個電子郵件副本,多少次複選框被選中。多封郵件出去甲骨文的Apex過程
如果你檢查過一行時,它發出一個電子郵件,但如果你檢查過2(或更多)排它發出的每封電子郵件兩次,三次,3行。
我正在使用標準的ApplyMRU進程來更新行和單獨的進程來發送電子郵件。
該過程如下。
我知道我錯過了這裏的任何想法?
DECLARE
l_checked_row NUMBER;
l_id NUMBER;
lc_message VARCHAR2 (4000);
l_pkey NUMBER;
l_r_reqs reqs%ROWTYPE;
BEGIN
FOR i IN 1..apex_application.g_f01.count
LOOP
l_checked_row := apex_application.g_f01(i);
-- assuming that array F02 maps to column PKEY from table REQS
l_pkey := apex_application.g_f02(l_checked_row);
-- get details required for creating the mail body
-- It's generally easier to just fetch the row instead of having to
-- define variables to cover every field you need.
SELECT *
INTO l_r_reqs
FROM reqs
WHERE pkey = l_pkey;
-- Dont forget that select into may generate no_data_found or too_many_rows !
lc_message := 'Date Written :' || l_r_reqs.date_wrote || CHR (10);
lc_message := lc_message || 'Sales :' || l_r_reqs.sales || CHR (10);
lc_message := lc_message || 'Client :' || l_r_reqs.client || CHR (10);
lc_message := lc_message || 'Position :' || l_r_reqs.job || CHR (10);
lc_message := lc_message || 'Who Covered :' || l_r_reqs.who || CHR (10);
lc_message := lc_message || 'Date Covered :' || l_r_reqs.date_covered || CHR (10);
l_id := APEX_MAIL.SEND(
p_to => '[email protected]',
p_from => '[email protected]',
p_subj => ''
|| l_r_reqs.who
|| ' Has Covered '
|| l_r_reqs.job
|| ' at '
|| l_r_reqs.client
|| CHR (10),
p_body => lc_message);
-- avoid commits unless ab-so-lu-te-ly necessary. Apex implicit commits can make the flow hard enough to
-- understand as it is.
END LOOP;
apex_mail.push_queue();
END;
這是我從APEX調試中得到的。
會話狀態:保存「P14_SALES」 - 保存相同的值:「伊恩Kimmett」 過程 - 點:ON_SUBMIT_BEFORE_COMPUTATION 分支點:AFTER_SUBMIT 標籤:進行分支的標籤請求 分支點:計算 過程點之前在驗證 驗證: 執行基本和預定義的驗證: 執行自定義驗證: 分支點:處理 程序之前 - 點:AFTER_SUBMIT ...進程 「ApplyMRU」 - 類型:MULTI_ROW_UPDATE ...進程 「ApplyMRD」 - 類型:MULTI_ROW_DELETE ......跳過,因爲條件或授權評估結果爲FALSE ...進程「SEND_MAIL」 - 類型:PLSQL ......進程行1 ...執行語句:begin DECLARE l_checked_row NUMBER; l_id NUMBER; lc_message VARCHAR2(4000); l_pkey NUMBER; l_r_reqs reqs%ROWTYPE; BEGIN FOR I IN 1..apex_application.g_f01.count LOOP l_checked_row:= apex_application.g_f01(i); l_pkey:= apex_application.g_f02(l_checked_row); SELECT * INTO l_r_reqs FROM reqs WHERE pkey = l_pkey; lc_message:='寫入日期:'|| l_r_reqs.date_wrote || CHR(10); lc_message:= lc_message || '銷售:'|| l_r_reqs.sales || CHR(10); lc_message:= lc_message || '客戶:'|| l_r_reqs.client || CHR(10); lc_message:= lc_message || '位置:'|| l_r_reqs.job || CHR(10); lc_message:= lc_message || '誰涵蓋:'|| l_r_reqs.who || CHR(10); lc_message:= lc_message || '涵蓋的日期:'|| l_r_reqs.date_covered || CHR〜 ......處理行2 ...執行語句:開始DECLARE l_checked_row NUMBER; l_id NUMBER; lc_message VARCHAR2(4000); l_pkey NUMBER; l_r_reqs reqs%ROWTYPE; BEGIN FOR I IN 1..apex_application.g_f01.count LOOP l_checked_row:= apex_application.g_f01(i); l_pkey:= apex_application.g_f02(l_checked_row); SELECT * INTO l_r_reqs FROM reqs WHERE pkey = l_pkey; lc_message:='寫入日期:'|| l_r_reqs.date_wrote || CHR(10); lc_message:= lc_message || '銷售:'|| l_r_reqs.sales || CHR(10); lc_message:= lc_message || '客戶:'|| l_r_reqs.client || CHR(10); lc_message:= lc_message || '位置:'|| l_r_reqs.job || CHR(10); lc_message:= lc_message || '誰涵蓋:'|| l_r_reqs.who || CHR(10); lc_message:= lc_message || '涵蓋的日期:'|| l_r_reqs.date_covered || CHR〜 分支點:處理後 ...評估分支:「AFTER_PROCESSING」類型:REDIRECT_URL按鈕:(無按鈕按)條件:(無條件) 重定向到f?p = 950:14:0 ::::: 停止APEX引擎檢測 停止APEX引擎檢測 最終的提交
這是頁面上唯一的過程嗎? – Tom
只要這樣以及ApplyMRU和ApplyMRD進程,就不會使用ApplyMRD,因爲我們不希望它們刪除請求。 – greg
我誠實地看到沒有理由爲什麼它會這樣做。你可以請嘗試通過放入一些'apex_debug.message(...)'行來進行調試嗎?我無法想象這個循環是這樣做的,但嘿。當我運行一個解構的作品時,我沒有問題,但我也沒有發送郵件。 – Tom