Ajax + apex 4.2 =apex.server. proces api
Vyžaduje to, abyste měli na stránce proces na vyžádání nebo proces aplikace. V něm musíte zavolat svou funkci a zadat parametry, kterými mohou být položky stránky. Chcete-li poskytnout návrat, zapište hodnoty do vyrovnávací paměti http pomocí volání htp.p
.
DECLARE
some_var1 VARCHAR2(50);
BEGIN
some_var1 := my_package.my_function(:P1_EMPNO, :P1_DEPTNO);
-- write values back
htp.p(some_var1);
END;
Můžete snadno poskytnout apex.server.process
s položkami stránky. Další zpracování je vše v javascriptu.
Upozornění:DataType je standardně nastaven na JSON, a pokud tedy nezadáte žádný jiný výchozí datový typ a nevrátíte řetězec json, zobrazí se chyba analýzy. Pokud tedy v rámci procesu na vyžádání vrátíte text, například NEPLATNÝ, nezapomeňte nastavit datový typ na text!
apex.server.process ( "MY_PROCESS", {
pageItems: "#P1_DEPTNO,#P1_EMPNO"
}, {
dataType: "text"
, success: function( pData ) {
//pData should contain VALID or INVALID - alert it
alert(pData);
if ( pData === 'INVALID' ) {
// do something here when the result is invalid
// maybe you want to color something red for example
alert('The data you have entered is invalid');
};
}
} );
Nerozděloval bych to na dynamičtější akce, než je nutné, i když by to možná šlo. Osobně nemám rád pokusy o použití PLSQL bloku dynamickou skutečnou akci, jen proto, že je nejasnější jednat, pokud chcete řešit návratové hodnoty.
Stačí nastavit tlačítko tak, aby neodesílalo stránku, ale akci definovaný dynamickým působením. Poté v dynamické akci vytvořte jednu skutečnou akci typu spusťte javascript a použijte tam volání ajax se zpětným voláním.