use "xcontrol.vframe.vbusiness.vd" use "xbase.vframe.vbusiness.vd" unit trade [ class DeveloperSynch : public xframe { xtreeview tv_gs; xsedit dw_log; int[100] nItems; int nCount; string sContent; string ProcessDevCmd(string cmd,string ext, string aurl="", bool needlogin=false) { if(aurl == "") aurl = GetServerUrl(); //alert(aurl); string d = xaserver::ProcessCmd(aurl,"uri.hxsoft.com/xaserver/developer "+cmd,ext,needlogin); return d; } string ProcessDevCmd2(string cmd,string ext, string aurl="", bool needlogin=false) { if(aurl == "") aurl = GetServerUrl(); //alert(aurl); string d = xaserver::ProcessCmd(aurl,"uri.hxsoft.com/xaserver/dev:"+cmd,ext,needlogin); return d; } int GetProjectItem(int hItem) { int pitem = hItem; string typ; while(true) { int h = xtreeview::GetItemData(tv_gs.GetId(), pitem); msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement); typ = GetEleString(e, "@tagname"); if(typ=="project")break; pitem = xtreeview::GetParentItem(tv_gs.GetId(), pitem); if(pitem<=0)break; } return pitem; } int GetP2Item(int hItem) { int hDomainItem; int hP2Item = hItem; while(true) { hDomainItem = xtreeview::GetParentItem(tv_gs.GetId(), hP2Item); if(xtreeview::GetParentItem(tv_gs.GetId(), hDomainItem)<=0)break; hP2Item = hDomainItem; } return hP2Item; } string GetItemGuid(int hItem) { int h = xtreeview::GetItemData(tv_gs.GetId(), hItem); msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement); string guid = e.GetAttribute("guid"); return guid; } xaserverarg GetDataArg(int hItem, xaserverarg arg) { int h = xtreeview::GetItemData(tv_gs.GetId(), hItem); msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement); string node = GetEleString(e, "@tagname"); //WriteLog(e.xml); if(node=="File" || node=="file") { string caption = e.getAttribute("caption"); int hP2Item = 0; int hDomainItem = 0; if(xtreeview::GetParentItem(tv_gs.GetId(), hItem)<=0) { hDomainItem = hItem; }else { hP2Item = GetP2Item(hItem); hDomainItem = xtreeview::GetParentItem(tv_gs.GetId(), hP2Item); } //find project folder string prjguid=""; int pitem = this.GetProjectItem(hItem); if(pitem > 0) prjguid = GetItemGuid(pitem); //xaserverarg arg = new xaserverarg; //arg.setNativePointer(arg.CreateInstance()); arg.AddArg("project.guid",prjguid); if(hP2Item) { if(hP2Item != hItem) { string guid = e.getAttribute("guid"); arg.AddArg("guid",guid); } string guid2 = GetItemGuid(hP2Item); arg.AddArg("root.guid",guid2); }else if(hDomainItem > 0) { string guid3 = GetItemGuid(hDomainItem); arg.AddArg("domain.guid",guid3); } return 1; } else if(node=="folder" || node=="project") return 2; else return 0; } int SaveData(int hItem) { xcontrol xc = GetControl("surl"); string surl = xc.GetText(); if(surl == "") { alert("ÇëÊäÈëͬ²½·þÎñÆ÷µØÖ·"); return 1; } string name = xtreeview::GetItemLabel(tv_gs.GetId(), hItem); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); int ret = GetDataArg(hItem, arg); //alert(arg.GetString()); if(ret == 0) { WriteLog(name+" ʧ°Ü, Ô­Òò:»ñÈ¡¹¤³Ì»òÎļþ¼Ðʧ°Ü!"); return -1; } else if(ret == 2) { ret = SynchFolder(hItem); if(ret == -1) WriteLog(name+" ʧ°Ü, Ô­Òò:»ñÈ¡ÎļþÊý¾Ýʧ°Ü!"); else if(ret == 0) WriteLog(name+" ʧ°Ü, Ô­Òò:¸´ÖÆÎļþʧ°Ü!"); else WriteLog(name); return -1; } SynchFolder(hItem); arg.AddArg("__name",name); arg.AddArg("__url",surl); synchServer(arg); if(name.right(3) == ".vx" || name.right(5) == ".xpage") { arg.AddArg("__name",name + "[Code]"); arg.AddArg("iscode","yes"); synchServer(arg); } return 1; } string GetFolderPath(int hItem) { int k = hItem; if(k == 0) return ""; string src = ""; //string name = ""; while(k > 0) { int h = xtreeview::GetItemData(tv_gs.GetId(), k); k = xtreeview::GetParentItem(tv_gs.GetId(), k); msxml::IXMLDOMElement e = trust(h as msxml::IXMLDOMElement); string node = GetEleString(e, "@tagname"); if(node != "File" && node != "file") { string tmp = GetEleString(e, "@src"); //if(name == "") name = GetEleString(e, "@caption"); if(tmp != "") { SynchFolder(k); if(src == "") src = tmp; else { int j = 1; int s = tmp.length(); string t = tmp.right(j).left(1); while(t != "\\" && j < s) { //WriteLog(t); j++; t = tmp.right(j).left(1); } if(j >= s) src = tmp+ "\\" + src; else src = tmp.left(s - j)+ "\\" + src; } } } } if(src == "") { //WriteLog(name+" ͬ²½Ê§°Ü, Ô­Òò:»ñÈ¡ÎļþÊý¾Ýʧ°Ü0!"); return ""; } //if(src.left(9) =="Projects\\") src = src.mid(9, src.length()); src = "\\" + src;//.replace("Projects\\",""); //WriteLog(src); return src; } int SynchFolder(int hItem) { string src = GetFolderPath(hItem); if(src== "") return -1; if(xaserver::FileCopy("devfolder8001", src, "devfolder5001", src) != 1) return 0; //WriteLog(src); return 1; } int synchServer(xaserverarg arg) { string name = arg.GetArgString("__name"); string surl = arg.GetArgString("__url"); string d = ProcessDevCmd("getobject",arg.GetString()); if(d == "") { WriteLog(name+" ʧ°Ü, Ô­Òò:»ñÈ¡ÎļþÊý¾Ýʧ°Ü!"); return -1; } //WriteLog(d); arg.AddArg("content",d); ProcessDevCmd("saveobject",arg.GetString(), surl,true); WriteLog(name); return 1; } int WriteLog(string str) { if(sContent == "") sContent = str; else sContent += "\r\n" + str; //alert(sContent); dw_log.SetContent(sContent, ""); return 1; } //½¹µã¼¤»î´¦Àíº¯Êý int OnSetFocus(ref TEvent evt,int param) { //ÖØÖù¤¾ßÌõ SetAgent(); return 1; } int Add(int hItem) { if(nCount >99) { alert("ͬʱͬ²½µÄÊýÁ¿²»ÄÜ´óÓÚ100¸ö!"); return 1; } nItems[nCount] = hItem; nCount++; return 1; } int Del(int hItem) { for(int i=0; i 0) return 1; int p = xtreeview::GetItemData(tv_gs.GetId(), hItem); msxml::IXMLDOMElement ele = trust(p as msxml::IXMLDOMElement); string src =GetEleString(ele, "@src"); string tagname =GetEleString(ele, "@tagname"); if (src == "" || tagname == "file" || tagname == "File") return 1; OnSetTree(hItem, GetFolderPath(hItem)); return 1; } int OnSetTree(int pItem, msxml::IXMLDOMElement e) { msxml::IXMLDOMNodeList li=e.selectNodes("*"); int i=0; int s=li.length; for (i=0;i