//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";
for (var c=n.firstChild; c; c=c.nextSibling)
s += asXml(c);
s += ""+n.nodeName+">";
}
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:"") + "" + name + ">";
}
}
else {
xml += ind + "<" + name + ">" + v.toString() + "" + name + ">";
}
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, "");
}
});