2012-11-12 28 views
1

APEX版本:4.1.1.00.23APEX 4.1 Shuttle右側爲

我有一個班車根據從選擇列表中選擇的內容填充正確的站點。無論何時從選擇列表中選取一個項目,正確的項目或項目都將填充在右側面板上,但始終會添加一個空值。我如何獲得空行程?

enter image description here

班車名稱:P51_Shuttle 選擇列表名稱:P51_Analyst

這裏是我的代碼: HTML標題:

<script type="text/javascript"> 

function LoadRightPane() 
{ 
    var objDQAnalyst = document.getElementById("P51_DQ_ANALYST"); 
    var ajaxRequest = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=get_DQAttributes',0); 
    ajaxRequest.add('P51_DQ_ANALYST',objDQAnalyst.value); 
    ajaxResult = ajaxRequest.get(); 

//alert(ajaxResult); 

    if(ajaxResult) 
    { 

    var shuttleRight = document.getElementById("P51_SHUTTLE_RIGHT"); 
     shuttleRight.options.length = 0; 
     var attrArray = ajaxResult.split("~colsep~"); 
     for(var i=0; i < attrArray.length; i++) { 
     shuttleRight.options[i] = new Option(attrArray[i], attrArray[i]); 
     } 
    } 
    else 
    { 
     shuttleRight.options.length = 0; 
    } 
    ajaxRequest = null; 
} 

function moveitem(item) { 
return; 
    s_left = document.getElementById("P51_SHUTTLE_TO_LEFT"); 
    db.transaction(function(tx){ 
     tx.executeSql('select distinct DQ_ATTRIBUTE from DQ_MANUAL_EDIT where DQ_ANALYST = ?',[item],function(tx,results) 
    { 
     for (var i=0; i < s_left.options.length;i++) 
    { 
    if (results.value == s_left.options[i].value) 
    { 
     s_left.options[i].selected = true; 
     g_Shuttlep_v15.move(); 
    } 
    } 
    }); 
}); 
} 

</script> 

頁HTML正文屬性:

onLoad="Javascript:LoadRightPane();" 

應用程序了/頁過程調用(get_DQAttributes)

DECLARE 

L_RETURN VARCHAR2(2000):= NULL ; 

BEGIN 

BEGIN 

FOR rec IN ( 
select distinct dq_attribute 
from DQ_MANUAL_EDIT 
where dq_analyst = :P51_DQ_ANALYST 
)  
LOOP  
L_RETURN := L_RETURN || rec.dq_attribute || '~colsep~' ; 

END LOOP; 

end; 


htp.prn(L_RETURN); 

END; 
+0

null是在那裏開始,或每次添加一個項目? – Tom

+0

@Tom我添加一個項目後如何刪除空值? –

回答

2

你的AJAX程序總是返回一些與~colsep~

後綴當您在螢火運行串那樣:

"test1~colsep~".split("~colsep~") 

的結果將是一個具有2個元素的陣列:

["test1", ""] 

所以你的NULL元素源於此。爲了解決這個問題,只需調整ajax進程以修剪最後一個分隔符RTRIM

DECLARE 
    L_RETURN VARCHAR2(2000):= NULL ; 
BEGIN 
    FOR rec IN (select distinct dq_attribute 
        from DQ_MANUAL_EDIT 
       where dq_analyst = :P51_DQ_ANALYST)  
    LOOP  
     L_RETURN := L_RETURN || rec.dq_attribute || '~colsep~' ; 
    END LOOP; 
    l_return := rtrim(l_return, '~colsep~'); 

    htp.prn(L_RETURN); 
END; 
+0

您提供的解決方案正在運行。然而,最後兩個字符被切斷。如果我在右側面板上有一個項目,我會看到:'Sco'而不是'Score'。如果我在右側面板上有兩個項目,我會看到'分數',然後'達'而不是'分數',然後'日期'。有任何想法嗎? –

+0

我看到你已經發布了一個解決方案。奇怪的是,當我運行'從dual'選擇RTRIM('test〜colsep〜test2〜colsep〜','〜colsep〜')時,輸出爲'test〜colsep〜test2'。不知道出了什麼問題,但是你的substr確實是修剪最後一塊的好方法! – Tom

0

所有關於湯姆的答案都是正確的。我必須對該行進行一次修改

運行該代碼時,最後兩個字母將被刪除。如果我在班車中有多件物品,第一件物品會很好,但第二件物品會被切斷。 例如: 使用代碼:l_return := rtrim(l_return, '~colsep~'); 穿梭的右側面板看起來像這樣

Score 
Da 

但實際的文字應該是

Score 
Data 

所以我用了「SUBSTR」功能現在,它正在

l_return := substr(l_return,0,(length(l_return)-8)); 

這裏是整個代碼

DECLARE 
    L_RETURN VARCHAR2(2000):= NULL ; 
BEGIN 
    FOR rec IN (select distinct dq_attribute 
        from DQ_MANUAL_EDIT 
       where dq_analyst = :P51_DQ_ANALYST)  
    LOOP  
     L_RETURN := L_RETURN || rec.dq_attribute || '~colsep~' ; 
    END LOOP; 
     L_RETURN := substr(l_return,0,(length(l_return)-8)); 

    htp.prn(L_RETURN); 
END; 

謝謝湯姆讓我的腦球滾動!!!