Search code examples
javascriptjqueryoracle-apextabular-form

Oracle APEX | Validate Tabular form Row by Row


I have tabular form to add order details for an order,

Tabular form has Popup LOV with this custom attribute:

onchange="javascript:do_cascade(this);"

here is the code of the last function

        function do_cascade(pThis)
    {

        var row_id=pThis.id.substr(4);
        apex.server.process("cascade_order_values", { x02: $(pThis).val()},
                           {type:"GET", dataType:"json", success:function(json)
                                                { 
                                                    var cond=0;
    // this var as flag changes to 1 when the new value found in tabular form.
                                                    var l_code=$(pThis).val();
    // to catch selected value to compare it with tabular form values
                                                    for (i =row_id;i>0;i=i-1)
    // this loop in order to check all tabluar form #f02_ column values
                                                        {
                                                           var id=('000'+i);//.slice(-4,0);
                                                           var curr_id='#f02_'+id;
                                                           var curr_code=$(curr_id).val();
                                                            if(curr_code==l_code)
                                                                {
                                                                    $('#f05_'+id).val('got it');
                                                                    $('#f05_'+id).focus();
                                                                   // i=0; cond=1;
                                                                } else cond=0;
                                                        }
                                                    if (cond==0) 
                                                    {
                                                        $('#f06_'+row_id).val(json.price);
                                                        $('#f04_'+row_id).val(json.pro_name);   
                                                    }
    else {
 // I want to write something here to delete the new added row
         }
                                                }
                             }
                           );
    }

what the last function do shortly: when selected value change of the Popup LOV the function call application process to query and return some data and set them to the tabular form fields, and this perform correctly. here is the application process than this function process:

    declare
    price number;
    pro_code nvarchar2(20):=null;
    pro_name nvarchar2(50);

begin
    pro_code:=apex_application.g_x02;

    SELECT nvl(sell_price,0) into price from products where product_code=pro_code;

    SELECT C.CAT_NAME || ' - ' || U.UNIT_NAME into pro_name 
        FROM PRODUCTS P , CATEGORIES C, UNITS U
        WHERE P.CAT_ID=C.CAT_ID AND P.UNIT_ID=U.UNIT_ID AND P.PRODUCT_CODE=pro_code;

    sys.htp.p('{"price":"'||price||'", "pro_name":"'||pro_name||'","code":"'||pro_code||'"}');
EXCEPTION 
    WHEN others 
        THEN
            pro_name:='الرقم غير صحيح';
            sys.htp.p('{"price":"'||0||'", "pro_name":"'||pro_name||'","code":"'||pro_code||'"}');
end;

THE PROBLEM IS:

I want to check if the selected product code exist in the tabular form that mean check tabular form row by row from current row to the first one when the selected value exists move the focus to item #f05_ and set a value to it and then delete the new row that was added to the tabular form

How can I do that Please.

Help Please!..


Solution

  • The problem is in deleting the whole row from tabular form,

    so replace your conditional lines with this code:

    if(curr_code==l_code) 
    { 
       $(pThis).val(''); 
       $('#f02_'+row_id).closest("tr").remove();
       $('#f05_'+id).val(parseInt($('#f05_'+id).val())+1); 
       $('#f05_'+id).focus(); i=0; cond=1; } 
    else 
        cond=0;