function launchEvent(obj, eventname){ //Internet explorer if(window.ActiveXObject){ eventname = "on" + eventname; obj.fireEvent(eventname); } //Firefox e browser Gecko if(navigator.product == 'Gecko'){ var evt = document.createEvent("HTMLEvents"); evt.initEvent(eventname, true, true ); // event type,bubbling,cancelable return !obj.dispatchEvent(evt); } } /** * Lancia una richiesta asincrona */ function asynchronousRequest(method, url, input, outputHandler) { var http_request = false; // Mozilla, Safari,... if (window.XMLHttpRequest) { http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } // IE else if (window.ActiveXObject) { try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Giving up :( Non riesco a creare una istanza XMLHTTP'); return false; } http_request.onreadystatechange = function() { asynchronousResponse(http_request, outputHandler); }; http_request.open(method, url, true); http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http_request.send(input); return true; } /** * Handler per la gestione della risposta ad una richiesta asincrona */ function asynchronousResponse(http_request, outputHandler) { //alert('asynchronousResponse http_request.readyState = ' + http_request.readyState); if (http_request.readyState == 4) { if (http_request.status == 200) { outputHandler(http_request.responseText); } else { alert('Si è verificato un problema con la richiesta: ' + http_request.status); } } } /** *Consente di leggere un campo nella videata in cui si trova il frame *fieldId: l'id del campo che si vuole leggere *appLocation: l'indirizzo della macchina su cui si trova l'applicazione, compresa la context root */ function readOCSField(fieldId, appLocation, outputHandler){ var prefix = getFeevoParentPrefix(); var params = getOCSParameters(); if(prefix){ if(params.type == "W"){ outputHandler(""); return; } var textfield = parent.document.getElementById(prefix + "." + fieldId); var value; if(textfield.tagName.toLowerCase() == "div"){ if(textfield.innerText) value = textfield.innerText; else value = textfield.textContent; } else{ value = textfield.value; } outputHandler(value); } else{ var input = "key=" + params.fid + "&message=" + fieldId + "&ENV=" + params.env + "&SYSTEM=" + params.sys + "&type=" + params.type; asynchronousRequest("POST", appLocation + "/CReadFieldValue", input, outputHandler); } } /** *Consente di scrivere un campo nella videata in cui si trova il frame *fieldId: l'id del campo che si vuole scrivere *fieldValue: il valore della variabile *appLocation: l'indirizzo della macchina su cui si trova l'applicazione, compresa la context root */ function writeOCSField(fieldId, fieldValue, appLocation, outputHandler){ var prefix = getFeevoParentPrefix(); var params = getOCSParameters(); if(prefix){ if(params.type == "W"){ outputHandler("OK"); return; } var textfield = parent.document.getElementById(prefix + "." + fieldId); if(textfield.tagName.toLowerCase() == "div"){ textfield.innerText = fieldValue; textfield.textContent = fieldValue; textfield.value = fieldValue; } else{ textfield.value = fieldValue; } parent.checkFormalId(textfield); outputHandler("OK"); } else{ var input = "key=" + params.fid + "&message=" + fieldValue + "&fldId=" + fieldId + "&ENV=" + params.env + "&SYSTEM=" + params.sys + "&type=" + params.type; asynchronousRequest("POST", appLocation + "/CWriteFieldValue", input, outputHandler); } } /** *Consente di lanciare l'azione associata al click di un bottone nella videata in cui si trova il frame *buttonId: l'id del bottone che si vuole cliccare *appLocation: l'indirizzo della macchina su cui si trova l'applicazione, compresa la context root */ function clickOCSButton(buttonId, appLocation, outputHandler){ var prefix = getFeevoParentPrefix(); var params = getOCSParameters(); if(prefix){ if(params.type == "W"){ outputHandler("OK"); return; } var button = parent.document.getElementById(prefix + "." + buttonId); launchEvent(button, "mouseup"); outputHandler("OK"); } else{ var input = "key=" + params.fid + "&btId=" + buttonId + "&ENV=" + params.env + "&SYSTEM=" + params.sys + "&type=" + params.type; asynchronousRequest("POST", appLocation + "/CClickButton", input, outputHandler); } } /** *Consente di bloccare la finestra in cui risiede il frame *appLocation: l'indirizzo della macchina su cui si trova l'applicazione, compresa la context root */ function coverOCSWindow(appLocation, outputHandler){ var prefix = getFeevoParentPrefix(); if(prefix){ var window = parent.getWindowById(prefix); window.coverContent(); outputHandler("OK"); } else{ var params = getOCSParameters(); var input = "key=" + params.fid + "&put=" + true + "&ENV=" + params.env + "&SYSTEM=" + params.sys; asynchronousRequest("POST", appLocation + "/CCoverWindow", input, outputHandler); } } /** *Consente di sbloccare la finestra in cui risiede il frame *appLocation: l'indirizzo della macchina su cui si trova l'applicazione, compresa la context root */ function unCoverOCSWindow(appLocation, outputHandler){ var prefix = getFeevoParentPrefix(); if(prefix){ var window = parent.getWindowById(prefix); window.unCoverContent(); outputHandler("OK"); } else{ var params = getOCSParameters(); var input = "key=" + params.fid + "&put=" + false + "&ENV=" + params.env + "&SYSTEM=" + params.sys; asynchronousRequest("POST", appLocation + "/CCoverWindow", input, outputHandler); } } /** * Apre un finestra all'interno della pagina feevo, in cui viene inserito un iframe che punta all'url passato come parametro * height: altezza della finestra * width: larghezza della finestra * left: distanza dal bordo sinistro della finestra del browser * top: distanza dal bordo superiore della finestra del browser * title: titolo della finestra creata * URL: indirizzo a cui punta l'iframe creato * La funzione ritorna l'oggetto iframe che viene creato */ function openOCSExtWin(height, width, left, top, title, URL){ var prefix = getFeevoParentPrefix(); if(!prefix){ return false; } parent.removeImageWait(prefix); var iframe = parent.openExternalWindow(prefix, height, width, left, top, title, URL, this); return iframe; } /** * Chiude una finestra generata dalla funzione openOCSExtWin. * iframe: l'iframe ritornato dalla funzione openOCSExtWin * N.B.: risulta quindi necessario tenere un rifermento all'iframe, per potere chiudere successivamente la finestra */ function closeOCSExtWin(iframe, outputHandler){ if(!iframe){ return; } parent.closeExternalWindow(iframe); outputHandler("OK"); } /** *Consente di chiudere una videata aperta con l'api OATKPEXWN *appLocation: l'indirizzo della macchina su cui si trova l'applicazione, compresa la context root */ function closeOCSWin(appLocation, outputHandler){ var params = getOCSParameters(); var input = "key=" + params.fid + "&ENV=" + params.env + "&SYSTEM=" + params.sys + "&type=" + params.type; asynchronousRequest("POST", appLocation + "/CCloseWin", input, outputHandler); } /** * Reperisce i parametri che vengono accodati all'URL per la comunicazione con l'AS400 */ function getOCSParameters(){ //Esempio URL: http://localhost:8080/ExtSite/index.html?sys=OCS&env=B2B&fid=094542365120&type=W var ss = window.location; var ssp = ss.href.substring(ss.href.indexOf('?')); var ssv = ssp.split('&'); var sys = ssv[ssv.length - 4].substring(ssv[ssv.length - 4].indexOf('=') + 1); var env = ssv[ssv.length - 3].substring(ssv[ssv.length - 3].indexOf('=') + 1); var fid = ssv[ssv.length - 2].substring(ssv[ssv.length - 2].indexOf('=') + 1); var type = ssv[ssv.length - 1].substring(ssv[ssv.length - 1].indexOf('=') + 1); var res = {}; res.fid = fid; res.env = env; res.sys = sys; res.type = type; return res; } /** * Controlla l'esistenza di una variabile che viene creata se l'URL dell'iframe punta allo stesso dominio * della pagina feest */ function getFeevoParentPrefix(){ var prefix; try{ prefix = feevoParentPrefix; } catch(exc){ prefix = false; } return prefix; } /** * Ritorna il metodo con cui è stata creata la videata che contiene l'iframe * I valori di ritorno sono: * -apicobol: la videata è stata creata tramite programma cobol OATKPEXWN * -apijavascript: la videata è stata creata tramite funzione javascript openOCSExtWin * -false: se per caso la varibile utilizzata per sapere la sorgente non è definita viene ritornato false */ function getFeevoCreationSource(){ var ret = ""; try{ ret = feevoCreationSource; } catch(exc){ ret = false; } return ret; } function getOpener(){ try{ ocsOpener.toString(); return ocsOpener; } catch(ex){ } return null; }