123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- /************************************************************************************************
- @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에 결과 xml string을 로딩하는 기능
- * model.loadXmlNode 함수는 4.3001.070 버전 이상부터 가능
- * @param :
- * @return :
- * @-----------------------------------------------------------------------------------
- */
- function bindInstance(submitUUID, response, responseType, resultPath) {
- model.removeNode(resultPath);
- model.makeNode(resultPath);
- if (responseType == "xml") {
- model.loadXmlNode(resultPath, response, false); // xml string loading
- }
-
- model.refresh();
- }
- /**
- * @-----------------------------------------------------------------------------------
- * @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('');
- }
-
|