2016-04-27 35 views
0

ページの検証を行うためにページを送信する前に、APEX 4.2の表形式で各行のフィールドを合計してその行の合計を取得するにはどうすればよいですか?例えば頂点の頂点を頂点で4.2で検証する

フィールドb5あり、フィールドc第二行の合計5ある場合、最初の行は、フィールドa66フィールドb内の最初の行の合計は12であるべきであり、2行目を持っている場合10である必要があります。

だから、私は列ではない列に基づいて合計を取得したい。それは可能ですか?

+0

私はあなたがして、列Bセットのカスタム属性のonchange =「機能()」で、列AとBを追加する機能を作る示唆 – brenners1302

答えて

0

はい、可能です。もしあなたがjavascript/jqueryを知っていれば、あなたは私の解決策にうまくいくでしょう。

合計したいフィールドの名前属性(ブラウザのinspect要素を使用)を取得します。 oracle apexのフィールド名は通常 'f01'や 'f02'のようになります。あなたがフィールドを取得すると、JavaScript関数を作成したり、あなたが好きならば、あなたは、このいずれかを使用することができます:上記

function sumUpRows(columnforsum,itemstobeadded){ 
     var numofcols = arguments.length; 
     var numofrows = $("[name=" + arguments[0] + "]").length; 
     var summ = 0; 
     for(x=0;x<numofrows;x++){ 
      for(i=1;i<numofcols;i++){ 
      summ = summ + Number($("[name=" + arguments[i] + "]").eq(x).val()); 
      } 
      $("[name=" + columnforsum + "]").eq(x).val(summ); 
     } 
    } 

入れ機能をあなたのページの「機能とグローバル変数の宣言」の部分で。次に、「ページ送り前」の動的アクションを作成します。このコード行を入れて、その後、「JavaScriptを実行」するためのアクションを設定します。

sumUpRows("nameoffieldwheresumwillbeassigned","nameofitem1","nameofitem2","nameofitem3"); 

がここにサンプルです:コメント欄でのご質問については

sumUpRows("f04","f01","f02","f03"); 

、答えはイエスです。あなたがその行のボックスを埋めるように自動的に行の合計を取得するには、この機能を使用することができます。

function sumUpRowsAsYouGo(whatelement){ 
    var numofrows=$("[name=f01]").length; 
    var summ = 0; 
    for(i=0;i<numofrows;i++){ 
     if($(whatelement).attr("id") == $("[name=" + $(whatelement).attr("name") + "]").eq(i).attr("id")){ 
      for(a=1;a<(arguments.length-1);a++){ 
       summ += Number($("[name="+ arguments[a] + "]").eq(i).val()); 
      } 
      $("[name="+ arguments[arguments.length-1] + "]").eq(i).val(summ); 
      break; 
     } 
    } 
} 

あなたはこのように、この機能を使用することができます(「ページのロード時に実行」でこれらの行を入れてそして、あなたの表形式のフォーム領域のダイナミックなアクション)「リフレッシュ後」:

$("[name=f01]").change(function(){ 
      sumUpRowsAsYouGo(this,"f01","f02","f03","f04");   
} 
); 

$("[name=f02]").change(function(){ 
      sumUpRowsAsYouGo(this,"f01","f02","f03","f04");   
} 
); 

$("[name=f03]").change(function(){ 
      sumUpRowsAsYouGo(this,"f01","f02","f03","f04");   
} 
); 
+0

です送信ボタンを押して合計を得るのを待つのではなく、ユーザーがフィールドに数字を入れてタブアウトした後に合計を計算する方法がありますか? –

+0

@DarrellLawrence、私の答えを確認してください。私はそれを更新しました。 – Vance

+0

@DarrellLawrence、もう1つの議論が欠落しています。関数呼び出しの最後の引数として合計をキャッチする列の名前を入れます。名前が "f11"の場合、すべての列のコールバック関数には次のものが含まれていなければなりません: 'sumUpRowsAsYouGo(this、" f04 "、" f05 " 、 "f06"、 "f07"、 "f08"、 "f11"); ' – Vance

関連する問題