#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 
 | 
[ 
 | 
    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<s;i++){ 
 | 
                            xitem=list.item(s - i - 1); 
 | 
                            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==L"1") 
 | 
                                treeview::SetItemChild1(tv_gs.GetId(), kitem,1); 
 | 
                        }             
 | 
                    } 
 | 
                }     
 | 
                return 1; 
 | 
            } 
 | 
                 
 | 
            int CreateRootTree(){ 
 | 
                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); 
 | 
                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; 
 | 
            }             
 | 
        ] 
 | 
    ] 
 | 
] 
 |