//standard send service define(["angularAMD", "moment"], function (angularAMD, moment) { // register angularAMD.service("WebService", function($http, $state, $rootScope, config, $soap, $translate){ var server = config.server; var parser = new DOMParser(); var WSDL = ""; var hostName = ''; function send(httpData, showLoading) { //2017.06.21 yenru , 新增語系傳入 //------------------------------- var strlanguage; if (config.setting.lang == 'zh_CN') {strlanguage = 'zh-CHS';} else if (config.setting.lang == 'zh_TW') {strlanguage = 'zh-CHT';} else {strlanguage =$translate.use().replace('_', '-');} //2017.06.22 yenru, setting 測試連線時無Catch資料 ,測試使用者改用1 var userinfo; if (config.cache.account != undefined) {userinfo = config.cache.account;} else {userinfo='1';} var param = {request:{ identity:{ computername:config.setting.environment, curuserno: userinfo, sendtime:moment(new Date()).format('YYYY/MM/DD HH:mm:ss'), languagemode:strlanguage, }, parameter:httpData.param }}; //------------------------------- param = {InXml:json2xml(param)}; if(showLoading == undefined) showLoading = true; if(showLoading) $rootScope.showLoading(); try{ $soap.post("http://"+config.server.ip + "/" + hostName + WSDL ,httpData.method , param, function(){ if(showLoading) $rootScope.hideLoading(); $rootScope.showAlert("無法與伺服器連線"); }).then(function(response){ //console.log(response); if(showLoading) $rootScope.hideLoading(); var data = JSON.parse(xml2json(parser.parseFromString(response,"text/xml"))); if(data.response.result != "fail"){ if(httpData.success != undefined){ httpData.success(data.response); } } else { //20170406 Dustdusk modify error callback if(httpData.error != undefined){ httpData.error(data.response); } else { var msg = "Code : "+data.response.exception.code+"
"; msg += "sysmsg : "+data.response.exception.mesmsg+"
"; msg += "mesmsg : "+data.response.exception.sysmsg+"
"; msg += "stack : "+data.response.exception.stack+"
"; $rootScope.showAlert(msg); } } }, function(reason){ console.log(reason); if(showLoading) $rootScope.hideLoading(); $rootScope.showAlert("與伺服器連線出錯"); }); }catch(exception){ if(showLoading) $rootScope.hideLoading(); } } this.send = function(httpData, showLoading){ hostName = config.setting.hostName; send(httpData, showLoading); } this.sendCus = function(httpData, showLoading){ hostName = config.setting.cusHostName; send(httpData, showLoading); } this.sendSFC = function(httpData, showLoading){ hostName = config.setting.sfcHostName; send(httpData, showLoading); } this.setWSDL = function(inputWSDL){ WSDL = inputWSDL; } }); function xml2json(xml, tab) { var X = { toObj: function(xml) { var o = {}; if (xml.nodeType==1) { // element node .. if (xml.attributes.length) // element with attributes .. for (var i=0; i 1) o = X.escape(X.innerXml(xml)); else for (var n=xml.firstChild; n; n=n.nextSibling) o["#cdata"] = X.escape(n.nodeValue); } } if (!xml.attributes.length && !xml.firstChild) o = null; } else if (xml.nodeType==9) { // document.node o = X.toObj(xml.documentElement); } else alert("unhandled node type: " + xml.nodeType); return o; }, toJson: function(o, name, ind) { var json = name ? ("\""+name+"\"") : ""; if (o instanceof Array) { for (var i=0,n=o.length; i 1 ? ("\n"+ind+"\t"+o.join(",\n"+ind+"\t")+"\n"+ind) : o.join("")) + "]"; } else if (o == null) json += (name&&":") + "\"null\""; else if (typeof(o) == "object") { var arr = []; for (var m in o) arr[arr.length] = X.toJson(o[m], m, ind+"\t"); json += (name?":{":"{") + (arr.length > 1 ? ("\n"+ind+"\t"+arr.join(",\n"+ind+"\t")+"\n"+ind) : arr.join("")) + "}"; } else if (typeof(o) == "string") json += (name&&":") + "\"" + o.toString() + "\""; else json += (name&&":") + o.toString(); return json; }, innerXml: function(node) { var s = "" if ("innerHTML" in node) s = node.innerHTML; else { var asXml = function(n) { var s = ""; if (n.nodeType == 1) { s += "<" + n.nodeName; for (var i=0; i"; } else s += "/>"; } else if (n.nodeType == 3) s += n.nodeValue; else if (n.nodeType == 4) s += ""; return s; }; for (var c=node.firstChild; c; c=c.nextSibling) s += asXml(c); } return s; }, escape: function(txt) { return txt.replace(/[\\]/g, "\\\\") .replace(/[\"]/g, '\\"') .replace(/[\n]/g, '\\n') .replace(/[\r]/g, '\\r'); }, removeWhite: function(e) { e.normalize(); for (var n = e.firstChild; n; ) { if (n.nodeType == 3) { // text node if (!n.nodeValue.match(/[^ \f\n\r\t\v]/)) { // pure whitespace text node var nxt = n.nextSibling; e.removeChild(n); n = nxt; } else n = n.nextSibling; } else if (n.nodeType == 1) { // element node X.removeWhite(n); n = n.nextSibling; } else // any other node n = n.nextSibling; } return e; } }; if (xml.nodeType == 9) // document node xml = xml.documentElement; var json = X.toJson(X.toObj(X.removeWhite(xml)), xml.nodeName, "\t"); return "{\n" + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, "")) + "\n}"; } function json2xml(o, tab) { var toXml = function(v, name, ind) { var xml = ""; if (v instanceof Array) { for (var i=0, n=v.length; i" : "/>"; if (hasChild) { for (var m in v) { if (m == "#text") xml += v[m]; else if (m == "#cdata") xml += ""; else if (m.charAt(0) != "@") xml += toXml(v[m], m, ind+"\t"); } xml += (xml.charAt(xml.length-1)=="\n"?ind:"") + ""; } } else { xml += ind + "<" + name + ">" + v.toString() + ""; } return xml; }, xml=""; for (var m in o) xml += toXml(o[m], m, ""); return tab ? xml.replace(/\t/g, tab) : xml.replace(/\t|\n/g, ""); } });