|  |  | 
 |  |  | use"lang.vl" | 
 |  |  | use "win.vl" | 
 |  |  | use "treeview.vm" | 
 |  |  | use "file.vl" | 
 |  |  | use "dev:vm[xdwtable.vm]" | 
 |  |  | #include <wobject/xstring.hpp> | 
 |  |  | #include <xcontrol/xtreeview.hpp> | 
 |  |  | #include <xcontrol/xdwgrid.hpp> | 
 |  |  | #include <wobject/xdouble.hpp> | 
 |  |  | #include <xcontrol/xlayersheet.hpp> | 
 |  |  |  | 
 |  |  | #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" | 
 |  |  | #include "viewobject/view.base.hpp" | 
 |  |  |  | 
 |  |  | using xml = KXMLDOMDocument; | 
 |  |  |  | 
 |  |  | unit vbusiness.vpage | 
 |  |  | [ | 
 |  |  | 
 |  |  |    about SKUItemcategoryselect | 
 |  |  |    [ | 
 |  |  |       field: | 
 |  |  |          xdwtable__  dw_category;					 | 
 |  |  |          xdwtable  dw_category;					 | 
 |  |  |       method: | 
 |  |  |       [ | 
 |  |  |          treeview__      tv_gs;	 | 
 |  |  |          treeview      tv_gs;	 | 
 |  |  |          //命令发布函数 | 
 |  |  |          string GetPath(int tv, int h) | 
 |  |  |          xstring GetPath(int tv, int h) | 
 |  |  |          { | 
 |  |  |             string str = treeview__::GetItemLabel(tv, h); | 
 |  |  |             int k = treeview__::GetParentItem(tv, h); | 
 |  |  |             int r = treeview__::GetRootItem(tv); | 
 |  |  |             xstring str = treeview::GetItemLabel(tv, h); | 
 |  |  |             int k = treeview::GetParentItem(tv, h); | 
 |  |  |             int r = treeview::GetRootItem(tv); | 
 |  |  |             while(k > 0 && r != k) | 
 |  |  |             { | 
 |  |  |                string tmp = treeview__::GetItemLabel(tv, k); | 
 |  |  |                str = tmp+"\\" + str; | 
 |  |  |                k = treeview__::GetParentItem(tv, k); | 
 |  |  |                xstring tmp = treeview::GetItemLabel(tv, k); | 
 |  |  |                str = tmp+L"\\" + str; | 
 |  |  |                k = treeview::GetParentItem(tv, k); | 
 |  |  |             } | 
 |  |  |             return str; | 
 |  |  |          } | 
 |  |  |          int xunhuan(int pItem, int hItem) | 
 |  |  |          { | 
 |  |  |             xdwtable__ dw = new xdwtable__; | 
 |  |  |             dw.setNativePointer(dw_category.FindDwTable("Item",0));						 | 
 |  |  |             if(treeview__::GetChecked(tv_gs.GetId(),hItem) > 0) | 
 |  |  |             xdwtable dw = new xdwtable; | 
 |  |  |             dw.setNativePointer(dw_category.FindDwTable(L"Item",0));						 | 
 |  |  |             if(treeview::GetChecked(tv_gs.GetId(),hItem) > 0) | 
 |  |  |             { | 
 |  |  |                msxml::IXMLDOMElement e = treeview__::GetItemData(tv_gs.GetId(),hItem); | 
 |  |  |                string id = e.selectSingleNode("CategoryID").text; | 
 |  |  |                string Name =GetPath(tv_gs.GetId(), hItem); | 
 |  |  |                msxml::IXMLDOMElement e = treeview::GetItemData(tv_gs.GetId(),hItem); | 
 |  |  |                xstring id = e.selectSingleNode(L"CategoryID").text; | 
 |  |  |                xstring Name =GetPath(tv_gs.GetId(), hItem); | 
 |  |  |                trace(Name); | 
 |  |  |                if(dw.GetItemString(1,"CategoryID")=="") | 
 |  |  |                if(dw.GetItemString(1,L"CategoryID")==L"") | 
 |  |  |                {    | 
 |  |  |                   dw.ItemChangeTo(1,"CategoryID",id); | 
 |  |  |                   dw.ItemChangeTo(1,"Category",Name);						 | 
 |  |  |                   dw.ItemChangeTo(1,L"CategoryID",id); | 
 |  |  |                   dw.ItemChangeTo(1,L"Category",Name);						 | 
 |  |  |                } | 
 |  |  |                else | 
 |  |  |                { | 
 |  |  |                   int n=dw.InsertRow(0);                      | 
 |  |  |                   dw.ItemChangeTo(n,"CategoryID",id); | 
 |  |  |                   dw.ItemChangeTo(n,"Category",Name);						 | 
 |  |  |                   dw.ItemChangeTo(n,L"CategoryID",id); | 
 |  |  |                   dw.ItemChangeTo(n,L"Category",Name);						 | 
 |  |  |                }    | 
 |  |  |     | 
 |  |  |           | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             int cItem = treeview__::GetChildItem(tv_gs.GetId(), hItem); | 
 |  |  |             int cItem = treeview::GetChildItem(tv_gs.GetId(), hItem); | 
 |  |  |             if(cItem > 0) | 
 |  |  |             { | 
 |  |  |                xunhuan(pItem,cItem); | 
 |  |  |             } | 
 |  |  |             int nItem = treeview__::GetNextItem(tv_gs.GetId(), hItem); | 
 |  |  |             int nItem = treeview::GetNextItem(tv_gs.GetId(), hItem); | 
 |  |  |             if(nItem > 0) | 
 |  |  |             { | 
 |  |  |                xunhuan(pItem,nItem); | 
 |  |  |             } | 
 |  |  |             return 1; | 
 |  |  |          }             | 
 |  |  |          int OnCmdDispatch(string comdid) | 
 |  |  |          int OnCmdDispatch(xstring comdid) | 
 |  |  |          { | 
 |  |  |             if(comdid=="ok") | 
 |  |  |             if(comdid==L"ok") | 
 |  |  |             { | 
 |  |  |                int hitem = treeview__::GetSelectedItem(tv_gs.GetId()); | 
 |  |  |                int hitem = treeview::GetSelectedItem(tv_gs.GetId()); | 
 |  |  |                if (hitem >0) | 
 |  |  |                { | 
 |  |  |                   msxml::IXMLDOMElement ele=treeview__::GetItemData(tv_gs.GetId(),hitem); | 
 |  |  |                   string guid = ele.selectSingleNode("CategoryID").text; | 
 |  |  |                   //string label = ele.selectSingleNode("CName").text; | 
 |  |  |                   string label = GetPath(tv_gs.GetId(), hitem); | 
 |  |  |                   msxml::IXMLDOMElement ele=treeview::GetItemData(tv_gs.GetId(),hitem); | 
 |  |  |                   xstring guid = ele.selectSingleNode(L"CategoryID").text; | 
 |  |  |                   //xstring label = ele.selectSingleNode(L"CName").text; | 
 |  |  |                   xstring label = GetPath(tv_gs.GetId(), hitem); | 
 |  |  |                   trace(label); | 
 |  |  |                   xunhuan(hitem, treeview__::GetChildItem(tv_gs.GetId(), treeview__::GetRootItem(tv_gs.GetId()))); | 
 |  |  |                   win__::CloseWindow(); | 
 |  |  |                   xunhuan(hitem, treeview::GetChildItem(tv_gs.GetId(), treeview::GetRootItem(tv_gs.GetId()))); | 
 |  |  |                   win::CloseWindow(); | 
 |  |  |                } | 
 |  |  |                return 1; | 
 |  |  |             } | 
 |  |  |             if(comdid=="close")  | 
 |  |  |                win__::CloseWindow(); | 
 |  |  |             if(comdid==L"close")  | 
 |  |  |                win::CloseWindow(); | 
 |  |  |             return 0; | 
 |  |  |          } | 
 |  |  |           | 
 |  |  |          int OnCmdDispatch0(string comdid) | 
 |  |  |          int OnCmdDispatch0(xstring comdid) | 
 |  |  |          { | 
 |  |  |             xaserverarg__ arg = new xaserverarg__; | 
 |  |  |             arg.setNativePointer(arg.CreateInstance());							 | 
 |  |  |             arg = win__::GetParam(); | 
 |  |  |             arg.AddArg("comdid",comdid); | 
 |  |  |             int xitem = treeview__::GetSelectedItem(tv_gs.GetId()); | 
 |  |  |             if(comdid=="ok" && xitem != 0) | 
 |  |  |             xaserverarg arg; | 
 |  |  | 									 | 
 |  |  |             arg = win::GetParam(); | 
 |  |  |             arg.AddArg(L"comdid",comdid); | 
 |  |  |             int xitem = treeview::GetSelectedItem(tv_gs.GetId()); | 
 |  |  |             if(comdid==L"ok" && xitem != 0) | 
 |  |  |             { | 
 |  |  |                msxml::IXMLDOMElement e=treeview__::GetItemData(tv_gs.GetId(),xitem); | 
 |  |  |                msxml::IXMLDOMElement e=treeview::GetItemData(tv_gs.GetId(),xitem); | 
 |  |  |                 | 
 |  |  |                string sHasChild=e.selectSingleNode("@HasChild").text; | 
 |  |  |                xstring sHasChild=e.selectSingleNode(L"@HasChild").text; | 
 |  |  |  | 
 |  |  |                if(treeview__::GetChildItem(tv_gs.GetId(),xitem)>0 || sHasChild=="1") | 
 |  |  |                if(treeview::GetChildItem(tv_gs.GetId(),xitem)>0 || sHasChild==L"1") | 
 |  |  |                { | 
 |  |  |                   alert("提示:请选择最后一级类别!"); | 
 |  |  |                   alert(L"提示:请选择最后一级类别!"); | 
 |  |  |                   return 0; | 
 |  |  |                } | 
 |  |  |           | 
 |  |  |                string ID = e.selectSingleNode("CategoryID").text; | 
 |  |  |                string CName = e.selectSingleNode("CName").text; | 
 |  |  |                xstring ID = e.selectSingleNode(L"CategoryID").text; | 
 |  |  |                xstring CName = e.selectSingleNode(L"CName").text; | 
 |  |  |                trace(CName); | 
 |  |  |                string ruler; | 
 |  |  |                if(e.selectSingleNode("SpecRule")) | 
 |  |  |                   ruler = e.selectSingleNode("SpecRule").text; | 
 |  |  |                xstring ruler; | 
 |  |  |                if(e.selectSingleNode(L"SpecRule")) | 
 |  |  |                   ruler = e.selectSingleNode(L"SpecRule").text; | 
 |  |  |                else | 
 |  |  |                   ruler =""; | 
 |  |  |                arg.AddArg("CategoryID",ID); | 
 |  |  |                arg.AddArg("CName",CName); | 
 |  |  |                arg.AddArg("SpecRule",ruler); | 
 |  |  |                   ruler =L""; | 
 |  |  |                arg.AddArg(L"CategoryID",ID); | 
 |  |  |                arg.AddArg(L"CName",CName); | 
 |  |  |                arg.AddArg(L"SpecRule",ruler); | 
 |  |  |                 | 
 |  |  |             } | 
 |  |  |             win__::CloseWindow(); | 
 |  |  |             win::CloseWindow(); | 
 |  |  |             return 0; | 
 |  |  |          } | 
 |  |  |           | 
 |  |  | 
 |  |  |          } | 
 |  |  |           | 
 |  |  |          int CreateSubTree(int pitem){ | 
 |  |  |             msxml::IXMLDOMElement sitemdata=treeview__::GetItemData(tv_gs.GetId(), pitem); | 
 |  |  |             string sHasChild=sitemdata.selectSingleNode("@HasChild").text;//sitemdata.getAttribute("HasChild");	 | 
 |  |  |             string pid=sitemdata.selectSingleNode("CategoryID").text; | 
 |  |  |             //trace(sHasChild+"sdaga"+pid); | 
 |  |  |             if(sHasChild=="1"){//数据有子节点		 | 
 |  |  |                int citem=treeview__::GetChildItem(tv_gs.GetId(), pitem); | 
 |  |  |             msxml::IXMLDOMElement sitemdata=treeview::GetItemData(tv_gs.GetId(), pitem); | 
 |  |  |             xstring sHasChild=sitemdata.selectSingleNode(L"@HasChild").text;//sitemdata.getAttribute(L"HasChild");	 | 
 |  |  |             xstring pid=sitemdata.selectSingleNode(L"CategoryID").text; | 
 |  |  |             //trace(sHasChild+L"sdaga"+pid); | 
 |  |  |             if(sHasChild==L"1"){//数据有子节点		 | 
 |  |  |                int citem=treeview::GetChildItem(tv_gs.GetId(), pitem); | 
 |  |  |  | 
 |  |  |                //alert(string(citem)); | 
 |  |  |                //alert(xstring(citem)); | 
 |  |  |                if (citem==0){//树视图有子节点 | 
 |  |  |                   xml__ x=new xml__; | 
 |  |  |                   x.setNativePointer(xml__::CreateInstance()); | 
 |  |  |                   xaserverarg__ arg=new xaserverarg__; | 
 |  |  |                   arg.setNativePointer(arg.CreateInstance());	 | 
 |  |  |                   arg.AddArg("parentID",pid); | 
 |  |  |                   //if(xaserver__::ExecXQuery(GetServerUrl(),"[ItemCategoryEx.xq]",arg.GetString(),x)!=1) | 
 |  |  |                   if(url::get(GetEntityName(1)+"/entity/category",arg.GetString(),x)!=1) | 
 |  |  |                   xml x; | 
 |  |  | 						 | 
 |  |  |                   xaserverarg arg; | 
 |  |  | 						 | 
 |  |  |                   arg.AddArg(L"parentID",pid); | 
 |  |  |                   //if(xaserver::ExecXQuery(GetServerUrl(),L"[ItemCategoryEx.xq]",arg.GetString(),x)!=1) | 
 |  |  |                   if(url::get(GetEntityName(1)+L"/entity/category",arg.GetString(),x)!=1) | 
 |  |  |                   { | 
 |  |  |                      trace(x.GetXml()); | 
 |  |  |                      return 0; | 
 |  |  |                   } | 
 |  |  |                   //trace(x.GetXml()); | 
 |  |  |                   var list=x.GetXmlDoc().selectNodes("root/Category"); | 
 |  |  |                   var list=x.GetXmlDoc().selectNodes(L"root/Category"); | 
 |  |  |                   int i=0,s=list.length; | 
 |  |  |                   msxml::IXMLDOMElement xitem; | 
 |  |  |                   for (i=0;i<s;i++){ | 
 |  |  |                      xitem=list.item(s - i - 1); | 
 |  |  |                      string Name=xitem.selectSingleNode("CName").text; | 
 |  |  |                      string Has2D=xitem.selectSingleNode("@Has2D").text;//item.getAttribute("Has2D");	 | 
 |  |  |                      if (Has2D=="1") | 
 |  |  |                         Name=Name+"*";	 | 
 |  |  |                      int kitem=treeview__::InsertItem(tv_gs.GetId(), pitem,0,Name,xitem,15);	 | 
 |  |  |                      //int kitem=treeview__::InsertChildItem(tv_gs.GetId(), pitem,Name,xitem,15);	 | 
 |  |  |                      string HasChild=xitem.selectSingleNode("@HasChild").text;//item.getAttribute("HasChild");	 | 
 |  |  |                      xstring Name=xitem.selectSingleNode(L"CName").text; | 
 |  |  |                      xstring Has2D=xitem.selectSingleNode(L"@Has2D").text;//item.getAttribute(L"Has2D");	 | 
 |  |  |                      if (Has2D==L"1") | 
 |  |  |                         Name=Name+L"*";	 | 
 |  |  |                      int kitem=treeview::InsertItem(tv_gs.GetId(), pitem,0,Name,xitem,15);	 | 
 |  |  |                      //int kitem=treeview::InsertChildItem(tv_gs.GetId(), pitem,Name,xitem,15);	 | 
 |  |  |                      xstring HasChild=xitem.selectSingleNode(L"@HasChild").text;//item.getAttribute(L"HasChild");	 | 
 |  |  |                      //trace(HasChild, kitem); | 
 |  |  |                      if (HasChild=="1") | 
 |  |  |                         treeview__::SetItemChild1(tv_gs.GetId(), kitem,1); | 
 |  |  |                      if (HasChild==L"1") | 
 |  |  |                         treeview::SetItemChild1(tv_gs.GetId(), kitem,1); | 
 |  |  |                   }          | 
 |  |  |                } | 
 |  |  |             }    | 
 |  |  | 
 |  |  |          } | 
 |  |  |              | 
 |  |  |          int CreateRootTree(){ | 
 |  |  |             string rootid="00000000-0000-0000-0000-000000000000"; | 
 |  |  |             xml__ x=new xml__; | 
 |  |  |             x.setNativePointer(xml__::CreateInstance());							 | 
 |  |  |             x.LoadXml("<Category HasChild='1'><CategoryID>"+rootid+"</CategoryID></Category>"); | 
 |  |  |             int hroot=treeview__::InsertItem(tv_gs.GetId(),"公司产品类别", x.GetXmlDoc().documentElement, 17); | 
 |  |  |             xstring rootid=L"00000000-0000-0000-0000-000000000000"; | 
 |  |  |             xml x=new xml; | 
 |  |  | 											 | 
 |  |  |             x.LoadXml(L"<Category HasChild='1'><CategoryID>"+rootid+L"</CategoryID></Category>"); | 
 |  |  |             int hroot=treeview::InsertItem(tv_gs.GetId(),L"公司产品类别", x.GetXmlDoc().documentElement, 17); | 
 |  |  |             CreateSubTree(hroot); | 
 |  |  |             treeview__::ExpandItemEx(tv_gs.GetId(),hroot); | 
 |  |  |             treeview::ExpandItemEx(tv_gs.GetId(),hroot); | 
 |  |  |             return 1; | 
 |  |  |          }                         | 
 |  |  |  | 
 |  |  | 
 |  |  |          int OnAttachEvent() | 
 |  |  |          { | 
 |  |  |             //绑定工具条点击事件 | 
 |  |  |             AttachEvent("WM_XCOMMAND",OnXCommand); | 
 |  |  |             AttachEvent(L"WM_XCOMMAND",OnXCommand); | 
 |  |  |             //获得树的展开事件 | 
 |  |  |             AttachEvent("tv_gs", "TVN_ITEMEXPANDING",OnTreeExpanding); | 
 |  |  |             AttachEvent(L"tv_gs", L"TVN_ITEMEXPANDING",OnTreeExpanding); | 
 |  |  |          } | 
 |  |  |          int onload() | 
 |  |  |          { | 
 |  |  |             if (GetParam()) | 
 |  |  |             { | 
 |  |  |                xaserverarg__ arg1=GetParam(); | 
 |  |  |                dw_category = new xdwtable__; | 
 |  |  |                dw_category.setNativePointer(arg1.GetArgString("dw_category").toInt()); | 
 |  |  |                xaserverarg arg1=GetParam(); | 
 |  |  |                dw_category = new xdwtable; | 
 |  |  |                dw_category.setNativePointer(arg1.GetArgString(L"dw_category").toInt()); | 
 |  |  |             }          | 
 |  |  |             tv_gs = new treeview__; | 
 |  |  |             tv_gs.setNativePointer(GetControl("tv_gs"));					 | 
 |  |  |             tv_gs = new treeview; | 
 |  |  |             tv_gs.setNativePointer(GetControl(L"tv_gs"));					 | 
 |  |  |             CreateRootTree(); | 
 |  |  |             OnAttachEvent(); | 
 |  |  |             return 1; |