1

APEX バージョン: 4.1.1.00.23

選択リストから選択されたものに基づいて適切なサイトを作成するシャトルがあります。選択リストから項目が選択されるたびに、右側のパネルに正しい項目が表示されますが、常に null が追加されます。どうすればヌルに乗れますか?

ここに画像の説明を入力

シャトル名: 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;
4

2 に答える 2

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;
于 2012-11-12T18:31:02.157 に答える
0

トムの答えはすべて正しいです。行に1つの変更を加える必要がありました

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

そのコードを実行すると、最後の 2 文字が削除されます。また、シャトルに複数のアイテムがある場合、最初のアイテムは問題ありませんが、2 つ目のアイテムは切断されます。例: コードの使用: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;

私の精神的なボールを転がしてくれたトムに感謝します!!!

于 2012-11-13T16:03:44.890 に答える