Currency Converter APEX plug-in

Na een vraag op het oracle forum over het converteren van valuta, heb ik besloten om hier een plug-in voor te schrijven.
De plug-in is niet echt heel spannend maar doet wel wat die moet doen.

Op basis van de koers die opgehaald wordt bij rate-exchange.appspot.com wordt de berekening uitgevoerd. Dit is een gratis webservice die de koers als JSON formaat terug geeft. Hier zat meteen de grootste uitdaging. Door de “same-origin policy” standaard mag je in javascript geen sites buiten het aanroepend domein benaderen. Wat je doet is een “Cross-origin resource sharing” aanroep en dat mag dus niet.
De aanroep resulteert in een No ‘Access-Control-Allow-Origin’ header is present on the requested resource.” error.

Een uitzondering hierop wordt gemaakt indien de URL via JSONP kan worden aan geroepen. Door het toevoegen van “&callback=?” aan de URL werkt de site van rate-exange op die manier. Nu krijg je wel de JSON data binnen.
De code hiervoor ziet er dan alsvolgt uit

var url = “http://rate-exchange.appspot.com/currency?from=”+$v(action.attribute01)+”&to=”+$v(action.attribute02)+”&callback=?”;

jQuery.ajax({  type: “GET”,
url: url ,
dataType: “json”,
success: function(data) {
$s(action.attribute04,($v(action.attribute03)*data.rate).toFixed(2));
}
});

Waarbij action.attributeXX de parameters van de plug-in zijn.

Voor de selectlists van de valuta keuzes wilde ik ook een webservice gebruiken. Dit hoeft niet via javascript maar kan “gewoon” door een select die de (XML) data van de webservice kan vertalen. Er is een webservice met deze informatie beschikbaar bij de ISO organisatie via deze URL.

select distinct extractvalue(value(x), ‘CcyNtry/CcyNm/text()’) ccynm
, extractvalue(value(x), ‘CcyNtry/Ccy/text()’)   ccy
from table(xmlsequence(extract(sys.xmltype.createxml(sys.urifactory.geturi(‘http://www.currency-iso.org/dam/downloads/table_a1.xml’) .getclob()), ‘//ISO_4217/CcyTbl/CcyNtry’))) x
order by ccynm

Dit werkt op apex.oracle.com echter niet, omdat je er een ACL voor moet aanmaken die toestemming geeft om de externe site te benaderen. In de demo gebruik ik dan ook STATIC selectlists.

Kijk op apex-plugin.com om de plugin te downloaden en hier voor een demo ervan.