#include #include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class ViewAdministrativeDepartmentList : public listwin { xdwgrid dw_list; xtreeview tv_folder;//hxsoft.com -> Developer -> wface -> vcontrol string rows; string urlTree; string myDataUrl; int changeddlb; xnode m_agentNode; //Agent Condition int SetAgent() { string xfNodeAgentArea = "agentarea"; xnode anode = GetAgentNode(xfNodeAgentArea); if (m_agentNode) { SetAgentNodeContent(anode, m_agentNode); } else { msxml::IXMLDOMElement xframeElement = GetElement(); msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/" + xfNodeAgentArea + "[1]/*"); if (agent) { string s = agent.xml; m_agentNode = SetAgentNodeContent(anode, s); } } return 1; } //Õ¹¿ª·Å½øÊ÷ÀïÃæ int ExpandCatChildFolder(int hItem, msxml::IXMLDOMElement ele, int image) { /*ÔÚ¾ßÌåÓ¦ÓÃʱ¿ÉÒÔÓÃDOMDocumentµÄLoad·½·¨À´×°ÔØXMLÎĵµ ÓÃIXMLDOMNode µÄselectNodes£¨²éѯµÄ½á¹ûÓжà¸ö£¬µÃµ½´æ·ÅËÑË÷½á¹ûµÄÁ´±í£© »òselectSingleNode£¨²éѯµÄ½á¹ûÓÐÒ»¸ö£¬ÔÚÓжà¸öµÄÇé¿öÏ·µ»ØÕÒµ½µÄµÚÒ»¸ö½Úµã£©·½·¨½øÐвéѯ£¬ ÓÃcreateNodeºÍappendChild·½·¨À´´´½¨½ÚµãºÍ×·¼Ó½Úµã£¬ ÓÃIXMLDOMElementµÄsetAttributeºÍgetAttribute·½·¨À´ÉèÖúͻñµÃ½ÚµãµÄÊôÐÔ¡£*/ msxml::IXMLDOMNodeList nlist = ele.SelectNodes("item"); int len = nlist.length; if (len > 0) tv_folder.SetItemChild(hItem, 1); for (int i = 0; i < len; i++) { msxml::IXMLDOMElement e = nlist.item(i); string name = e.getAttribute("name"); int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), image);//trust(e as int)½«e·ÅÈëÊ÷½á¹¹ÀïÃæµÄdataÊôÐÔÖÐ ExpandCatChildFolder(h, e, 35); } return 1; } //Õ¹¿ªÎļþ¼ÐÃ÷ϸ int ExpandFolderItem(int hItem, string parentid) { xml x = ViewObject::RetrieveData(urlTree, "status", "ÓÐЧ", "parentid", parentid);//»ñÈ¡ºǫ́Êý¾Ý if (!x) { return 0; } msxml::IXMLDOMNodeList nlist = x.GetXmlDoc().SelectNodes("data/Item"); int len = nlist.length; for (int i = 0; i < len; i++) { msxml::IXMLDOMElement e = nlist.item(i); string name = e.selectSingleNode("name").text; int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), 35); ExpandCatChildFolder(h, e, 35); } return 1; } //²éÕÒµ±Ç°Ê÷ÏîµÄ¶¥¼¶Ä¿Â¼ int LookupTopFolder(int hItem) { int hRoot = tv_folder.GetRootItem(); while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem); return hItem; } //Ê÷Õ¹¿ª int OnTreeExpanding(ref TNotifyEvent evt, int p) { ref NMTREEVIEW nmtv = evt.pnmh; int hItem = nmtv.itemNew.hItem; int hTopItem = LookupTopFolder(hItem); string name = tv_folder.GetItemLabel(hTopItem); int child = tv_folder.GetChildItem(hItem); msxml::IXMLDOMElement e = tv_folder.GetItemData(hItem); string parentid = ""; if (name != "²¿ÃŽṹ") parentid = e.selectSingleNode("adid").text; trace(parentid); if (!child) { ExpandFolderItem(hItem, parentid); } return 1; } //²éѯ½ÚµãµÄÁбíÊý¾Ý int OnPreRetrieve() { int hItem = tv_folder.GetSelectedItem(); if (hItem <= 0) return 1; //int hCursor = xutil::SetCursorWait(); msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement); string name = e.getAttribute("name"); xml x = 0; string parentid = ""; if (name != "²¿ÃŽṹ") parentid = e.selectSingleNode("adid").text; trace(parentid); x = ViewObject::RetrieveData(myDataUrl, "parentid", parentid); if (x) { //trace(x.GetXml()); dw_list.Retrieve(x); dw_list.Redraw(); } else { dw_list.ResetEx(); dw_list.Redraw(); } dw_list.SetReadOnly(true); //xutil::RestoreCursor(hCursor); return 1; } int OnTreeSelChanged(ref TNotifyEvent evt, int p) { if (changeddlb) return 1; int hItem = tv_folder.GetSelectedItem(); if (hItem <= 0) return 1; int child = tv_folder.GetChildItem(hItem); if (!child) { int hCursor = xutil::SetCursorWait(); msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement); if (!e.getAttribute("name")) { string adid = e.selectSingleNode("adid").text; string parentid = adid; ExpandFolderItem(hItem, parentid); } } return OnPreRetrieve(); } //½¹µã¼¤»î´¦Àíº¯Êý int OnSetFocus(ref TEvent evt, int param) { //ÖØÖù¤¾ßÌõ SetAgent(); return 1; } int OnAdd() { int hItem = tv_folder.GetSelectedItem(); if (hItem <= 0) return 1; int hCursor = xutil::SetCursorWait(); msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement); string parentid = "";//¸¸¼¶id if (!e.getAttribute("name")) parentid = e.selectSingleNode("adid").text; xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); arg.AddArg("parentid", parentid); OpenWindow("dev:xpage[AdministrativeDepartmentFolder.vx]", cast(arg as int)); return 1; } int OnUpdate() { /*int hItem = tv_folder.GetSelectedItem(); if(hItem <=0) return 1; int hCursor = xutil::SetCursorWait(); msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement); if(e.getAttribute("name")) return 1;*/ int row = dw_list.GetRow(); if (row < 1) return 1; string parentid = "", adid = ""; /*msxml::IXMLDOMElement ele = dw_list.GetRowElement(row); adid = ele.selectSingleNode("adid").text;*/ adid = dw_list.GetItemString(row, "adid"); parentid = dw_list.GetItemString(row, "parentid"); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); /*string parentid = "", adid = "";//¸¸¼¶id if(!e.getAttribute("name")){ parentid = e.selectSingleNode("adid").text; adid = e.selectSingleNode("adid").text; }*/ arg.AddArg("parentid", parentid); arg.AddArg("adid", adid); OpenWindow("dev:xpage[AdministrativeDepartmentFolder.vx]", cast(arg as int)); return 1; } int OnDelete() { /*int hItem = tv_folder.GetSelectedItem(); if(hItem <=0) return 1; int hCursor = xutil::SetCursorWait(); msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement); string name = e.getAttribute("name"); string adid = ""; if(name != "²¿ÃŽṹ") adid = e.selectSingleNode("adid").text;*/ int row = dw_list.GetRow(); if (row < 1) return 1; string adid = ""; /*msxml::IXMLDOMElement ele = dw_list.GetRowElement(row); adid = ele.selectSingleNode("adid").text;*/ adid = dw_list.GetItemString(row, "adid"); xml x = new xml; x.setNativePointer(xml::CreateInstance()); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); arg.AddArg("adid", adid); if (getUrl("/sale/data/AdministrativeDepartment/ad_delete", arg.GetString(), x) != 1) { string error = x.GetXmlDoc().text; alert("err:" + error); return 1; } alert(x.GetXmlDoc().text); dw_list.DeleteRow(row); return 1; } int OnRefresh() { OnPreRetrieve(); return 1; } //ÃüÁî·¢²¼º¯Êý int OnCmdDispatch(string comdid) { if (comdid == "xmUpdate") return OnUpdate(); else if (comdid == "xmAdd") return OnAdd(); else if (comdid == "xmDelete") return OnDelete(); else if (comdid == "xmRefresh") return OnRefresh(); return 0; } //ÃüÁî´¦Àíʼþ int OnXCommand(ref TXCommandEvent evt, int param) { return OnCmdDispatch(evt.pStrID); } int OnAttachEvent() { AttachEvent("tv_folder", "TVN_SELCHANGED", OnTreeSelChanged); //Ê÷Ñ¡Ôñ AttachEvent("tv_folder", "TVN_ITEMEXPANDING", OnTreeExpanding); //Ê÷Õ¹¿ª //AttachEvent("dw_list","DWV_ROWFOCUSCHANGED",OnRowChanged); //AttachEvent("cbx_1","CBN_SELCHANGE",OnSelectDdlb); //AttachEvent("cbx_datashow","CBN_SELCHANGE",OnSelectDataShowDdlb); //°ó¶¨¹¤¾ßÌõµã»÷ʼþ AttachEvent("WM_XCOMMAND", OnXCommand); //»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ AttachEvent("WM_SETFOCUS", OnSetFocus); } /* //¼ÓÔØÖ÷ÌåÊý¾Ý int OnRetrieve() { xml x = new xml; x.setNativePointer(xml::CreateInstance()); xaserverarg arg = new xaserverarg; arg.setNativePointer(arg.CreateInstance()); //arg.AddArg("xxx","xxx"); if (getUrl(myDataUrl,arg.GetString(),x)!=1) { trace(x.GetXmlDoc().text); return -1; }else { dw_list.Retrieve(x); dw_list.Redraw(); } return 1; } */ //Õ¹¿ª×ÓÎļþ int ExpandChildFolder(int hItem, msxml::IXMLDOMElement pElement) { msxml::IXMLDOMNodeList nlist = pElement.SelectNodes("Item"); int len = nlist.length; for (int i = 0; i < len; i++) { msxml::IXMLDOMElement e = nlist.item(i); string name = e.getAttribute("name"); string sImage = e.getAttribute("image"); string child = e.getAttribute("child"); int image = 18; if (sImage) image = sImage.toInt(); int h = tv_folder.InsertChildItem(tv_folder.GetId(), hItem, name, trust(e as int), image); if (child != "no") tv_folder.SetItemChild(h, 1); ExpandChildFolder(h, e); } return 1; } //³õʼ»¯Îļþ¼Ð int InitialFolder() { msxml::IXMLDOMElement xframeElement = GetElement(); msxml::IXMLDOMElement e = xframeElement.selectSingleNode("//xtree[@name='tv_folder']/initial"); if (e) ExpandChildFolder(0, e); return 1; } int onload() { dw_list = GetControl("dw_list"); dw_list.openUrl("/sale/view/AdministrativeDepartment/template/adlist"); dw_list.SetColumnState("adid", false); dw_list.SetColumnState("parentid", false); myDataUrl = "/sale/data/AdministrativeDepartment/ad_list"; urlTree = "/sale/data/AdministrativeDepartment/ad_sidelist"; tv_folder = GetControl("tv_folder"); tv_folder.SetLineAtRoot(true); InitialFolder(); OnAttachEvent(); return 1; } int onloaded() { SetAgent(); return 1; } }; ]