#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"<arg name='url' value='";
|
arg = arg + aurl +L"'/>";
|
int ret;
|
if(xstring(args) == L"" || xstring(args).find(L"<args/>",0)>-1)
|
{
|
ret = xaserver::ExecXQuery( serverurl,L"[service.url.xq]",(L"<args>"+arg+L"</args>").c_str(),x);
|
}
|
else
|
{
|
xstring tmp = xstring(args).mid(6, 9999999);
|
xstring argstr = (L"<args>" + arg + tmp).c_str();
|
ret = xaserver::ExecXQuery( serverurl,L"[service.url.xq]",argstr.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);
|
}
|
};
|