APEX 4.1 Shuttle Null on Right

时间:2012-11-12 15:33:51

标签: oracle-apex

APEX版本:4.1.1.00.23

我有一个穿梭机,根据从选择列表中选择的内容填充正确的站点。每当从选择列表中选择一个项目时,右侧面板上将填充正确的一个或多个项目,但总会添加一个空值。我如何获得null?

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();"

Applicaiton / Page进程调用(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;

2 个答案:

答案 0 :(得分:2)

您的ajax进程始终返回以~colsep~

为后缀的内容

当你在firebug中运行这样的字符串时:

"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;

答案 1 :(得分:0)

关于汤姆答案的一切都是正确的。我不得不对该行进行一次修改

l_return := rtrim(l_return, '~colsep~');

运行该代码时,最后两个字母将被删除。如果我在航天飞机上有多个物品,第一个物品就可以了,但第二个物品会被切断。 例如: 使用代码: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;

感谢汤姆让我的心理滚动!