#pragma once #include "xbase.hpp" #include "kobject/kxml.hpp" #include "wobject/xapp.hpp" #include "wobject/xstring.hpp" #include "wobject/xaserver.hpp" #include "wobject/xaserverarg.hpp" #include "wobject/xutil.hpp" #include "win32/win.hpp" class xurl { public: static int getEx(string serverurl,string aurl, string args, Hxsoft::XFrame::KXMLDOMDocument x) { xstring arg = L""; int ret; if(xstring(args) == L"" || xstring(args).find(L"",0)>-1) { ret = xaserver::ExecXQuery( serverurl,L"[service.url.xq]",(L""+arg+L"").c_str(),x); } else { xstring tmp = xstring(args).mid(6, 9999999); ret = xaserver::ExecXQuery( serverurl,L"[service.url.xq]",(L"" + arg +tmp).c_str(),x); } if(ret != 1) return -1; return 1; } static int get(string url1, string args, Hxsoft::XFrame::KXMLDOMDocument x) { return get(xapp::GetApp()->GetServerUrl(), url1, args, x); } static int get(string serverUrl,string url1, string args, Hxsoft::XFrame::KXMLDOMDocument x) { //return getEx(serverUrl,url1, args, x); #if 0 //trace("\r\n-----------"); bool f0 = xutil::HasCacheData(((xstring)L"[URL]"+url1).c_str()); if(f0) url1 = xutil::GetUrlData(((xstring)L"[URL]"+url1).c_str()); //trace("%s",url1); bool f = xutil::HasCacheData(url1); bool f1 = xutil::HasCacheData(((xstring)L"[VER]"+url1).c_str()); string ver = L"1"; string t = L"0"; if(f && f1) { Hxsoft::XFrame::KXMLDOMDocument xl2; xaserverarg arg; arg.AddArg(L"url", url1); xaserver::ExecXQuery( serverUrl,L"[service.url.type.xq]",arg.GetString(),xl2); BSTR str = (BSTR)xl2.xml(); if( str && str[0]) t = xl2.text(); string t1 = xutil::GetUrlData(((xstring)L"[VER]"+url1).c_str()); //trace("\r\nclient:%s server:%s", t1, t); //win32::alert("url:"+url1+" client:"+t1+" server:"+t); if(t == t1) { //trace("\r\nurl: %s find", url1); string d = xutil::GetUrlData(url1); //trace("\r\nurl: %s data: %s", aurl, d.left(100)); x.loadXML(d); return 1; } ver = t; } //trace("\r\nurl: %s not find", url1); #endif xstring iface ; xstring root ; Hxsoft::XFrame::KXMLDOMDocument doc; Hxsoft::XFrame::KXMLDOMNode n; Hxsoft::XFrame::KXMLDOMDocument xl ; xstring aurl = url1; int pos = aurl.find(L".vface",0); if(pos>0) { //MessageBoxW(0,aurl.c_str(),L"vface",0); iface = aurl.left(pos+6); root = aurl.mid(pos +6,9999); xaserver::LoadUrl(serverUrl,L"dev:xml[sale.view.url.xml]",L"",xl); doc = xl; n = doc.selectSingleNode(((xstring)L"//item[@src='dev:vface[" + iface+L"]']/@url").c_str()); if(n) aurl = (xstring)L"/sale/view/"+n.text()+root; else { xaserver::LoadUrl(serverUrl,L"dev:xml[saleex.view.url.xml]",L"",xl); doc = xl; n = doc.selectSingleNode(((xstring)L"//item[@src='dev:vface[" + iface+L"]']/@url").c_str()); if(n) aurl = (xstring)L"/sale/view/"+n.text()+root; else return -1; } } else if (aurl.find(L".iface",0)>0) { //MessageBoxW(0,L"caption",L"iface",0); iface = aurl.left(aurl.find(L".iface",0)+6); root = aurl.mid(aurl.find(L".iface",0) +6,9999); xaserver::LoadUrl(serverUrl,L"dev:xml[sale.data.url.xml]",L"",xl); doc = xl; n = doc.selectSingleNode(((xstring)L"//item[@src='dev:iface[" + iface+L"]']/@url").c_str()); if(n) aurl = (xstring)L"/sale/data/"+n.text()+root; else return -1; } else if(aurl.find(L"/",0)!=0) { //MessageBoxW(0,L"caption",L"path",0); iface = aurl.left(aurl.find(L"/",0)); root = aurl.mid(aurl.find(L"/",0),9999); xaserver::LoadUrl(serverUrl,L"dev:xml[sale.data.url.xml]",L"",xl); doc = xl; n = doc.selectSingleNode(((xstring)L"//item[@src='dev:iface[" + iface+L".iface]']/@url").c_str()); if(n) { aurl = (xstring)L"/sale/data/"+n.text()+root; } else return -1; } if((xstring)url1 != aurl) { //xutil::CacheUrlData("[URL]"+url1, aurl); } if(getEx(serverUrl,aurl, args, x) != 1) { return -1; } #if 0 if(aurl.find(L"/sale/data/", 0)<0 && aurl.find(L"/workflow/query", 0)<0 && aurl.find(L"/workflow/action", 0)<0) { if((xstring)ver == L"1") { Hxsoft::XFrame::KXMLDOMDocument xl3; xaserverarg arg3; arg3.AddArg(L"url", aurl.c_str()); xaserver::ExecXQuery( serverUrl,L"[service.url.type.xq]",arg3.GetString(),xl3); t = xl3.text(); if((xstring)t != L"") ver = t; } //trace("\r\nurl: %s cache version:%s", aurl, ver); xutil::CacheUrlData(aurl.c_str(), (const LPWSTR)x.xml()); xutil::CacheUrlData(((xstring)L"[VER]"+aurl.c_str()).c_str(), ver); } #endif return 1; } static int post(string aurl, string args, Hxsoft::XFrame::KXMLDOMDocument x) { return get(aurl, args, x); } static int post(string serverUrl,string aurl, string args, Hxsoft::XFrame::KXMLDOMDocument x) { return get(serverUrl,aurl,args,x); } static string get(string serverUrl,string aurl, string args) { KXMLDOMDocument x; int r = get(serverUrl,aurl,args,x); if ( r == 1) return x.xml(); else return L""; } static string get(string serverUrl,string aurl, xaserverarg args, Hxsoft::XFrame::KXMLDOMDocument x) { int r = get(serverUrl,aurl,args.GetString(),x); if ( r == 1) return x.xml(); else return L""; } static string get(string serverUrl,string aurl, xaserverarg args) { return get(serverUrl,aurl,args.GetString()); } static int getSql(string serverUrl,string arg, Hxsoft::XFrame::KXMLDOMDocument& x) { return xaserver::ExecXQuery(serverUrl,L"[publicSql.xq]",arg,x); } static int getSql(string serverUrl,xaserverarg& arg,Hxsoft::XFrame::KXMLDOMDocument& x) { return getSql(serverUrl,arg.GetString(),x); } };