|  |  | 
 |  |  | #include <xcontrol/xlayersheet.hpp> | 
 |  |  | #include <xcontrol/xsedit.hpp> | 
 |  |  | #include <xcontrol/xdwgrid.hpp> | 
 |  |  | #include <win32/xfile.hpp> | 
 |  |  | using xml = KXMLDOMDocument; | 
 |  |  | class __declspec(dllexport) SqlWatchWin : public xwin | 
 |  |  | { | 
 |  |  | 
 |  |  |       { | 
 |  |  |          KXMLDOMNode node = items.item(i); | 
 |  |  |          xstring src = node.selectSingleNode(L"@src").text(); | 
 |  |  |          if (src.find(L"mh.com") < 0) | 
 |  |  |          xstring hDomainGuid = node.selectSingleNode(L"../@guid").text(); | 
 |  |  |          xstring hP2Guid = node.selectSingleNode(L"@guid").text(); | 
 |  |  |          //if (src.find(L"mh.com") < 0) | 
 |  |  |          //if (src.find(L"hxsoft.com") >= 0) | 
 |  |  |          { | 
 |  |  |             src = src.replace(L"\\", L"/"); | 
 |  |  |             processhxd(base + L"/developer", src); | 
 |  |  |             processhxd(base + L"/developer", src,hDomainGuid,hP2Guid); | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |    } | 
 |  |  | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int DownLoadFile2(xstring src, xstring dest) | 
 |  |  |    int DownLoadObject(xstring ext,xstring dest) | 
 |  |  |    { | 
 |  |  |       int ret = xaserver::DownLoadFile(GetServerUrl(), src, L"", dest); | 
 |  |  |       BYTE* pData = NULL; | 
 |  |  |       int nLength = 0; | 
 |  |  |       int  ret = xaserver::ProcessCmd(GetServerUrl(), L"uri.hxsoft.com/xaserver/developer getobject", ext.c_str(), pData, nLength); | 
 |  |  |       if (ret > 0) | 
 |  |  |       { | 
 |  |  |          HANDLE fp1; | 
 |  |  |          DWORD nWrite; | 
 |  |  | #define GENERIC_READ                     (0x80000000L) | 
 |  |  | #define GENERIC_WRITE                    (0x40000000L) | 
 |  |  | #define FILE_SHARE_READ                 0x00000001   | 
 |  |  | #define FILE_SHARE_WRITE                0x00000002  | 
 |  |  | #define CREATE_ALWAYS       2 | 
 |  |  | #define FILE_ATTRIBUTE_NORMAL               0x00000080   | 
 |  |  |          fp1 = CreateFileW(dest.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); | 
 |  |  |          ::WriteFile(fp1, pData, nLength, &nWrite, NULL); | 
 |  |  |          ::CloseHandle(fp1); | 
 |  |  |          if (pData)delete pData; | 
 |  |  |       } | 
 |  |  |       return ret; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int DownLoadFile2(xstring src, xstring dest,xstring ext=L"") | 
 |  |  |    { | 
 |  |  |       int ret = xaserver::DownLoadFile(GetServerUrl(), src, ext, dest); | 
 |  |  |       if (ret < 0) | 
 |  |  |       { | 
 |  |  |          reconnect(); | 
 |  |  |          ret = xaserver::DownLoadFile(GetServerUrl(), src, L"", dest); | 
 |  |  |          ret = xaserver::DownLoadFile(GetServerUrl(), src, ext, dest); | 
 |  |  |       } | 
 |  |  |       if (ret < 0)reconnect(); | 
 |  |  |       return ret; | 
 |  |  | 
 |  |  |          return 1; | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       KXMLDOMNodeList items = x.selectNodes(L"//file[count(@deleted)=0]"); | 
 |  |  |       KXMLDOMNodeList items = x.selectNodes(L"//file[count(ancestor-or-self::*/@deleted)=0 ]"); | 
 |  |  |       xstring caption = x.documentElement().getAttribute(L"caption");; | 
 |  |  |       xstring srcpath = GetFolder(src); | 
 |  |  |       if (caption == L"") | 
 |  |  | 
 |  |  |          if (node.selectSingleNode(L"@src")) srcItem = node.selectSingleNode(L"@src").text(); | 
 |  |  |          xstring typ = L""; | 
 |  |  |          if (node.selectSingleNode(L"@type")) typ = node.selectSingleNode(L"@type").text(); | 
 |  |  |          if (typ == L"tpp")typ = L"code"; | 
 |  |  |          xstring values = L""; | 
 |  |  |          if (srcItem != L"" && typ != L"") | 
 |  |  |          { | 
 |  |  | 
 |  |  |  | 
 |  |  |                values = L""; | 
 |  |  |                if (xutil::HasCacheData(L"object-types"))values = xutil::GetUrlData(L"object-types"); | 
 |  |  |                if (values.find(L",L" + typ + L",L") < 0) values += L",L" + typ + L",L"; | 
 |  |  |                if (values.find(L",L" + typ + L",") < 0) values += L"," + typ + L","; | 
 |  |  |                xutil::CacheUrlData(L"object-types", values); | 
 |  |  |  | 
 |  |  |                values = L""; | 
 |  |  | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int processprj_xml(xstring base, xstring path, xstring src, bool processItem) | 
 |  |  |    int processprj_xml(xstring base, xstring path, xstring src, bool processItem, xstring hDomainGuid, xstring hP2Guid, xstring hProjectGuid) | 
 |  |  |    { | 
 |  |  |       //xcontrol xc = GetControl(L"frame:output"); | 
 |  |  |       //xc.SetText(L"\r\n process: "+path+L"/"+src); | 
 |  |  | 
 |  |  |          return 1; | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       KXMLDOMNodeList items = x.selectNodes(L"//file[count(@deleted)=0]"); | 
 |  |  |       KXMLDOMNodeList items = x.selectNodes(L"//file[count(ancestor-or-self::*/@deleted)=0]"); | 
 |  |  |       xstring caption = x.documentElement().getAttribute(L"caption");; | 
 |  |  |       xstring srcpath = GetFolder(src); | 
 |  |  |       if (caption == L"") | 
 |  |  | 
 |  |  |  | 
 |  |  |       surePath(dpath, L""); | 
 |  |  |       int len = items.length(); | 
 |  |  |       xaserverarg arg; | 
 |  |  |       arg.AddArg(L"root.guid", hP2Guid); | 
 |  |  |       arg.AddArg(L"domain.guid", hDomainGuid); | 
 |  |  |       arg.AddArg(L"project.guid", hProjectGuid); | 
 |  |  |  | 
 |  |  |       for (int i = 0; i < len; i++) | 
 |  |  |       { | 
 |  |  |          KXMLDOMNode node = items.item(i); | 
 |  |  | 
 |  |  |  | 
 |  |  |          xstring srcItem = L""; | 
 |  |  |          xstring id = L""; | 
 |  |  |          xstring uriItem = L""; | 
 |  |  |          if (node.selectSingleNode(L"@guid")) id = node.selectSingleNode(L"@guid").text(); | 
 |  |  |          if (node.selectSingleNode(L"@src")) srcItem = node.selectSingleNode(L"@src").text(); | 
 |  |  |          if (node.selectSingleNode(L"@uri")) uriItem = node.selectSingleNode(L"@uri").text(); | 
 |  |  |          xstring typ = L""; | 
 |  |  |          if (node.selectSingleNode(L"@type")) typ = node.selectSingleNode(L"@type").text(); | 
 |  |  |          if (typ == L"tpp")typ = L"code"; | 
 |  |  |          xstring values = L""; | 
 |  |  |          if (srcItem != L"" && typ != L"") | 
 |  |  |          { | 
 |  |  |             ret = DownLoadFile2(L"dev:" + typ + L"[" + srcItem + L"]", dpath + L"/" + srcItem); | 
 |  |  |             arg.AddArg(L"guid", id); | 
 |  |  |             ret = DownLoadObject(arg.GetString(), dpath + L"/" + srcItem); | 
 |  |  |             if(ret < 0) | 
 |  |  |                ret = DownLoadFile2(L"dev:" + typ + L"[" + uriItem + L"]", dpath + L"/" + srcItem); | 
 |  |  |             //ret = DownLoadFile2(L"dev:" + typ + L"[" + srcItem + L"]", dpath + L"/" + srcItem); | 
 |  |  |             if (ret < 0) | 
 |  |  |             { | 
 |  |  |                trace(L"\r\nerror load dev:" + typ + L"[" + srcItem + L"]" + L" " + dpath + L"/" + srcItem); | 
 |  |  |                trace(L"\r\nerror load dev:" + typ + L"[" + uriItem + L"]" + L" " + dpath + L"/" + srcItem); | 
 |  |  |                continue; | 
 |  |  |                //return 1; | 
 |  |  |             } | 
 |  |  | 
 |  |  |                { | 
 |  |  |                   CreateDirectory(base + L"/working/" + typ + L"s", nullptr); | 
 |  |  |                   //DownLoadFile2(L"dev:"+typ+L"["+srcItem+L"]",base+L"/working"+L"/"+typ+L"s/"+id+L".xrl"); | 
 |  |  |                   DownLoadFile2(L"dev:" + typ + id, base + L"/working" + L"/" + typ + L"s/" + id + L".xrl"); | 
 |  |  |                   ret = DownLoadFile2(L"dev:" + typ + id, base + L"/working" + L"/" + typ + L"s/" + id + L".xrl"); | 
 |  |  |                   if (ret < 0) | 
 |  |  |                   { | 
 |  |  |                      trace(L"\r\nerror load dev:" + typ + L"[" + uriItem + L"]" + L" " + L"/working" + L"/" + typ + L"s/" + id + L".xrl"); | 
 |  |  |                      continue; | 
 |  |  |                      //return 1; | 
 |  |  |                   } | 
 |  |  | 						 | 
 |  |  |                } | 
 |  |  |                else if (typ == L"serialize") | 
 |  |  |                { | 
 |  |  |                   CreateDirectory(base + L"/working/" + typ, nullptr); | 
 |  |  |                   //DownLoadFile2(L"dev:"+typ+L"["+srcItem+L"]",base+L"/working"+L"/"+typ+L"/"+id+L".xml"); | 
 |  |  |                   DownLoadFile2(L"dev:" + typ + id, base + L"/working" + L"/" + typ + L"/" + id + L".xml"); | 
 |  |  |                   ret = DownLoadFile2(L"dev:" + typ + id, base + L"/working" + L"/" + typ + L"/" + id + L".xml"); | 
 |  |  |                   if (ret < 0) | 
 |  |  |                   { | 
 |  |  |                      trace(L"\r\nerror load dev:" + typ + L"[" + uriItem + L"]" + L" " + L"/working" + L"/" + typ + L"/" + id + L".xml"); | 
 |  |  |                      continue; | 
 |  |  |                      //return 1; | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  |                else if (typ == L"workflow" || typ == L"worknode" || typ == L"xaction" || typ == L"template" || typ == L"xfile" | 
 |  |  |                   || typ == L"xquery" || typ == L"entity" || typ == L"xpage") | 
 |  |  |                { | 
 |  |  |                   CreateDirectory(base + L"/working/" + typ + L"s", nullptr); | 
 |  |  |                   //DownLoadFile2(L"dev:"+typ+L"["+srcItem+L"]",base+L"/working"+L"/"+typ+L"s/"+id+L".xml"); | 
 |  |  |                   DownLoadFile2(L"dev:" + typ + id, base + L"/working" + L"/" + typ + L"s/" + id + L".xml"); | 
 |  |  |                   ret = DownLoadFile2(L"dev:"+typ+L"["+uriItem+L"]",base+L"/working"+L"/"+typ+L"s/"+id+L".xml"); | 
 |  |  |                   //DownLoadFile2(L"dev:" + typ + id, base + L"/working" + L"/" + typ + L"s/" + id + L".xml"); | 
 |  |  |                   if (ret < 0) | 
 |  |  |                   { | 
 |  |  |                      trace(L"\r\nerror load dev:" + typ + L"[" + uriItem + L"]" + L" " + base + L"/working" + L"/" + typ + L"s/" + id + L".xml"); | 
 |  |  |                      continue; | 
 |  |  |                      //return 1; | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  |                else if (typ == L"code") | 
 |  |  |                { | 
 |  |  |                   CreateDirectory(base + L"/working/" + typ, nullptr); | 
 |  |  |                   ret = DownLoadFile2(L"dev:" + typ + L"[" + uriItem + L"]", base + L"/working" + L"/" + typ + L"/" + id + L".xss"); | 
 |  |  |                   //DownLoadFile2(L"dev:" + typ + id, base + L"/working" + L"/" + typ + L"/" + id); | 
 |  |  |                   if (ret < 0) | 
 |  |  |                   { | 
 |  |  |                      trace(L"\r\nerror load dev:" + typ + L"[" + uriItem + L"]" + L" " + base + L"/working" + L"/" + typ + L"s/" + id+L".xss"); | 
 |  |  |                      continue; | 
 |  |  |                      //return 1; | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  |                else | 
 |  |  |                { | 
 |  |  |                   CreateDirectory(base + L"/working/" + typ, nullptr); | 
 |  |  |                   //DownLoadFile2(L"dev:"+typ+L"["+srcItem+L"]",base+L"/working"+L"/"+typ+L"/"+id); | 
 |  |  |                   DownLoadFile2(L"dev:" + typ + id, base + L"/working" + L"/" + typ + L"/" + id); | 
 |  |  |                   ret = DownLoadFile2(L"dev:"+typ+L"["+uriItem+L"]",base+L"/working"+L"/"+typ+L"/"+id); | 
 |  |  |                   //DownLoadFile2(L"dev:" + typ + id, base + L"/working" + L"/" + typ + L"/" + id); | 
 |  |  |                   if (ret < 0) | 
 |  |  |                   { | 
 |  |  |                      trace(L"\r\nerror load dev:" + typ + L"[" + uriItem + L"]" + L" " + base + L"/working" + L"/" + typ + L"s/" + id); | 
 |  |  |                      continue; | 
 |  |  |                      //return 1; | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  |                appendto(typ, L"T(\"" + srcItem + L"\",\"" + id + L"\",\"" + spath + L"/" + srcItem + L"\")[ln]"); | 
 |  |  |                appendto(typ, L"T(\"" + uriItem + L"\",\"" + id + L"\",\"" + spath + L"/" + srcItem + L"\")[ln]"); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (typ == L"template") | 
 |  |  | 
 |  |  |                      xstring content = tnode.xml(); | 
 |  |  |                      xstring sheetid = L""; | 
 |  |  |                      xstring sheetcaption = L""; | 
 |  |  |                      if (node.selectSingleNode(L"@guid")) sheetid = tnode.selectSingleNode(L"@guid").text(); | 
 |  |  |                      if (node.selectSingleNode(L"@caption")) sheetcaption = tnode.selectSingleNode(L"@caption").text(); | 
 |  |  |                      if (tnode.selectSingleNode(L"@guid")) sheetid = tnode.selectSingleNode(L"@guid").text(); | 
 |  |  |                      if (tnode.selectSingleNode(L"@caption")) sheetcaption = tnode.selectSingleNode(L"@caption").text(); | 
 |  |  |                      xutil::SaveToFile(base + L"/working/sheets/" + sheetid + L".xml", content, L"", L"", (LPTSTR)L""); | 
 |  |  |                       | 
 |  |  |                      appendto(L"sheet", L"T(\"" + srcItem + L"/" + sheetid + L"\",\"" + sheetid + L"\")[ln]"); | 
 |  |  |                      appendto(L"sheet", L"T(\"" + srcItem + L"/" + sheetcaption + L"\",\"" + sheetid + L"\")[ln]"); | 
 |  |  |                      appendto(L"sheet", L"T(\"" + uriItem + L"/" + sheetid + L"\",\"" + sheetid + L"\")[ln]"); | 
 |  |  |                      appendto(L"sheet", L"T(\"" + uriItem + L"/" + sheetcaption + L"\",\"" + sheetid + L"\")[ln]"); | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  |             } | 
 |  |  | 
 |  |  |             { | 
 |  |  |                xstring srccode = srcItem.replace(L".xpage", L".xss"); | 
 |  |  |                srccode = srccode.replace(L".vx", L".xss"); | 
 |  |  |                ret = DownLoadFile2(L"dev:code[" + srcItem + L"]", dpath + L"/" + srccode); | 
 |  |  |                ret = DownLoadFile2(L"dev:code[" + uriItem + L"]", dpath + L"/" + srccode); | 
 |  |  |                if (ret < 0) | 
 |  |  |                { | 
 |  |  |                   trace(L"\r\nerror load dev:code[" + srcItem + L"]" + L" " + dpath + L"/" + srccode); | 
 |  |  |                   trace(L"\r\nerror load dev:code[" + uriItem + L"]" + L" " + dpath + L"/" + srccode); | 
 |  |  |                   continue; | 
 |  |  |                   //return 1; | 
 |  |  |                } | 
 |  |  |                if (id != L"") | 
 |  |  |                { | 
 |  |  |                   DownLoadFile2(L"dev:code[" + srcItem + L"]", base + L"/working" + L"/code/" + id + L".xss"); | 
 |  |  |                   DownLoadFile2(L"dev:code[" + uriItem + L"]", base + L"/working" + L"/code/" + id + L".xss"); | 
 |  |  |                   //DownLoadFile2(L"dev:code"+id,base+L"/working"+L"/code/"+id+L".xss"); | 
 |  |  |                   appendto(L"code", L"T(\"" + srcItem + L"\",\"" + id + L"\",\"" + spath + L"\"" + srcItem + L"\")[ln]"); | 
 |  |  |                   appendto(L"code", L"T(\"" + uriItem + L"\",\"" + id + L"\",\"" + spath + L"\"" + srcItem + L"\")[ln]"); | 
 |  |  |                } | 
 |  |  |             } | 
 |  |  |          } | 
 |  |  | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int processhxd(xstring base, xstring sfile) | 
 |  |  |    int processhxd(xstring base, xstring sfile,xstring hDomainGuid,xstring hP2Guid) | 
 |  |  |    { | 
 |  |  |       surePath(base, sfile); | 
 |  |  |       trace(L"\r\n" + base + L"/" + sfile); | 
 |  |  | 
 |  |  |       xml xhd ; | 
 |  |  |       xhd.load(base + L"/" + sfile); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |       KXMLDOMNodeList items = xhd.selectNodes(L"//project[count(@deleted)=0]"); | 
 |  |  |       int len = items.length(); | 
 |  |  |       for (int i = 0; i < len; i++) | 
 |  |  |       { | 
 |  |  |          KXMLDOMNode node = items.item(i); | 
 |  |  |          xstring hProjectGuid = node.selectSingleNode(L"@guid").text(); | 
 |  |  |          xstring src = L""; | 
 |  |  |          if (node.selectSingleNode(L"@src")) src = node.selectSingleNode(L"@src").text(); | 
 |  |  |          if (src != L"") | 
 |  |  |          { | 
 |  |  |             xstring path = GetFolder(sfile); | 
 |  |  |             src = src.replace(L"\\", L"/"); | 
 |  |  |             processprj_xml(base, path, src, true); | 
 |  |  |             processprj_xml(base, path, src, true,hDomainGuid,hP2Guid,hProjectGuid); | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return 1; | 
 |  |  | 
 |  |  |    { | 
 |  |  |       xstring values = L""; | 
 |  |  |       if (xutil::HasCacheData(L"object-types"))values = xutil::GetUrlData(L"object-types"); | 
 |  |  |       values = values.replace(L",,L", L",L"); | 
 |  |  |       values = values.replace(L",,", L","); | 
 |  |  |       if (values != L"") | 
 |  |  |       { | 
 |  |  |          int pos = values.find(L",L", 0); | 
 |  |  |          int pos = values.find(L",", 0); | 
 |  |  |          xstring typ = L""; | 
 |  |  |          while (pos >= 0) | 
 |  |  |          { | 
 |  |  |             int pos1 = values.find(L",L", pos + 1); | 
 |  |  |             int pos1 = values.find(L",", pos + 1); | 
 |  |  |             if (pos1 < 0) break; | 
 |  |  |             typ = values.mid(pos + 1, pos1 - pos - 1); | 
 |  |  |             xutil::CacheUrlData(typ, L""); | 
 |  |  | 
 |  |  |    } | 
 |  |  |    int Initenv_xml() | 
 |  |  |    { | 
 |  |  |       if (!toXml) | 
 |  |  |       { | 
 |  |  |          toXml = xml(); | 
 |  |  |       } | 
 |  |  |       else | 
 |  |  |       { | 
 |  |  |          if (toEle)toEle.Release(); | 
 |  |  |       } | 
 |  |  |       toXml.Reset(); | 
 |  |  |       toXml.loadXML(L"<root/>"); | 
 |  |  |       toEle = toXml.documentElement(); | 
 |  |  |       return 1; | 
 |  |  | 
 |  |  |       xstring values = L""; | 
 |  |  |       xstring tvalue = L""; | 
 |  |  |       if (xutil::HasCacheData(L"object-types"))values = xutil::GetUrlData(L"object-types"); | 
 |  |  |       values = values.replace(L",,L", L",L"); | 
 |  |  |       values = values.replace(L",,", L","); | 
 |  |  |       trace(values); | 
 |  |  |       if (values != L"") | 
 |  |  |       { | 
 |  |  |          int len = values.length(); | 
 |  |  |          int pos = values.find(L",L", 0); | 
 |  |  |          int pos = values.find(L",", 0); | 
 |  |  |          xstring typ = L""; | 
 |  |  |          while (pos >= 0) | 
 |  |  |          { | 
 |  |  |             int pos1 = values.find(L",L", pos + 1); | 
 |  |  |             int pos1 = values.find(L",", pos + 1); | 
 |  |  |             if (pos1 < 0) break; | 
 |  |  |             typ = values.mid(pos + 1, pos1 - pos - 1); | 
 |  |  |             tvalue = L""; | 
 |  |  | 
 |  |  |       { | 
 |  |  |          KXMLDOMElement ele = nodes.item(i); | 
 |  |  |          xstring tmp = ele.getAttribute(L"name"); | 
 |  |  |          if (i < s - 1) tmp = tmp + L",L"; | 
 |  |  |          if (i < s - 1) tmp = tmp + L","; | 
 |  |  |          str += L"\t" + tmp + L"\r\n"; | 
 |  |  |       } | 
 |  |  |       //str += L"FROM " + caption; |