2012-09-06 70 views
1

我遇到了Oracle ApEx集合的問題,並且不確定爲什麼我沒有看到我認爲我會的結果。Oracle ApEx集合信息未出現在PL/SQL區域中

首先,我使用的是Oracle APEX 3.0

我基本上有以下設置爲與問候在這個例子中所描述的喬爾卡爾曼保存複選框,即:

http://joelkallman.blogspot.com.au/2008_03_01_archive.html

釷描述我的情況,我憎恨用戶在記錄列表中選擇任意數量的複選框,使用Joel的示例,所選記錄存儲在頂點集合「EMP_COLLECTION」中。

現在所有這些似乎都正確地存儲在'EMP_COLLECTION'中,但是當我試圖從集合內訪問這些存儲值時,在作爲jQuery UI對話框的PL/SQL區域內,我似乎無法獲取值。

此時此頁面尚未提交。因此,當用戶選擇一些正在存儲在後端的ajax複選框到'EMP_COLLECTION'中時,用戶然後按下一個按鈕,調用一個基本上執行.dialog('open')調用的javascript函數,這一切都正常。

這就要求凡在Region Header,我已經定義了以下我的PL/SQL區塊:

<div id="dialog-1up-br" title="Requests - No Email Address"><img src="#WORKSPACE_IMAGES#info.gif" height="30" width="30"/> 
    Please Note: You are receiving this notification as a valid email address is not available for: <br/><br/> 

我區源出於此PL/SQL區塊是:

BEGIN 
    htp.p('<ul>'); 
    FOR i_rec IN (SELECT a.c001 staff_id 
       FROM apex_collections a 
       WHERE a.collection_name = 'EMP_COLLECTION') LOOP 
    htp.p('<li>'||i_rec.staff_id ||'</li>'); 
    END LOOP; 
    htp.p('</ul>'); 
END; 

所以基於上面的這些信息,當我的jQuery UI對話框出現在這個PL/SQL區域的基礎上時,我的區域頭信息正確顯示,但是下面沒有任何信息出現,基於我的區域源PL/SQL?

是因爲我沒有真正提交我的頁面,因爲我可以在會話變量中看到我的集合,並且它有正確的信息嗎?

任何幫助,將不勝感激。

謝謝。

+0

您是否在任何時候都設置了truncate集合? – Tom

+0

嗨湯姆,我會看看,但我不這麼認爲。那麼你是根據你的問題說,我正在嘗試做什麼,實際上應該工作嗎?看到我的評論下面Tony的回覆:iframe。謝謝。 – tonyf

回答

0

謝謝託尼和湯姆再次爲您提供幫助。

如你所說託尼,我基本上執行您介紹了這裏什麼:

由於您使用APEX 3.0,刷新報表區域可能沒有這麼簡單 (我不記得肯定) 。在這種情況下,也許你可以在按需處理過程中構造區域的整個HTML,並且 返回它,然後你的Javascript可以調用按需處理過程,並且 用該過程返回的HTML填充(HTML)區域。

基本使用的需求的過程,以獲得所需的結果集,這是我從一個JavaScript函數調用,從我的頁面上的「提交」按鈕觸發。現在使用一個HTML區域,我已經設置了區域標題和區域頁腳,我只需使用$('#div-id')。html(gReturn)將我的結果集返回到我的對話框;從我的點播過程。

一切正常。

再次感謝。

2

如果PL/SQL區域是當前頁面的一部分,則當頁面加載時會呈現其內容。當你使用Javascript「揭示」它時,它不會刷新,它仍然顯示它最初顯示的內容。

如果您使用報告區域而不是PL/SQL區域,則可以從Javascript動態刷新它。你只需要一個特殊的報告模板來構造一個列表而不是一個表格。

由於您使用APEX 3.0,刷新報告區域可能不是那麼簡單(我不記得肯定)。在這種情況下,也許您可​​以在按需過程中構建區域的整個HTML並將其返回,然後您的Javascript可以調用按需過程並使用過程返回的HTML填充(HTML)區域。

+0

嗨,託尼,我的報告與複選框實際上是通過iframe調用到主頁面,所以它是在我通過JavaScript執行apex集合處理的iframe中。儘管我通過基於另一個頁面的iframe來處理這個問題,但我仍然會認爲我應該可以從我的Apex會話中的任何頁面訪問整個「EMP_COLLECTION」 - 這聽起來適合您嗎?謝謝。 – tonyf

+0

是的,你應該這樣做,但是你試圖展示收集數據的區域正在顯示當頁面加載時有什麼,而不是現在有什麼。它需要「刷新」,但如果不重新加載頁面,則無法刷新PL/SQL區域。 –

+0

所以託尼,不管怎麼樣,我是否還沒有做我需要做的事情呢?不知道該怎麼做,關於上面的主要答案。僅供參考,我正在使用Oracle ApEx 3.0.1。我可以使用jQuery刷新基於oracle apex收集的數據,然後將該信息提供給.html()? – tonyf

0

我只是插一腳。 :-)
老實說,唯一出錯的地方就是你的iframe被渲染的地步。有幾件事你可以做的:

  • 在渲染上創建iframe,但不設置其來源。當單擊按鈕 時,設置源,然後.dialog
  • 不要在渲染上創建iframe。當按鈕被調用時,創建 的iframe $("div#container").html("<iframe src='...'></iframe>"),其次是.dialog
  • 還有的乾脆重裝的iframe源選項 ,看到 Reload an iframe with jQuery

這應該也是解決這個問題沒有太多的麻煩。