#include #include #include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; unit vbusiness.vpage [ SKUItemcategoryselect is extend TProduct; about SKUItemcategoryselect [ field: xdwtable dw_category; method: [ treeview tv_gs; //ÃüÁî·¢²¼º¯Êý xstring GetPath(int tv, int h) { xstring str = treeview::GetItemLabel(tv, h); int k = treeview::GetParentItem(tv, h); int r = treeview::GetRootItem(tv); while(k > 0 && r != 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(L"Item",0)); if(treeview::GetChecked(tv_gs.GetId(),hItem) > 0) { 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,L"CategoryID")==L"") { dw.ItemChangeTo(1,L"CategoryID",id); dw.ItemChangeTo(1,L"Category",Name); } else { int n=dw.InsertRow(0); dw.ItemChangeTo(n,L"CategoryID",id); dw.ItemChangeTo(n,L"Category",Name); } } int cItem = treeview::GetChildItem(tv_gs.GetId(), hItem); if(cItem > 0) { xunhuan(pItem,cItem); } int nItem = treeview::GetNextItem(tv_gs.GetId(), hItem); if(nItem > 0) { xunhuan(pItem,nItem); } return 1; } int OnCmdDispatch(xstring comdid) { if(comdid==L"ok") { int hitem = treeview::GetSelectedItem(tv_gs.GetId()); if (hitem >0) { 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(); } return 1; } if(comdid==L"close") win::CloseWindow(); return 0; } int OnCmdDispatch0(xstring comdid) { 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); xstring sHasChild=e.selectSingleNode(L"@HasChild").text; if(treeview::GetChildItem(tv_gs.GetId(),xitem)>0 || sHasChild==L"1") { alert(L"Ìáʾ£ºÇëÑ¡Ôñ×îºóÒ»¼¶Àà±ð!"); return 0; } xstring ID = e.selectSingleNode(L"CategoryID").text; xstring CName = e.selectSingleNode(L"CName").text; trace(CName); xstring ruler; if(e.selectSingleNode(L"SpecRule")) ruler = e.selectSingleNode(L"SpecRule").text; else ruler =L""; arg.AddArg(L"CategoryID",ID); arg.AddArg(L"CName",CName); arg.AddArg(L"SpecRule",ruler); } win::CloseWindow(); return 0; } //ÃüÁî´¦Àíʼþ int OnXCommand(ref TXCommandEvent evt,int p) { return OnCmdDispatch(evt.pStrID); } int CreateSubTree(int 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(xstring(citem)); if (citem==0){//Ê÷ÊÓͼÓÐ×Ó½Úµã 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(L"root/Category"); int i=0,s=list.length; msxml::IXMLDOMElement xitem; for (i=0;i"+rootid+L""); int hroot=treeview::InsertItem(tv_gs.GetId(),L"¹«Ë¾²úÆ·Àà±ð", x.GetXmlDoc().documentElement, 17); CreateSubTree(hroot); treeview::ExpandItemEx(tv_gs.GetId(),hroot); return 1; } int OnTreeExpanding(ref TNotifyEvent evt,int p) { ref NMTREEVIEW nmtv = evt.pnmh; int sitem = nmtv.itemNew.hItem; CreateSubTree(sitem); return 1; } int OnAttachEvent() { //°ó¶¨¹¤¾ßÌõµã»÷ʼþ AttachEvent(L"WM_XCOMMAND",OnXCommand); //»ñµÃÊ÷µÄÕ¹¿ªÊ¼þ AttachEvent(L"tv_gs", L"TVN_ITEMEXPANDING",OnTreeExpanding); } int onload() { if (GetParam()) { xaserverarg arg1=GetParam(); dw_category = new xdwtable; dw_category.setNativePointer(arg1.GetArgString(L"dw_category").toInt()); } tv_gs = new treeview; tv_gs.setNativePointer(GetControl(L"tv_gs")); CreateRootTree(); OnAttachEvent(); return 1; } ] ] ]