|  |  | 
 |  |  | use "list.vl" | 
 |  |  | use "dev:vm[combobox.vm]" | 
 |  |  | use "treeview.vm" | 
 |  |  | use "dev:vm[gridpages.vm]" | 
 |  |  | use "dev:vm[xutil.vm]" | 
 |  |  | use "dev:vm[xpage.vm]" | 
 |  |  | use "dev:vm[xcell.vm]" | 
 |  |  | use "file.vl" | 
 |  |  | use "publiccode.vl" | 
 |  |  | #include <wobject/xstring.hpp> | 
 |  |  | #include <xcontrol/xtreeview.hpp> | 
 |  |  | #include <xcontrol/xdwgrid.hpp> | 
 |  |  | #include <wobject/xdouble.hpp> | 
 |  |  | #include <xcontrol/xlayersheet.hpp> | 
 |  |  |  | 
 |  |  | unit vbusiness.entity | 
 |  |  | [ | 
 |  |  |    SKUTemplate is extend frame; | 
 |  |  |    about SKUTemplate | 
 |  |  |    [ | 
 |  |  |       field: | 
 |  |  |       [ | 
 |  |  |          xdwgrid__  dw_list; 		 | 
 |  |  |          xdwtable__ dw_maint; | 
 |  |  |          xdwtable__ dw_category; | 
 |  |  |          int rowno; | 
 |  |  |       ] | 
 |  |  | 		 | 
 |  |  |       method: | 
 |  |  |       [	 | 
 |  |  |          int SetAgent() | 
 |  |  |          { | 
 |  |  |             string xfNodeAgentArea  = "agentarea"; | 
 |  |  |             xnode__ anode = new xnode__; | 
 |  |  |             anode.setNativePointer(GetAgentNode(xfNodeAgentArea)); | 
 |  |  |             var xframeElement =  GetElement(); | 
 |  |  |             var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*"); | 
 |  |  |             if(agent) | 
 |  |  |             { | 
 |  |  |                string s = agent.xml; | 
 |  |  |                SetAgentNodeContent (anode,s); | 
 |  |  |             } | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  | 				 | 
 |  |  |          int OnSetFocus(ref TEvent evt,int p) | 
 |  |  |          {		 | 
 |  |  |             SetAgent()   ;	 | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  | #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" | 
 |  |  | #include "viewobject/view.base.hpp" | 
 |  |  |  | 
 |  |  |          int  OnReTrieve() | 
 |  |  |          { | 
 |  |  |             string query="[SKUTemplate.list.xq]";				 | 
 |  |  |             xml__ x = new xml__; | 
 |  |  |             x.setNativePointer(x.CreateInstance()); | 
 |  |  |             xaserverarg__ arg = new xaserverarg__; | 
 |  |  |             arg.setNativePointer(arg.CreateInstance()); | 
 |  |  |             if (xaserver__::ExecXQuery(GetServerUrl(),query,arg.GetString(),x)!=1) | 
 |  |  |             { | 
 |  |  |                trace(x.GetXmlDoc().text); | 
 |  |  |                return -1; | 
 |  |  |             }else	 | 
 |  |  |             {		 | 
 |  |  |                dw_list.Retrieve(x); | 
 |  |  |                dw_list.Redraw();				 | 
 |  |  |             } | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |          int OnRowChanged(ref TNotifyEvent evt,int p) | 
 |  |  |          { | 
 |  |  | using xml = KXMLDOMDocument; | 
 |  |  | class __declspec(dllexport) SKUTemplate : public xframe | 
 |  |  | { | 
 |  |  | public: | 
 |  |  |  | 
 |  |  |             ref DWNMHDR  hdr = evt.pnmh;		 | 
 |  |  |             int ll_row = hdr.row; | 
 |  |  |             rowno=ll_row; | 
 |  |  |             string TemplateContent = dw_list.GetItemString(ll_row,"TemplateContent"); | 
 |  |  |             string Category = dw_list.GetItemString(ll_row,"Category"); | 
 |  |  |             if(TemplateContent=="") | 
 |  |  |             {	 | 
 |  |  |                dw_maint.openUrl("其他设置.vface/template/other/TemplateContent"); | 
 |  |  |                dw_maint.SetColHeaderHeight(0); | 
 |  |  |                dw_maint.SetRowSelectorWidth(0);				 | 
 |  |  |             } | 
 |  |  |             if(Category=="") | 
 |  |  |             {	 | 
 |  |  |                dw_category.openUrl("其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |                dw_category.SetColHeaderHeight(0); | 
 |  |  |                dw_category.SetRowSelectorWidth(0);					 | 
 |  |  |             }	 | 
 |  |  |             xml__ x = new xml__; | 
 |  |  |             x.setNativePointer(x.CreateInstance()); | 
 |  |  |             x.LoadXml(TemplateContent); | 
 |  |  |             xml__ x1 = new xml__; | 
 |  |  |             x1.setNativePointer(x.CreateInstance()); | 
 |  |  |             x1.LoadXml(Category); | 
 |  |  |             dw_maint.Retrieve(x); | 
 |  |  |             dw_maint.Redraw(); | 
 |  |  |             dw_category.Retrieve(x1); | 
 |  |  |             dw_category.Redraw();					 | 
 |  |  |             return 1; | 
 |  |  |          }				 | 
 |  |  |          int OnSave() | 
 |  |  |    xdwgrid  dw_list; | 
 |  |  |    xdwtable dw_maint; | 
 |  |  |    xdwtable dw_category; | 
 |  |  |    int rowno; | 
 |  |  |  | 
 |  |  |    xnode   m_agentNode; | 
 |  |  | public: | 
 |  |  |    SKUTemplate(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} | 
 |  |  | public: | 
 |  |  |    static SKUTemplate* CreateInstance(void* implPtr, void* hWnd) | 
 |  |  |    { | 
 |  |  |       SKUTemplate* pWin = new SKUTemplate(implPtr, (HWND)hWnd); | 
 |  |  |       return pWin; | 
 |  |  |    } | 
 |  |  |    int SetAgent() | 
 |  |  |    { | 
 |  |  |       xstring xfNodeAgentArea = L"agentarea"; | 
 |  |  |       xnode anode = GetAgentNode(xfNodeAgentArea); | 
 |  |  |       if (m_agentNode) | 
 |  |  |       { | 
 |  |  |          SetAgentNode(anode, m_agentNode); | 
 |  |  |       } | 
 |  |  |       else | 
 |  |  |       { | 
 |  |  |          KXMLDOMElement xframeElement = GetElement(); | 
 |  |  |          KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*"); | 
 |  |  |          if (agent) | 
 |  |  |          { | 
 |  |  |             dw_list.AcceptText(); | 
 |  |  |             dw_maint.AcceptText(); | 
 |  |  |             dw_category.AcceptText(); | 
 |  |  | 				 | 
 |  |  |             xml__ x=new xml__; | 
 |  |  |             x.setNativePointer(x.CreateInstance()); | 
 |  |  |             dw_list.DwUpdateAllToEx(x.GetXmlDoc()); | 
 |  |  |             trace(x.GetXml()); | 
 |  |  |             xaserverarg__ arg = new xaserverarg__; | 
 |  |  |             arg.setNativePointer(arg.CreateInstance());				 | 
 |  |  |             arg.AddArg("content", x.GetXml()); | 
 |  |  |             arg.AddArg("dbmap", "SKUTemplate.dbmap");		 | 
 |  |  |             if(xaserver__::ExecXAction(this.GetServerUrl(),"[onSave.xa]",arg.GetString(),x)!=1) | 
 |  |  |             { | 
 |  |  |                trace(x.GetXmlDoc().documentElement.text); | 
 |  |  |                alert("保存失败"); | 
 |  |  |             }else{ | 
 |  |  |                alert("保存成功"); | 
 |  |  |             }				 | 
 |  |  |             dw_list.ResetUpdateStatus(); | 
 |  |  |             dw_maint.ResetUpdateStatus(); | 
 |  |  |             dw_category.ResetUpdateStatus(); | 
 |  |  |             xstring s = agent.xml(); | 
 |  |  |             m_agentNode = SetAgentNode(anode, s); | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnSetFocus(TEvent* evt, LPARAM p) | 
 |  |  |    { | 
 |  |  |       SetAgent(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int  OnReTrieve() | 
 |  |  |    { | 
 |  |  |       xstring query = L"[SKUTemplate.list.xq]"; | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  |       xaserverarg arg; | 
 |  |  |  | 
 |  |  |       if (xaserver::ExecXQuery(GetServerUrl(), query, arg.GetString(), x) != 1) | 
 |  |  |       { | 
 |  |  |          trace(x.text()); | 
 |  |  |          return -1; | 
 |  |  |       } | 
 |  |  |       else | 
 |  |  |       { | 
 |  |  |          dw_list.Retrieve(x); | 
 |  |  |          dw_list.Redraw(); | 
 |  |  |       } | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int OnRowChanged(TEvent* evt, LPARAM p) | 
 |  |  |    { | 
 |  |  |  | 
 |  |  |       DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; | 
 |  |  |       int ll_row = hdr.row; | 
 |  |  |       rowno = ll_row; | 
 |  |  |       xstring TemplateContent = dw_list.GetItemString(ll_row, L"TemplateContent"); | 
 |  |  |       xstring Category = dw_list.GetItemString(ll_row, L"Category"); | 
 |  |  |       if (TemplateContent == L"") | 
 |  |  |       { | 
 |  |  |          dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent"); | 
 |  |  |          dw_maint.SetColHeaderHeight(0); | 
 |  |  |          dw_maint.SetRowSelectorWidth(0); | 
 |  |  |       } | 
 |  |  |       if (Category == L"") | 
 |  |  |       { | 
 |  |  |          dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |          dw_category.SetColHeaderHeight(0); | 
 |  |  |          dw_category.SetRowSelectorWidth(0); | 
 |  |  |       } | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  |       x.loadXML(TemplateContent); | 
 |  |  |       xml x1; | 
 |  |  |       x1.loadXML(Category); | 
 |  |  |       dw_maint.Retrieve(x); | 
 |  |  |       dw_maint.Redraw(); | 
 |  |  |       dw_category.Retrieve(x1); | 
 |  |  |       dw_category.Redraw(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int OnSave() | 
 |  |  |    { | 
 |  |  |       dw_list.AcceptText(); | 
 |  |  |       dw_maint.AcceptText(); | 
 |  |  |       dw_category.AcceptText(); | 
 |  |  |  | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  |       dw_list.DwUpdateAllToEx(x); | 
 |  |  |       trace(x.xml()); | 
 |  |  |       xaserverarg arg; | 
 |  |  |  | 
 |  |  |       arg.AddArg(L"content", x.xml()); | 
 |  |  |       arg.AddArg(L"dbmap", L"SKUTemplate.dbmap"); | 
 |  |  |       if (xaserver::ExecXAction(GetServerUrl(), L"[onSave.xa]", arg.GetString(), x) != 1) | 
 |  |  |       { | 
 |  |  |          trace(x.documentElement().text()); | 
 |  |  |          alert(L"保存失败"); | 
 |  |  |       } | 
 |  |  |       else { | 
 |  |  |          alert(L"保存成功"); | 
 |  |  |       } | 
 |  |  |       dw_list.ResetUpdateStatus(); | 
 |  |  |       dw_maint.ResetUpdateStatus(); | 
 |  |  |       dw_category.ResetUpdateStatus(); | 
 |  |  |       dw_list.Redraw(); | 
 |  |  |       dw_maint.Redraw(); | 
 |  |  |       dw_category.Redraw(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int OnSetValue(int row) { | 
 |  |  |       dw_list.SetItemString(row, L"TemplateID", publiccode::GetGuid()); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int RemoveAttribute(xml x, xstring nodename)//根据名称删除属性节点 | 
 |  |  |    { | 
 |  |  |       KXMLDOMElement e; | 
 |  |  |       auto list = x.getElementsByTagName(L"" + nodename + L""); | 
 |  |  |       if (list) | 
 |  |  |       { | 
 |  |  |  | 
 |  |  |          int nlen = list.length(); | 
 |  |  |          int i; | 
 |  |  |          for (i = 0; i < nlen; i++) | 
 |  |  |          { | 
 |  |  |             e = list.item(i); | 
 |  |  |             //trace(e.xml); | 
 |  |  |             e.removeAttribute(L"update.new"); | 
 |  |  |             e.removeAttribute(L"update.modify"); | 
 |  |  |             e.removeAttribute(L"update.delete"); | 
 |  |  |             e.removeAttribute(L"guid"); | 
 |  |  |             e.removeAttribute(L"update.origin"); | 
 |  |  |             e.removeAttribute(L"isnull"); | 
 |  |  |             //trace(e.xml);				 | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int setMaint() | 
 |  |  |    { | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  |       dw_maint.DwUpdateAllTo(x); | 
 |  |  |       int row = dw_list.GetRow(); | 
 |  |  |       trace(x.xml()); | 
 |  |  |       RemoveAttribute(x, L"TemplateContent"); | 
 |  |  |       RemoveAttribute(x, L"Item"); | 
 |  |  |       RemoveAttribute(x, L"ItemName"); | 
 |  |  |       RemoveAttribute(x, L"Remark"); | 
 |  |  |       RemoveAttribute(x, L"SeqNo"); | 
 |  |  |       //trace(x.xml());				 | 
 |  |  |       dw_list.SetItemString(row, L"TemplateContent", x.xml()); | 
 |  |  |       dw_list.Redraw(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int setItemCategory() | 
 |  |  |    { | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  |       dw_category.DwUpdateAllTo(x); | 
 |  |  |       int row = dw_list.GetRow(); | 
 |  |  |       //trace(row); | 
 |  |  |       dw_list.SetItemString(row, L"Category", x.xml()); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int OnAddRow() | 
 |  |  |    { | 
 |  |  |       int row = dw_list.InsertRow(0); | 
 |  |  |       int rows = dw_list.GetRowCount(); | 
 |  |  |       OnSetValue(rows); | 
 |  |  |       dw_list.SetRow(dw_list.GetRowCount()); | 
 |  |  |       //trace(row.toString()); | 
 |  |  |       dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent"); | 
 |  |  |       dw_maint.SetColHeaderHeight(0); | 
 |  |  |       dw_maint.SetRowSelectorWidth(0); | 
 |  |  |       dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |       dw_category.SetColHeaderHeight(0); | 
 |  |  |       dw_category.SetRowSelectorWidth(0); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnInsertRow() | 
 |  |  |    { | 
 |  |  |       int row = dw_list.GetRow(); | 
 |  |  |       if (row<0 || row>dw_list.GetRowCount()) return 0; | 
 |  |  |       dw_list.InsertRow(row); | 
 |  |  |       OnSetValue(row); | 
 |  |  |       dw_list.SetRow(row); | 
 |  |  |       dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent"); | 
 |  |  |       dw_maint.SetColHeaderHeight(0); | 
 |  |  |       dw_maint.SetRowSelectorWidth(0); | 
 |  |  |       dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |       dw_category.SetColHeaderHeight(0); | 
 |  |  |       dw_category.SetRowSelectorWidth(0); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int OnChangeRowNo(int row) | 
 |  |  |    { | 
 |  |  |       xdwtable dw = new xdwtable; | 
 |  |  |       dw.setNativePointer(dw_maint.FindDwTable(L"Item", 0)); | 
 |  |  |       int i; | 
 |  |  |       for (i = row; i <= dw.GetRowCount(); i++) | 
 |  |  |          dw.SetItemString(i, L"SeqNo", xstring(i)); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int OnDeleteRow() | 
 |  |  |    { | 
 |  |  |       int row = dw_list.GetRow(); | 
 |  |  |       if (row<0 || row>dw_list.GetRowCount()) return 0; | 
 |  |  |       dw_list.DeleteRow(row); | 
 |  |  |       dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent"); | 
 |  |  |       dw_maint.SetColHeaderHeight(0); | 
 |  |  |       dw_maint.SetRowSelectorWidth(0); | 
 |  |  |       dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |       dw_category.SetColHeaderHeight(0); | 
 |  |  |       dw_category.SetRowSelectorWidth(0); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int RemoveChild(xml x, xstring nodename)//根据名称删除节点 | 
 |  |  |    { | 
 |  |  |       KXMLDOMElement e; | 
 |  |  |       auto list = x.selectNodes(L"//Item[@update.delete='1']"); | 
 |  |  |       if (list) | 
 |  |  |       { | 
 |  |  |          int nlen = list.length(); | 
 |  |  |          int i; | 
 |  |  |          for (i = 0; i < nlen; i++) | 
 |  |  |          { | 
 |  |  |             e = list.item(i); | 
 |  |  |             //trace(e.xml); | 
 |  |  |             e.parentNode().removeChild(e); | 
 |  |  |             //trace(e.xml);				 | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int setMaint_removeChild() | 
 |  |  |    { | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  |       dw_maint.DwUpdateAllTo(x); | 
 |  |  |       int row = dw_list.GetRow(); | 
 |  |  |       //trace(x.xml()); | 
 |  |  |       RemoveChild(x, L"Item"); | 
 |  |  |       RemoveAttribute(x, L"TemplateContent"); | 
 |  |  |       RemoveAttribute(x, L"Item"); | 
 |  |  |       RemoveAttribute(x, L"ItemName"); | 
 |  |  |       RemoveAttribute(x, L"Remark"); | 
 |  |  |       RemoveAttribute(x, L"SeqNo"); | 
 |  |  |       //trace(x.xml());				 | 
 |  |  |       dw_list.SetItemString(row, L"TemplateContent", x.xml()); | 
 |  |  |       dw_list.Redraw(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int setItemCategory_removeChild() | 
 |  |  |    { | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  |       dw_category.DwUpdateAllTo(x); | 
 |  |  |       int row = dw_list.GetRow(); | 
 |  |  |       RemoveChild(x, L"Item"); | 
 |  |  |       //trace(row); | 
 |  |  |       dw_list.SetItemString(row, L"Category", x.xml()); | 
 |  |  |       dw_list.Redraw(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int del(xdwtable dw_1) | 
 |  |  |    { | 
 |  |  |       xdwtable dw = new xdwtable; | 
 |  |  |       dw.setNativePointer(dw_1.GetCurTable()); | 
 |  |  |       int row = dw.GetRow(); | 
 |  |  |       if (row < 1 || row > dw.GetRowCount()) return -1; | 
 |  |  |       dw.DeleteRow(row); | 
 |  |  |       //trace(dw.GetDwName()); | 
 |  |  |       if (dw_1.GetDwName() == L"TemplateContent") | 
 |  |  |       { | 
 |  |  |          OnChangeRowNo(row); | 
 |  |  |          if (dw.GetRowCount() == 1 && dw.GetItemString(1, L"ItemName") == L"") | 
 |  |  |          { | 
 |  |  |             dw_list.SetItemString(rowno, L"TemplateContent", L""); | 
 |  |  |             dw_list.Redraw(); | 
 |  |  |             dw_maint.Redraw();	 | 
 |  |  |             dw_category.Redraw();					 | 
 |  |  |             return 1; | 
 |  |  |          }				 | 
 |  |  |          int OnSetValue( int row){ | 
 |  |  |             dw_list.SetItemString(row,"TemplateID",TApp::GetGuid()); | 
 |  |  |             return 1;				 | 
 |  |  |          } | 
 |  |  |          int RemoveAttribute(xml__ x,string nodename)//根据名称删除属性节点 | 
 |  |  |          {	 | 
 |  |  |             msxml::IXMLDOMElement e; | 
 |  |  |             var list = x.GetXmlDoc().getElementsByTagName(""+nodename+"");	 | 
 |  |  |             if(list) | 
 |  |  |             {	 | 
 |  |  | 			 | 
 |  |  |                int nlen = list.length; | 
 |  |  |                int i; | 
 |  |  |                for(i=0;   i<nlen;   i++) | 
 |  |  |                { | 
 |  |  |                   e = list.item(i);			 | 
 |  |  |                   //trace(e.xml); | 
 |  |  |                   e.removeAttribute("update.new"); | 
 |  |  |                   e.removeAttribute("update.modify"); | 
 |  |  |                   e.removeAttribute("update.delete"); | 
 |  |  |                   e.removeAttribute("guid"); | 
 |  |  |                   e.removeAttribute("update.origin");  | 
 |  |  |                   e.removeAttribute("isnull");  				 | 
 |  |  |                   //trace(e.xml);				 | 
 |  |  |                } | 
 |  |  |             }						 | 
 |  |  |          }			 | 
 |  |  |          int setMaint() | 
 |  |  |          else | 
 |  |  |          { | 
 |  |  |             xml__ x=new xml__; | 
 |  |  |             x.setNativePointer(xml__::CreateInstance()); | 
 |  |  |             dw_maint.DwUpdateAllTo(x.GetXmlDoc());				 | 
 |  |  |             int row = dw_list.GetRow(); | 
 |  |  |             trace(x.GetXml()); | 
 |  |  |             RemoveAttribute(x,"TemplateContent"); | 
 |  |  |             RemoveAttribute(x,"Item"); | 
 |  |  |             RemoveAttribute(x,"ItemName");	 | 
 |  |  |             RemoveAttribute(x,"Remark"); | 
 |  |  |             RemoveAttribute(x,"SeqNo");				 | 
 |  |  |             //trace(x.GetXml());				 | 
 |  |  |             dw_list.SetItemString(row, "TemplateContent", x.GetXml()); | 
 |  |  |             dw_list.Redraw(); | 
 |  |  |             return 1; | 
 |  |  |             setMaint_removeChild(); | 
 |  |  |          } | 
 |  |  |          int setItemCategory() | 
 |  |  |          { | 
 |  |  |             xml__ x=new xml__; | 
 |  |  |             x.setNativePointer(xml__::CreateInstance()); | 
 |  |  |             dw_category.DwUpdateAllTo(x.GetXmlDoc());				 | 
 |  |  |             int row = dw_list.GetRow(); | 
 |  |  |             trace(row); | 
 |  |  |             dw_list.SetItemString(row, "Category", x.GetXml()); | 
 |  |  |             return 1; | 
 |  |  |          }				 | 
 |  |  |          int OnAddRow() | 
 |  |  |          { | 
 |  |  |             int row = dw_list.InsertRow(0); | 
 |  |  |             int rows = dw_list.GetRowCount(); | 
 |  |  |             OnSetValue(rows);				 | 
 |  |  |             dw_list.SetRow(dw_list.GetRowCount());				 | 
 |  |  |             trace(row.toString()); | 
 |  |  |             dw_maint.openUrl("其他设置.vface/template/other/TemplateContent"); | 
 |  |  |             dw_maint.SetColHeaderHeight(0); | 
 |  |  |             dw_maint.SetRowSelectorWidth(0); | 
 |  |  |             dw_category.openUrl("其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |             dw_category.SetColHeaderHeight(0); | 
 |  |  |             dw_category.SetRowSelectorWidth(0);				 | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          int OnInsertRow() | 
 |  |  |          { | 
 |  |  |             int row=dw_list.GetRow(); | 
 |  |  |             if(row<0 || row>dw_list.GetRowCount()) return 0;				 | 
 |  |  |             dw_list.InsertRow(row); | 
 |  |  |             OnSetValue(row);				 | 
 |  |  |             dw_list.SetRow(row); | 
 |  |  |             dw_maint.openUrl("其他设置.vface/template/other/TemplateContent"); | 
 |  |  |             dw_maint.SetColHeaderHeight(0); | 
 |  |  |             dw_maint.SetRowSelectorWidth(0); | 
 |  |  |             dw_category.openUrl("其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |             dw_category.SetColHeaderHeight(0); | 
 |  |  |             dw_category.SetRowSelectorWidth(0);				 | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |          int OnChangeRowNo(int row) | 
 |  |  |          { | 
 |  |  |             xdwtable__ dw = new xdwtable__; | 
 |  |  |             dw.setNativePointer(dw_maint.FindDwTable("Item",0));				 | 
 |  |  |             int i; | 
 |  |  |             for (i=row; i<=dw.GetRowCount(); i++) | 
 |  |  |                dw.SetItemString(i, "SeqNo", i.toString()); | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |          int OnDeleteRow() | 
 |  |  |          {			 | 
 |  |  |             int row = dw_list.GetRow(); | 
 |  |  |             if(row<0 || row>dw_list.GetRowCount()) return 0;			 | 
 |  |  |             dw_list.DeleteRow(row); | 
 |  |  |             dw_maint.openUrl("其他设置.vface/template/other/TemplateContent"); | 
 |  |  |             dw_maint.SetColHeaderHeight(0); | 
 |  |  |             dw_maint.SetRowSelectorWidth(0); | 
 |  |  |             dw_category.openUrl("其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |             dw_category.SetColHeaderHeight(0); | 
 |  |  |             dw_category.SetRowSelectorWidth(0);					 | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |          int RemoveChild(xml__ x,string nodename)//根据名称删除节点 | 
 |  |  |          {	 | 
 |  |  |             msxml::IXMLDOMElement e; | 
 |  |  |             var list = x.GetXmlDoc().SelectNodes("//Item[@update.delete='1']"); | 
 |  |  |             if(list) | 
 |  |  |             {	 | 
 |  |  |                int nlen = list.length; | 
 |  |  |                int i; | 
 |  |  |                for(i=0;   i<nlen;   i++) | 
 |  |  |                { | 
 |  |  |                   e = list.item(i);			 | 
 |  |  |                   //trace(e.xml); | 
 |  |  |                   e.parentNode.removeChild(e);		 | 
 |  |  |                   //trace(e.xml);				 | 
 |  |  |                } | 
 |  |  |             }						 | 
 |  |  |          }			 | 
 |  |  |          int setMaint_removeChild() | 
 |  |  |          { | 
 |  |  |             xml__ x=new xml__; | 
 |  |  |             x.setNativePointer(xml__::CreateInstance()); | 
 |  |  |             dw_maint.DwUpdateAllTo(x.GetXmlDoc());				 | 
 |  |  |             int row = dw_list.GetRow(); | 
 |  |  |             //trace(x.GetXml()); | 
 |  |  |             RemoveChild(x,"Item"); | 
 |  |  |             RemoveAttribute(x,"TemplateContent"); | 
 |  |  |             RemoveAttribute(x,"Item"); | 
 |  |  |             RemoveAttribute(x,"ItemName");	 | 
 |  |  |             RemoveAttribute(x,"Remark"); | 
 |  |  |             RemoveAttribute(x,"SeqNo");				 | 
 |  |  |             //trace(x.GetXml());				 | 
 |  |  |             dw_list.SetItemString(row, "TemplateContent", x.GetXml()); | 
 |  |  |             dw_list.Redraw(); | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |          int setItemCategory_removeChild() | 
 |  |  |          { | 
 |  |  |             xml__ x=new xml__; | 
 |  |  |             x.setNativePointer(xml__::CreateInstance()); | 
 |  |  |             dw_category.DwUpdateAllTo(x.GetXmlDoc());				 | 
 |  |  |             int row = dw_list.GetRow(); | 
 |  |  |             RemoveChild(x,"Item");						 | 
 |  |  |             trace(row); | 
 |  |  |             dw_list.SetItemString(row, "Category", x.GetXml()); | 
 |  |  |             dw_list.Redraw();				 | 
 |  |  |             return 1; | 
 |  |  |          }							 | 
 |  |  |          int del(xdwtable__ dw_1) | 
 |  |  |          { | 
 |  |  |             xdwtable__ dw = new xdwtable__; | 
 |  |  |             dw.setNativePointer(dw_1.GetCurTable()); | 
 |  |  |             int row = dw.GetRow(); | 
 |  |  |             if(row < 1 || row > dw.GetRowCount()) return -1; | 
 |  |  |             dw.DeleteRow(row); | 
 |  |  |             //trace(dw.GetDwName()); | 
 |  |  |             if(dw_1.GetDwName()=="TemplateContent") | 
 |  |  |             {	 | 
 |  |  |                OnChangeRowNo(row); | 
 |  |  |                if(dw.GetRowCount()==1 && dw.GetItemString(1,"ItemName")=="") | 
 |  |  |                { | 
 |  |  |                   dw_list.SetItemString(rowno, "TemplateContent", ""); | 
 |  |  |                   dw_list.Redraw(); | 
 |  |  |                } | 
 |  |  |                else | 
 |  |  |                {	 | 
 |  |  |                   setMaint_removeChild();							 | 
 |  |  |                }	 | 
 |  |  | 				 | 
 |  |  |             } | 
 |  |  |             if(dw_1.GetDwName()=="Categorys") | 
 |  |  |             {	 | 
 |  |  |                trace(dw.GetRowCount()); | 
 |  |  |                if(dw.GetRowCount()==1 && dw.GetItemString(1,"CategoryID")=="") | 
 |  |  |                { | 
 |  |  |                   dw_list.SetItemString(rowno, "Category", ""); | 
 |  |  |                   dw_list.Redraw(); | 
 |  |  |                } | 
 |  |  |                else | 
 |  |  |                {	 | 
 |  |  |                   setItemCategory_removeChild();							 | 
 |  |  |                }	 | 
 |  |  | 				 | 
 |  |  |             }					 | 
 |  |  | 	 | 
 |  |  |             return 1; | 
 |  |  |          }			 | 
 |  |  |          int SKUItem() | 
 |  |  |          {				 | 
 |  |  |             xaserverarg__ arg=new xaserverarg__; | 
 |  |  |             arg.setNativePointer(arg.CreateInstance());	 | 
 |  |  |             arg.AddArg("dw_maint",dw_maint.__nativept.toString());				 | 
 |  |  |             openUrl("其他设置.vface/xpage/SKUItem/select",arg); | 
 |  |  |             return 1;				 | 
 |  |  |          } | 
 |  |  |          int SKUItemcategory() | 
 |  |  |          {				 | 
 |  |  |             xaserverarg__ arg=new xaserverarg__; | 
 |  |  |             arg.setNativePointer(arg.CreateInstance());	 | 
 |  |  |             arg.AddArg("dw_category",dw_category.__nativept.toString());				 | 
 |  |  |             openUrl("其他设置.vface/xpage/SKUItemcategory/select",arg); | 
 |  |  |             return 1;				 | 
 |  |  |          } | 
 |  |  |          int SKUItemModify() | 
 |  |  |          {						 | 
 |  |  |             openUrl("其他设置.vface/xpage/SKUItem/list"); | 
 |  |  |             return 1;				 | 
 |  |  |          }			 | 
 |  |  |          //命令发布函数 | 
 |  |  |          int OnCmdDispatch(string comdid) | 
 |  |  |          { | 
 |  |  |             if (comdid =="save")  OnSave(); | 
 |  |  |             else if (comdid =="AddRow") OnAddRow(); | 
 |  |  |             else if (comdid =="InsertRow") OnInsertRow(); | 
 |  |  |             else if (comdid =="DeleteRow") OnDeleteRow(); | 
 |  |  |             else if (comdid =="SKUItem") SKUItem(); | 
 |  |  |             else if (comdid =="SKUItemcategory") SKUItemcategory();				 | 
 |  |  |             else if(comdid == "del_1") del(dw_maint); | 
 |  |  |             else if(comdid == "del_2") del(dw_category); | 
 |  |  |             else if(comdid == "SKUItemModify") SKUItemModify();				 | 
 |  |  |             return 0; | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          //命令处理事件 | 
 |  |  |          int OnXCommand(ref TXCommandEvent evt,int p) | 
 |  |  |          { | 
 |  |  |             return OnCmdDispatch(evt.pStrID); | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          int OnMaintChanged(ref TNotifyEvent evt,int p) | 
 |  |  |          {	 | 
 |  |  |             //trace("hello"); | 
 |  |  |             setMaint(); | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          int OnCategoryChanged(ref TNotifyEvent evt,int p) | 
 |  |  |          { | 
 |  |  |             setItemCategory();			 | 
 |  |  |             return 1; | 
 |  |  |          }			 | 
 |  |  | 			 | 
 |  |  |          int OnAttachEvent() | 
 |  |  |          { | 
 |  |  |             //绑定工具条点击事件 | 
 |  |  |             AttachEvent("WM_XCOMMAND",OnXCommand); | 
 |  |  |             //获取焦点事件,用于重置工具条 | 
 |  |  |             AttachEvent("WM_SETFOCUS",OnSetFocus); | 
 |  |  |             AttachEvent("dw_maint","DWV_ITEMCHANGED",OnMaintChanged); | 
 |  |  |             AttachEvent("dw_category","DWV_ITEMCHANGED",OnCategoryChanged); | 
 |  |  |             AttachEvent("dw_list","DWV_ROWFOCUSCHANGED",OnRowChanged);					 | 
 |  |  |  | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |          int OnInitial() | 
 |  |  |       } | 
 |  |  |       if (dw_1.GetDwName() == L"Categorys") | 
 |  |  |       { | 
 |  |  |          //trace(dw.GetRowCount()); | 
 |  |  |          if (dw.GetRowCount() == 1 && dw.GetItemString(1, L"CategoryID") == L"") | 
 |  |  |          { | 
 |  |  |             SetAgent(); | 
 |  |  |             OnAttachEvent();				 | 
 |  |  |             return 1; | 
 |  |  |          }			 | 
 |  |  |          int onload() | 
 |  |  |          {	 | 
 |  |  |             dw_list =  new xdwgrid__; | 
 |  |  |             dw_list.setNativePointer(this.GetControl("dw_list"));						 | 
 |  |  |             dw_list.openUrl("其他设置.vface/template/other/SKUTemplate");	 | 
 |  |  | 				 | 
 |  |  |             dw_maint = new xdwtable__; | 
 |  |  |             dw_maint.setNativePointer(GetControl("dw_maint")); | 
 |  |  |             dw_maint.openUrl("其他设置.vface/template/other/TemplateContent"); | 
 |  |  |             dw_maint.SetColHeaderHeight(0); | 
 |  |  |             dw_maint.SetRowSelectorWidth(0); | 
 |  |  | 				 | 
 |  |  |             dw_category = new xdwtable__; | 
 |  |  |             dw_category.setNativePointer(GetControl("dw_category")); | 
 |  |  |             dw_category.openUrl("其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |             dw_category.SetColHeaderHeight(0); | 
 |  |  |             dw_category.SetRowSelectorWidth(0); | 
 |  |  |             dw_category.SetReadOnly(true);						 | 
 |  |  |             OnInitial(); | 
 |  |  |             OnReTrieve(); | 
 |  |  |             xdwtable__ dw = new xdwtable__; | 
 |  |  |             dw.setNativePointer(dw_category.FindDwTable("Item",0));						 | 
 |  |  |             trace(dw.GetRowCount()); | 
 |  |  |             return 1; | 
 |  |  |             dw_list.SetItemString(rowno, L"Category", L""); | 
 |  |  |             dw_list.Redraw(); | 
 |  |  |          } | 
 |  |  |       ] | 
 |  |  |    ] | 
 |  |  | ] | 
 |  |  |          else | 
 |  |  |          { | 
 |  |  |             setItemCategory_removeChild(); | 
 |  |  |          } | 
 |  |  |  | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int SKUItem() | 
 |  |  |    { | 
 |  |  |       xaserverarg arg; | 
 |  |  |       arg.SetParam(L"dw_maint", &dw_maint); | 
 |  |  |       openUrl(L"其他设置.vface/xpage/SKUItem/select", arg); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int SKUItemcategory() | 
 |  |  |    { | 
 |  |  |       xaserverarg arg; | 
 |  |  |  | 
 |  |  |       arg.SetParam(L"dw_category", &dw_category); | 
 |  |  |       openUrl(L"其他设置.vface/xpage/SKUItemcategory/select", arg); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int SKUItemModify() | 
 |  |  |    { | 
 |  |  |       openUrl(L"其他设置.vface/xpage/SKUItem/list"); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    //命令发布函数 | 
 |  |  |    int OnCmdDispatch(xstring comdid) | 
 |  |  |    { | 
 |  |  |       if (comdid == L"save")  OnSave(); | 
 |  |  |       else if (comdid == L"AddRow") OnAddRow(); | 
 |  |  |       else if (comdid == L"InsertRow") OnInsertRow(); | 
 |  |  |       else if (comdid == L"DeleteRow") OnDeleteRow(); | 
 |  |  |       else if (comdid == L"SKUItem") SKUItem(); | 
 |  |  |       else if (comdid == L"SKUItemcategory") SKUItemcategory(); | 
 |  |  |       else if (comdid == L"del_1") del(dw_maint); | 
 |  |  |       else if (comdid == L"del_2") del(dw_category); | 
 |  |  |       else if (comdid == L"SKUItemModify") SKUItemModify(); | 
 |  |  |       return 0; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    //命令处理事件 | 
 |  |  |    int OnXCommand(TEvent* evt, LPARAM param) | 
 |  |  |    { | 
 |  |  |       return OnCmdDispatch(evt->xcommand.pStrID); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnMaintChanged(TEvent* evt, LPARAM p) | 
 |  |  |    { | 
 |  |  |       //trace(L"hello"); | 
 |  |  |       setMaint(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnCategoryChanged(TEvent* evt, LPARAM p) | 
 |  |  |    { | 
 |  |  |       setItemCategory(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnAttachEvent() | 
 |  |  |    { | 
 |  |  |       //绑定工具条点击事件 | 
 |  |  |       AttachEvent(L"WM_XCOMMAND", (FEvent)&SKUTemplate::OnXCommand); | 
 |  |  |       //获取焦点事件,用于重置工具条 | 
 |  |  |       AttachEvent(L"WM_SETFOCUS", (FEvent)&SKUTemplate::OnSetFocus); | 
 |  |  |       AttachEvent(L"dw_maint", L"DWV_ITEMCHANGED", (FEvent)&SKUTemplate::OnMaintChanged); | 
 |  |  |       AttachEvent(L"dw_category", L"DWV_ITEMCHANGED", (FEvent)&SKUTemplate::OnCategoryChanged); | 
 |  |  |       AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SKUTemplate::OnRowChanged); | 
 |  |  |  | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int OnInitial() | 
 |  |  |    { | 
 |  |  |       SetAgent(); | 
 |  |  |       OnAttachEvent(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int onload() | 
 |  |  |    { | 
 |  |  |       dw_list = new xdwgrid; | 
 |  |  |       dw_list.setNativePointer(GetControl(L"dw_list")); | 
 |  |  |       dw_list.openUrl(L"其他设置.vface/template/other/SKUTemplate"); | 
 |  |  |  | 
 |  |  |       dw_maint = new xdwtable; | 
 |  |  |       dw_maint.setNativePointer(GetControl(L"dw_maint")); | 
 |  |  |       dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent"); | 
 |  |  |       dw_maint.SetColHeaderHeight(0); | 
 |  |  |       dw_maint.SetRowSelectorWidth(0); | 
 |  |  |  | 
 |  |  |       dw_category = new xdwtable; | 
 |  |  |       dw_category.setNativePointer(GetControl(L"dw_category")); | 
 |  |  |       dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory"); | 
 |  |  |       dw_category.SetColHeaderHeight(0); | 
 |  |  |       dw_category.SetRowSelectorWidth(0); | 
 |  |  |       dw_category.SetReadOnly(true); | 
 |  |  |       OnInitial(); | 
 |  |  |       OnReTrieve(); | 
 |  |  |       xdwtable dw = new xdwtable; | 
 |  |  |       dw.setNativePointer(dw_category.FindDwTable(L"Item", 0)); | 
 |  |  |       //trace(dw.GetRowCount()); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  | }; |