LiFan
2024-07-16 6a4764ee747fff45d89ef48f98873d6409e4f85e
jrj/project/business/BasicCode/SKUTemplate.cpp
@@ -1,419 +1,427 @@
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", TApp::GetGuid());
      return 1;
   }
   int RemoveAttribute(xml x, xstring nodename)//根据名称删除属性节点
   {
      KXMLDOMElement e;
      var 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);
         }
      }
   }
   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;
      var 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);
         }
      }
   }
   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.AddArg(L"dw_maint", dw_maint.nativept.toString());
      openUrl(L"其他设置.vface/xpage/SKUItem/select", arg);
      return 1;
   }
   int SKUItemcategory()
   {
      xaserverarg arg;
      arg.AddArg(L"dw_category", dw_category.nativept.toString());
      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;
   }
};