How To Perform Row By Row Validation On An Oracle Apex Tabular Form Using Ajax?
Using the same validation/processing that I performed, based on this thread: Calling an Oracle Function via Ajax for on the spot Validation Purposes in Oracle APEX v4.2.2 I now hav
Solution 1:
How I would try to solve it. Note that this doesn't cover all (any?) eventuality or much error handling. You'll have to elaborate on it a bit yourself. eg I used input for a selector, you'll need "select". The arrays may not match. You may need a completely other selector such as by td[headers]. Maybe your return object will need to hold other or more values. Your js may need more expanding upon. Nevertheless it should provide you with a good base to start from!
Javascript:
functionvalidaterows(){
var arrf01 = [], arrf02 = [];
//fetch all the values from the source columns and put them in//a javascript array.
$("input[name=f03]").each(function(){
arrf01.push($v(this));
});
$("input[name=f04]").each(function(){
arrf02.push($v(this));
});
//provide the constructed arrays to the on-demand process by using//the global f## arrays
apex.server.process ( "MY_PROCESS", {
f01: arrf01
, f02: arrf02
}, {
, success: function( pData ) {
//pData should be an object, because jquery will have parsed the returned json-string
apex.debug(pData);
$.each(pData.validationArray, function(index, value){
if ( value === 'INVALID' ) {
// do something here when the result is invalid// maybe you want to color something red for examplealert('The data at row '+index+' is not valid!');
};
});
}
} );
}
On-demand plsql process:
DECLARE
l_return VARCHAR2(4000);
BEGINFOR i IN apex_application.g_f01.count
LOOP
-- remember: the f## arrays are varchar arrays. Important for comparisons.-- Also take into account that the values could NOT be numeric at all.-- you'll probably want to run each value through an is-number check or else -- you'll run into ORA errors
IF to_number(apex_application.g_f01(i)) > to_number(apex_application.g_f02(i))
THEN
l_return := l_return ||',"INVALID"';
ELSE
l_return := l_return ||',"VALID"';
END IF;
END LOOP;
IF l_return ISNOTNULLTHEN-- create a json string -- holds an object with 1 property (validationArray) with the value being-- an array holding a value for each row submitted
l_return :='{"validationArray":['||LTRIM(l_return, ',')||']}';
END IF;
-- write the output to the buffer
htp.p(l_return);
END;
Post a Comment for "How To Perform Row By Row Validation On An Oracle Apex Tabular Form Using Ajax?"