/************************************************************************************************ @date : 2012-07-12 @author : ÃÖº´Áø @desc : TrustForm4.0 ºñµ¿±âÅë½Å °øÅë JavaScript *************************************************************************************************/ // submission Á¤º¸¸¦ ´ã°íÀÖ´Â Global array // callback ÇÔ¼ö³»¿¡¼­ °á°ú¸¦ ¸ÊÇÎÇÒ xpathÁ¤º¸¸¦ ´ã°íÀÖÀ½. var submitArray = new Array(); /** * @----------------------------------------------------------------------------------- * @desc : ºñµ¿±âÀûÀ¸·Î ¼­¹ö¿¡ ¿äûÀ» ÇÏ´Â ÇÔ¼ö * @param : transactionId - transaction map file id * paramPath - ¼­¹ö¿¡ ¿äûÇÒ µ¥ÀÌÅÍÀÇ xpath * resultPath - ¼­¹ö¿¡¼­ Àü´ÞµÈ µ¥ÀÌÅ͸¦ ¸ÊÇÎÇÒ xpath * responseHandler - ¼­¹öÀÇ ÀÀ´äÀ» ó¸®ÇÒ callback ÇÔ¼ö¸í. * ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é defaultResponseHandler°¡ »ç¿ëµÊ. * errorHandler - ¼­¹ö¿äû ½Ã ¹ß»ýÇÑ ¿¡·¯¿¡ ´ëÇÑ handler ÇÔ¼ö¸í. * ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é defaultErrorHandler°¡ »ç¿ëµÊ. * @return : * @----------------------------------------------------------------------------------- */ function asyncSend(transactionId, paramPath, resultPath, responseHandler, errorHandler) { // µ¿ÀÏÇÑ transactionId·Î 1¹øÀÌ»ó µ¿½Ã¿¡ È£ÃâÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¸ðµç È£Ãâ¿¡ ´ëÇØ¼­ À¯ÀÏÇÑ Å°¸¦ »ý¼ºÇÏ¿© ó¸®ÇÔ. var submitUUID = "" + getRandomSubmitUUID(); // ºñµ¿±â Åë½ÅÀ» À§ÇÑ TFHttpService instance var submit = TFHttpService.createInstance(submitUUID); submit.url = getActionURL(transactionId); // common.js submit.mediaType = "application/x-www-form-urlencoded"; submit.method = "POST"; // default handler¿¡¼­ »ç¿ëÀÚhandler¸¦ È£ÃâÇϵµ·Ï ±â´É º¯°æ submit.onResponse = "defualtResponseHandler"; submit.onError = "defualtErrorHandler"; // ÇöÀçÀÇ È£ÃâÁ¤º¸¸¦ Global º¯¼ö¿¡ ÀúÀåÇÑ´Ù. // ÀúÀåµÈ object´Â °á°ú¸¦ resultPath¿¡ bindÇϱâ À§Çؼ­ »ç¿ëµÈ´Ù. if (submitArray == undefined || submitArray == null) { submitArray = new Array(); } // submit¿¡ ÇÊ¿äÇÑ Á¤º¸ ¹é¾÷ var submitItem = new Object(); submitItem.trid = transactionId; submitItem.resultPath = resultPath; submitItem.submitUUID = submitUUID; submitItem.responseHandler = responseHandler; // »ç¿ëÀÚ ÁöÁ¤ handler submitItem.errorHandler = errorHandler; // »ç¿ëÀÚ ÁöÁ¤ handler submitArray.push(submitItem); // ¼­ºñ½º È£Ãâ submit.send(paramPath); } /** * @----------------------------------------------------------------------------------- * @desc : default response handler * @param : * @return : * @----------------------------------------------------------------------------------- */ function defualtResponseHandler(submitUUID, response, responseType) { if (submitArray == null || submitArray.length <= 0) { messageBox("submit °á°ú ó¸® ½Ã ¿¡·¯°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.", "C"); return; } var submitItem = getSubmitItem(submitUUID); bindInstance(submitUUID, response, responseType, submitItem.resultPath); // »ç¿ëÀÚ ÁöÁ¤ callback ÇÔ¼ö È£Ãâ try { eval(submitItem.responseHandler+"()"); } catch (e) { messageBox(e.message, "C"); return; } //bindInstanceOld(submitUUID, response, responseType, submitItem.resultPath); } /** * @----------------------------------------------------------------------------------- * @desc : default error handler * @param : * @return : * @----------------------------------------------------------------------------------- */ function defualtErrorHandler(submitUUID, errorInfo) { var submitItem = getSubmitItem(submitUUID); if (typeof(submitItem.errorHandler) != "undefined") { try { eval(submitItem.errorHandler); } catch (e) { messageBox(e.message, "C"); return; } } else { messageBox(errorInfo, "C"); return; } } /** * @----------------------------------------------------------------------------------- * @desc : model¿¡ Àӽà instance¸¦ Ãß°¡ÇÏ¿© ¿øº» instance¿¡ appendÇÏ´Â ÇÔ¼ö * @param : * @return : * @----------------------------------------------------------------------------------- */ function bindInstance(submitUUID, response, responseType, resultPath) { var parentNodePath = resultPath.substring(0, resultPath.lastIndexOf("/")); var lastPath = resultPath.split(/\//g).pop(); // pathÀÇ ¸¶Áö¸· ¹®ÀÚ¿­À» °¡Á®¿Â´Ù.(°á°ú¿Í ¸ÊÇÎÇÒ ³ëµå¸í) model.removeNode(parentNodePath); model.makeNode(parentNodePath); // submit »ý¼º½Ã »ç¿ëµÈ uuid °ªÀ¸·Î instance¸¦ model¿¡ Ãß°¡ÇÔ. model.createChild("xforms:instance", "id:"+submitUUID); if (responseType == "xml") { // 2012.05.16 ÇöÀç gzip compressionÀº Áö¿øÇÏÁö ¾ÊÀ½. if(model.instances(submitUUID).loadXML(response)) { // ¼­·Î´Ù¸¥ instance°£¿¡ ³ëµå¼Â º¹»ç°¡ ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù. var targetNode = model.instances(0).selectSingleNode(parentNodePath); // parent node¸¦ °¡Á®¿Â´Ù. var sourceNode = model.instances(submitUUID).selectSingleNode("//" + lastPath + "/.."); if (targetNode != undefined && sourceNode != undefined) { var sourceChildNodes = sourceNode.childNodes; // ¿øº» instance¿¡ °á°ú node¸¦ append. while (childNode = sourceChildNodes.nextNode()) { targetNode.appendChild(childNode); } } // Àӽ÷ΠÃß°¡ÇÑ instance¸¦ Á¦°ÅÇÑ´Ù. model.removeChild(submitUUID); } } model.refresh(); } /** * @----------------------------------------------------------------------------------- * @desc : modelÀÇ ¿øº» instance¿¡ °á°ú¸¦ ¸ÊÇÎÇÏ´Â ÇÔ¼ö(bindInstance ÇÔ¼ö¿¡ ºñÇØ ¼Óµµ°¡ * ÇöÀúÈ÷ ¶³¾îÁü.) * @param : * @return : * @----------------------------------------------------------------------------------- */ function bindInstanceOld(submitUUID, response, responseType, resultPath) { model.removeNode(resultPath); model.makeNode(resultPath); var lastPath = resultPath.split(/\//g).pop(); // pathÀÇ ¸¶Áö¸· ¹®ÀÚ¿­À» °¡Á®¿Â´Ù.(°á°ú¿Í ¸ÊÇÎÇÒ ³ëµå¸í) var xml; if (responseType == "xml") { xml = stringToXML(response); copyNodeToInstance(xml, resultPath, model.instances(0), resultPath); } model.refresh(); } /** * @----------------------------------------------------------------------------------- * @desc : XML DOM °´Ã¼¸¦ modelÀÇ instance¿¡ ¸ÊÇÎ * @param : * @return : * @----------------------------------------------------------------------------------- */ function copyNodeToInstance(srcXML, srcPath, destInstance, destPath) { if (srcXML == undefined) { return; } if (destInstance == undefined) { return; } model.removeNode(destPath); model.makeNode(destPath); var lastPath = destPath.split(/\//g).pop(); // pathÀÇ ¸¶Áö¸· ¹®ÀÚ¿­À» °¡Á®¿Â´Ù.(°á°ú¿Í ¸ÊÇÎÇÒ ³ëµå¸í) var srcNodeList = srcXML.getElementsByTagName(lastPath); for (var idx = 0 ; idx < srcNodeList.length ; idx++) { var resultPath = srcPath + "[" + idx + "]"; if (idx == 0 ) { resultPath = srcPath; } model.makeNode(resultPath); var childNodes = srcNodeList[idx].childNodes; for (var cIdx = 0 ; cIdx < childNodes.length ; cIdx++) { var child = childNodes[cIdx]; var childPath = resultPath + "/" + child.nodeName; model.makeNode(childPath); model.setValue(childPath, child.text); } } model.refresh(); } /** * @----------------------------------------------------------------------------------- * @desc : xml stringÀ» xml domÀ¸·Î º¯È¯ * @param : * @return : * @----------------------------------------------------------------------------------- */ function stringToXML(xmlStr) { if (typeof htmlwindow.DOMParser != "undefined") { return ( new htmlwindow.DOMParser() ).parseFromString(xmlStr, "text/xml"); } else if (typeof htmlwindow.ActiveXObject != "undefined" && new htmlwindow.ActiveXObject("Microsoft.XMLDOM")) { var xmlDoc = new htmlwindow.ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = "false"; xmlDoc.loadXML(xmlStr); return xmlDoc; } else { throw new Error("No XML parser found"); } return null; } /** * @----------------------------------------------------------------------------------- * @desc : Global submitArray¿¡¼­ ¿äûµÈ submission Á¤º¸¸¦ ¹ÝȯÇÔ. * @param : * @return : * @----------------------------------------------------------------------------------- */ function getSubmitItem(submitUUID) { if (submitUUID == undefined || submitUUID == "") { messageBox("submitItem ȹµæ ½ÇÆÐ!", "C"); return; } if (submitArray.length <= 0) { messageBox("submitArray is Empty!", "C"); return; } for (var idx = 0 ; idx < submitArray.length ; idx++) { var curItem = submitArray[idx]; if (submitUUID == curItem.submitUUID) { submitArray[idx] = null; makeFullArray(submitArray); return curItem; } } } /** * @----------------------------------------------------------------------------------- * @desc : submitArray Á¤¸® - Áß°£¿¡ ºñ¾îÀÖ´Â ºÎºÐÀ» ¸Ç ¸¶Áö¸· itemÀ¸·Î ä¿î´Ù. * @param : * @return : * @----------------------------------------------------------------------------------- */ function makeFullArray(array) { for (var idx = 0 ; idx < array.length ; idx++) { if (array[idx] == undefined || array[idx] == null) { var lastItem = array.pop(); if (lastItem != null) { array[idx] = lastItem; } } } } /** * @----------------------------------------------------------------------------------- * @desc : uuid »ý¼º. submit °íÀ¯ id ¹× instanceÀÇ id·Î »ç¿ëµÊ. * @param : * @return : * @----------------------------------------------------------------------------------- */ function getRandomSubmitUUID() { var s = [], itoh = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']; // Make array of random hex digits. The uuid only has 32 digits in it, but we // allocate an extra items to make room for the '-'s we'll be inserting. for (var i = 0; i <36; i++) { s[i] = Math.floor(Math.random()*0x10); } // Conform to RFC-4122, section 4.4 s[14] = 4; // Set 4 high bits of time_high field to version s[19] = (s[19] & 0x3) | 0x8; // Specify 2 high bits of clock sequence // Convert to hex chars for (var i = 0; i <36; i++) { s[i] = itoh[s[i]]; } // Insert '-'s // s[8] = s[13] = s[18] = s[23] = '-'; return s.join(''); }