LiFan
2024-07-17 f7c01240b27f0ad97feb9115b238d7a44b4b56b2
jrj/project/business/SystemSettings/Data.config.cpp
@@ -1,144 +1,147 @@
use "lang.vl"
use "win.vl"
use "treeview.vm"
use "dev:vm[xutil.vm]"
use "dev:vm[xdwtable.vm]"
use "dev:vm[xdwgrid.vm]"
use "dev:vm[combobox.vm]"
use "frame.vl"
use "file.vl"
use "dev:vm[xlayersheet.vm]"
use "publiccode.vl"
#include <wobject/xstring.hpp>
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
unit vbusiness.vpage
[
   DataConfig is extend frame;
   about DataConfig
   [
      field:
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
         
      method:
      [
         treeview__   dw_tree;
         xdwgrid__ dw_list;
         xdwgrid__ dw_role;
         combobox__ dw_ddlb;
         xlayersheet__ m_sheet;
using xml = KXMLDOMDocument;
class __declspec(dllexport) DataConfig : public xframe
{
         
         int alert(string str)
public:
   xtreeview   dw_tree;
   xdwgrid dw_list;
   xdwgrid dw_role;
   combobox dw_ddlb;
   xlayersheet m_sheet;
public:
   DataConfig(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
public:
   static DataConfig* CreateInstance(void* implPtr, void* hWnd)
   {
      DataConfig* pWin = new DataConfig(implPtr, (HWND)hWnd);
      return pWin;
   }
   int alert(xstring str)
         {
            TApp::alert(this,str,3);
            return 0;
         }
         int createTree(msxml::IXMLDOMElement e, int parentItem)
   int createTree(KXMLDOMElement e, HTREEITEM parentItem)
         {   
            if(treeview__::GetChildItem(dw_tree.GetId(), parentItem) > 0) return 0;
      if (dw_tree.GetChildItem(parentItem) > 0) return 0;
            var list=e.selectNodes("item");
      var list = e.selectNodes(L"item");
            int i=0,s=list.length;
            msxml::IXMLDOMElement xitem;
      KXMLDOMElement xitem;
            for (i=0;i<s;i++)
            {
               xitem= list.item(s - i - 1);
               string Name=xitem.selectSingleNode("name").text;
               string image = xitem.selectSingleNode("image").text;
               int curItem=treeview__::InsertItem(dw_tree.GetId(), parentItem,0,Name,xitem,image.toInt());
               string child=xitem.selectSingleNode("child").text;
               if (child != "0")
                  treeview__::SetItemChild1(dw_tree.GetId(), curItem,1);
         xstring Name = xitem.selectSingleNode(L"name").text();
         xstring image = xitem.selectSingleNode(L"image").text();
         HTREEITEM curItem = dw_tree.InsertItem(parentItem, 0, Name, xitem, image.toInt());
         xstring child = xitem.selectSingleNode(L"child").text();
         if (child != L"0")
            dw_tree.SetItemChild1(curItem, 1);
            }
            return 1;
         }
               
         int OnTreeExpanding(ref TNotifyEvent evt,int p)
   int OnTreeExpanding(TEvent* evt, LPARAM p)
         {
            ref NMTREEVIEW nmtv = evt.pnmh;
            int sitem = nmtv.itemNew.hItem;
      NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
               
            int i = combobox__::GetCurSel(dw_ddlb.GetId());
            msxml::IXMLDOMElement e =    treeview__::GetItemData(dw_tree.GetId(), sitem);
            string id = e.selectSingleNode("id").text;
            string xid = e.selectSingleNode("tree").text;
            int hCursor = xutil__::SetCursorWait();
            xml__ x = new xml__;
            x.setNativePointer(xml__ ::CreateInstance());
            xaserverarg__ arg=new xaserverarg__;
      HTREEITEM sitem = nmtv.itemNew.hItem;
      int i = dw_ddlb.GetCurSel();
      KXMLDOMElement e = dw_tree.GetItemData(sitem);
      xstring id = e.selectSingleNode(L"id").text();
      xstring xid = e.selectSingleNode(L"tree").text();
      HCURSOR hCursor = xutil::SetCursorWait();
      xml x;
      xaserverarg arg;
            arg.setNativePointer(arg.CreateInstance());   
            arg.AddArg("pid",id);
            arg.AddArg("tree",xid);
            //if(xaserver__::ExecXQuery(GetServerUrl(),"[selectRoleInt.xq]",arg.GetString(),x)!=1)
            if(url::get("/sale/data/Role.config/pref/user/select",arg.GetString(),x)!=1)
      arg.AddArg(L"pid", id);
      arg.AddArg(L"tree", xid);
      //if(xaserver::ExecXQuery(GetServerUrl(),L"[selectRoleInt.xq]",arg.GetString(),x)!=1)
      if (xurl::get(L"/sale/data/Role.config/pref/user/select", arg.GetString(), x) != 1)
            {
               trace("错误返回="+x.GetXml());
         trace(L"错误返回=L" + (xstring)x.xml());
               return -1;   
            }
            msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
      KXMLDOMElement ele = x.documentElement();
            createTree(ele, sitem);
            xutil__::RestoreCursor(hCursor);
      xutil::RestoreCursor(hCursor);
            return 1;
         }
                     
         int OnRetrieve(string id)
   int OnRetrieve(xstring id)
         {
            int hIcon= xutil__::SetCursorWait();
            xml__ x = new xml__;
            x.setNativePointer(xml__ ::CreateInstance());
            xaserverarg__ arg=new xaserverarg__;
      HCURSOR hIcon = xutil::SetCursorWait();
      xml x;
      xaserverarg arg;
            arg.setNativePointer(arg.CreateInstance());   
            arg.AddArg("id",id);
      arg.AddArg(L"id", id);
            trace(id);
            arg.AddArg("flag","-1");
            //if(xaserver__::ExecXQuery(GetServerUrl(),"[selectRoleInt.xq]",arg.GetString(),x)!=1)
            if(url::get("/sale/data/Role.config/pref/maint/data",arg.GetString(),x)!=1)
      arg.AddArg(L"flag", L"-1");
      //if(xaserver::ExecXQuery(GetServerUrl(),L"[selectRoleInt.xq]",arg.GetString(),x)!=1)
      if (xurl::get(L"/sale/data/Role.config/pref/maint/data", arg.GetString(), x) != 1)
            {
               trace("错误返回1="+x.GetXml());
         trace(L"错误返回1=L" + (xstring)x.xml());
               return -1;
            }
            if(x.GetXml() == "")
               x.LoadXml("<root><items/><roles/></root>");
      if (x.xml() == L"")
         x.loadXML(L"<root><items/><roles/></root>");
            
            xml__ x1 = new xml__;
            x1.setNativePointer(xml__ ::CreateInstance());
            if(x.GetXmlDoc().selectSingleNode("root/items"))
      xml x1;
      if (x.selectSingleNode(L"root/items"))
            {
               dw_list.Retrieve(x.GetXmlDoc().selectSingleNode("root/items"));
         dw_list.Retrieve(x.selectSingleNode(L"root/items"));
               dw_list.SetReadOnly(true);
               dw_list.Redraw();
            }
            else
            {
               x1.LoadXml("<items/>");
         x1.loadXML(L"<items/>");
               dw_list.Retrieve(x1);
               dw_list.SetReadOnly(true);
               dw_list.Redraw();               
            }
            if(x.GetXmlDoc().selectSingleNode("root/roles"))
      if (x.selectSingleNode(L"root/roles"))
            {
               dw_role.Retrieve(x.GetXmlDoc().selectSingleNode("root/roles"));
         dw_role.Retrieve(x.selectSingleNode(L"root/roles"));
               dw_role.SetReadOnly(true);
               dw_role.Redraw();      
            }            
            else
            {
               x1.LoadXml("<roles/>");
         x1.loadXML(L"<roles/>");
               dw_role.Retrieve(x1);
               dw_role.SetReadOnly(true);
               dw_role.Redraw();               
            }
            xutil__::RestoreCursor(hIcon);
      xutil::RestoreCursor(hIcon);
            return 1;
         }
         int OnTreeSelecded( ref TNotifyEvent evt,int p)
   int OnTreeSelecded(TEvent* evt, LPARAM p)
         {
            ref NMTREEVIEW nmtv = evt.pnmh;
            int hItem = nmtv.itemNew.hItem;
            int wid = dw_tree.GetId();
            msxml::IXMLDOMElement ele =treeview__::GetItemData(wid,hItem);
      NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
            
            string id = ele.SelectSingleNode("id").text;
      HTREEITEM hItem = nmtv.itemNew.hItem;
      //int wid = dw_tree.GetId();
      KXMLDOMElement ele = dw_tree.GetItemData(hItem);
      xstring id = ele.selectSingleNode(L"id").text();
            OnRetrieve(id);
            
            return 1;   
@@ -146,43 +149,43 @@
            
         int OnSelect()
         {
            int nIndex = combobox__::GetCurSel(dw_ddlb.GetId());
      int nIndex = dw_ddlb.GetCurSel();
            combobox__ dw_ddlbdata =  new combobox__;
            dw_ddlbdata.setNativePointer(this.GetControl("dw_ddlbdata"));
            int h = combobox__::FindString(dw_ddlbdata.GetId(), nIndex.toString());
      combobox dw_ddlbdata = new combobox;
      dw_ddlbdata.setNativePointer(GetControl(L"dw_ddlbdata"));
      int h = combobox::FindString(dw_ddlbdata.GetId(), xstring(nIndex));
            param p;
            xnode__ bnode;
            xnode__ anode = new xnode__;
            anode.setNativePointer(GetAgentNode("tree"));
      xnode bnode;
      xnode anode = new xnode;
      anode.setNativePointer(GetAgentNode(L"tree"));
            if(h < 0)
            {
               string str = "<vbox><xtree name='dw_tree"+nIndex.toString()+"' imagelist='0'/></vbox>";
               bnode = new xnode__;
         xstring str = L"<vbox><xtree name='dw_tree" + xstring(nIndex) + L"' imagelist='0'/></vbox>";
         bnode = new xnode;
               bnode.setNativePointer(SetAgentNodeContent(anode,str));
            
               p = combobox__::GetItemData(dw_ddlb.GetId(), nIndex);
               msxml::IXMLDOMElement ele = p;
         p = combobox::GetItemData(dw_ddlb.GetId(), nIndex);
         KXMLDOMElement ele = p;
               
               dw_tree =  new treeview__;
               dw_tree.setNativePointer(this.GetControl("dw_tree"+nIndex.toString()));
         dw_tree = new treeview;
         dw_tree.setNativePointer(GetControl(L"dw_tree" + xstring(nIndex)));
            
               createTree(ele, 0);
               AttachEvent("dw_tree"+nIndex.toString(), "TVN_ITEMEXPANDING",OnTreeExpanding);
               AttachEvent("dw_tree"+nIndex.toString(), "TVN_SELCHANGED",OnTreeSelecded);
         AttachEvent(L"dw_tree" + xstring(nIndex), L"TVN_ITEMEXPANDING", (FEvent)&DataConfig::OnTreeExpanding);
         AttachEvent(L"dw_tree" + xstring(nIndex), L"TVN_SELCHANGED", (FEvent)&DataConfig::OnTreeSelecded);
            
               int sk = combobox__::AddItem(dw_ddlbdata.GetId(), nIndex.toString());
         int sk = combobox::AddItem(dw_ddlbdata.GetId(), xstring(nIndex));
               p = bnode;
               combobox__::SetItemData(dw_ddlbdata.GetId(), sk, p);
         combobox::SetItemData(dw_ddlbdata.GetId(), sk, p);
            }
            else
            {
               p = combobox__::GetItemData(dw_ddlbdata.GetId(), h);
         p = combobox::GetItemData(dw_ddlbdata.GetId(), h);
               bnode = p;
               SetAgentNodeContent(anode,bnode);
            
               dw_tree =  new treeview__;
               dw_tree.setNativePointer(this.GetControl("dw_tree"+nIndex.toString()));
         dw_tree = new treeview;
         dw_tree.setNativePointer(GetControl(L"dw_tree" + xstring(nIndex)));
            }
            
            return 1;
@@ -190,65 +193,65 @@
         
         int OnSave()
         {
            int m = treeview__::GetSelectedItem(dw_tree.GetId());
      HTREEITEM m = dw_tree.GetSelectedItem();
            if(m == 0) return 0;
            
            int wid = dw_tree.GetId();
            int hItem=treeview__::GetSelectedItem(wid);
            msxml::IXMLDOMElement ele =treeview__::GetItemData(wid,hItem);
            string id = ele.SelectSingleNode("id").text;
            string tpy = ele.SelectSingleNode("type").text;
      //int wid = dw_tree.GetId();
      HTREEITEM hItem = dw_tree.GetSelectedItem();
      KXMLDOMElement ele = dw_tree.GetItemData(hItem);
      xstring id = ele.selectSingleNode(L"id").text();
      xstring tpy = ele.selectSingleNode(L"type").text();
            
            xml__ x = new xml__;
            x.setNativePointer(xml__ ::CreateInstance());
            dw_list.DwUpdateAllToEx(x.GetXmlDoc());
            msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
            e.SetAttribute("id", id);
            e.SetAttribute("type", tpy);
      xml x;
            
            xml__ x1 = new xml__;
            x1.setNativePointer(xml__ ::CreateInstance());
            dw_role.DwUpdateAllToEx(x1.GetXmlDoc());
            msxml::IXMLDOMElement e1 = x1.GetXmlDoc().documentElement;
            e.AppendChild(e1);
      dw_list.DwUpdateAllToEx(x);
      KXMLDOMElement e = x.documentElement();
      e.setAttribute(L"id", id);
      e.setAttribute(L"type", tpy);
   
            xaserverarg__ arg=new xaserverarg__;
            arg.setNativePointer(arg.CreateInstance());
            arg.AddArg("content", e.xml);
            arg.AddArg("dbmap", "Data.config.dbmap");
            //if(xaserver__::ExecXAction(GetServerUrl(),"[onSave.xa]",arg.GetString(),x)!=1)
            if(url::get("/sale/data/Role.config/pref/save",arg.GetString(),x)!=1)
            //if(url::get("/workflow/action/datarole.resource/bill.update",arg.GetString(),x)!=1)
      xml x1;
      dw_role.DwUpdateAllToEx(x1);
      KXMLDOMElement e1 = x1.documentElement();
      e.appendChild(e1);
      xaserverarg arg;
      arg.AddArg(L"content", e.xml());
      arg.AddArg(L"dbmap", L"Data.config.dbmap");
      //if(xaserver::ExecXAction(GetServerUrl(),L"[onSave.xa]",arg.GetString(),x)!=1)
      if (xurl::get(L"/sale/data/Role.config/pref/save", arg.GetString(), x) != 1)
         //if(xurl::get(L"/workflow/action/datarole.resource/bill.update",arg.GetString(),x)!=1)
            {
               trace("error:"+x.GetXml());
               alert("保存出错!");
         trace(L"error:" + (xstring)x.xml());
         alert(L"保存出错!");
               return 0;
            }
            if(x.GetXmlDoc().selectSingleNode("error"))
      if (x.selectSingleNode(L"error"))
            {
               alert("保存出错2!");
         alert(L"保存出错2!");
               return 0;
            }
            dw_list.ResetUpdateStatus();
            dw_role.ResetUpdateStatus();
            alert("保存成功!");
      alert(L"保存成功!");
            
            return 1;
         }
         
         int OnSelectDdlb(ref TNotifyEvent evt,int p)
   int OnSelectDdlb(TEvent* evt, LPARAM p)
         {
            xml__ x = new xml__;
            x.setNativePointer(xml__ ::CreateInstance());
            dw_list.DwUpdateAllToEx(x.GetXmlDoc());
            msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
      xml x;
      dw_list.DwUpdateAllToEx(x);
      KXMLDOMElement e = x.documentElement();
            if(e)
            {
               var list = e.SelectNodes("//*[@update.new='1' or @update.modify='1' or @update.delete='1']");
         var list = e.selectNodes(L"//*[@update.new='1' or @update.modify='1' or @update.delete='1']");
               int s = list.length;
               if(s>0)
               {
                  int ret = win__::MessageBox(this.GetHWND(), "当前修改记录未保存,是否保存?","提示",4);
            int ret = MessageBox(GetHWND(), L"当前修改记录未保存,是否保存?", L"提示", 4);
                  if(ret == 6)
                     OnSave();
               }
@@ -256,16 +259,16 @@
                  
            OnSelect();
            int m = treeview__::GetSelectedItem(dw_tree.GetId());
            string id;
      HTREEITEM m = dw_tree.GetSelectedItem();
      xstring id;
            if(m == 0)
            {
               id = "";
         id = L"";
            }
            else
            {
               msxml::IXMLDOMElement ele =treeview__::GetItemData(dw_tree.GetId(),m);
               id = ele.SelectSingleNode("id").text;
         KXMLDOMElement ele = dw_tree.GetItemData(m);
         id = ele.selectSingleNode(L"id").text();
            }
            OnRetrieve(id);
@@ -274,107 +277,107 @@
         
         int createTreeRoot()
         {
            xml__ x = new xml__;
            x.setNativePointer(xml__ ::CreateInstance());
            xaserverarg__ arg=new xaserverarg__;
            arg.setNativePointer(arg.CreateInstance());
            arg.AddArg("pid","");
            arg.AddArg("tree","0");
            //if(xaserver__::ExecXQuery(GetServerUrl(),"[selectRoleInt.xq]",arg.GetString(),x)!=1)
            if(url::get("/sale/data/Role.config/pref/user/select",arg.GetString(),x)!=1)
      xml x;
      xaserverarg arg;
      arg.AddArg(L"pid", L"");
      arg.AddArg(L"tree", L"0");
      //if(xaserver::ExecXQuery(GetServerUrl(),L"[selectRoleInt.xq]",arg.GetString(),x)!=1)
      if (xurl::get(L"/sale/data/Role.config/pref/user/select", arg.GetString(), x) != 1)
            {
               trace("错误返回="+x.GetXml());
         trace(L"错误返回=L" + (xstring)x.xml());
               return -1;   
            }
            msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
            var list = e.SelectNodes("*");
      KXMLDOMElement e = x.documentElement();
      var list = e.selectNodes(L"*");
            int i;
            int len = list.length;
            msxml::IXMLDOMElement ele;
      KXMLDOMElement ele;
            for(i=0; i<len; i++)
            {
               ele= list.item(i);
               string name = ele.selectSingleNode("@tree").text;
               int sk = combobox__::AddItem(dw_ddlb.GetId(), name);
         xstring name = ele.selectSingleNode(L"@tree").text();
         int sk = combobox::AddItem(dw_ddlb.GetId(), name);
               param p = ele;
               combobox__::SetItemData(dw_ddlb.GetId(), sk, p);
         combobox::SetItemData(dw_ddlb.GetId(), sk, p);
            }
            if(len > 0)
            {
               combobox__::SetCurSel(dw_ddlb.GetId(), 0);
         combobox::SetCurSel(dw_ddlb.GetId(), 0);
               OnSelect();
            }
            OnRetrieve("");
      OnRetrieve(L"");
            return 1;
         }
         
         int OnSetFocus(ref TEvent evt,int p)
   int OnSetFocus(TEvent* evt, LPARAM p)
         {
            SetAgent("data");
      SetAgent(L"data");
            return 1;
         }
            
         string GetPath()
   xstring GetPath()
         {
            int h = treeview__::GetSelectedItem(dw_tree.GetId());
      HTREEITEM h = dw_tree.GetSelectedItem();
            if(h == 0) return 0;
            
            int tv = dw_tree.GetId();
            string str = treeview__::GetItemLabel(tv, h);
            int k = treeview__::GetParentItem(tv, h);
      //int tv = dw_tree.GetId();
      xstring str = dw_tree.GetItemLabel(h);
      HTREEITEM k = dw_tree.GetParentItem(h);
            while(k > 0)
            {
               string tmp = treeview__::GetItemLabel(tv, k);
               str = tmp+"\\" + str;
               k = treeview__::GetParentItem(tv, k);
         xstring tmp = dw_tree.GetItemLabel(k);
         str = tmp + L"\\" + str;
         k = dw_tree.GetParentItem(k);
            }
            return str;
         }
            
         int OnAddRole()
         {
            int m = treeview__::GetSelectedItem(dw_tree.GetId());
      HTREEITEM m = dw_tree.GetSelectedItem();
            if(m == 0) return -1;
            msxml::IXMLDOMElement ele =treeview__::GetItemData(dw_tree.GetId(),m);
            string tpy=""+ele.selectSingleNode("type").text;
            xaserverarg__ arg=new xaserverarg__;
      KXMLDOMElement ele = dw_tree.GetItemData(m);
      xstring tpy = L"" + (xstring)ele.selectSingleNode(L"type").text();
      xaserverarg arg;
            arg.setNativePointer(arg.CreateInstance());      
            arg.AddArg("dataUrl","/sale/data/Role.config/pref/model/select");
            openUrl("/sale/view/Role.config/xpage/role/select/user", arg);
            string str = arg.GetArgString("item");
            if(str == "") return -1;
            xml__ x = new xml__;
            x.setNativePointer(xml__ ::CreateInstance());
            x.LoadXml(str);
            var list=x.GetXmlDoc().selectNodes("items/item");
      arg.AddArg(L"dataUrl", L"/sale/data/Role.config/pref/model/select");
      openUrl(L"/sale/view/Role.config/xpage/role/select/user", arg);
      xstring str = arg.GetArgString(L"item");
      if (str == L"") return -1;
      xml x;
      x.loadXML(str);
      var list = x.selectNodes(L"items/item");
            int i=0,s=list.length;
            msxml::IXMLDOMElement xitem;
      KXMLDOMElement xitem;
            int row = dw_role.GetRowCount() + 1;
            string treepath = GetPath();
      xstring treepath = GetPath();
            for (i=0;i<s;i++)
            {
               xitem= list.item(i);
               string id = ""+xitem.selectSingleNode("@id").text;
               string name=""+xitem.selectSingleNode("@name").text;
               //string tpy=""+xitem.selectSingleNode("@type").text;
         xstring id = L"" + (xstring)xitem.selectSingleNode(L"@id").text();
         xstring name = L"" + (xstring)xitem.selectSingleNode(L"@name").text();
         //xstring tpy=L""+xitem.selectSingleNode(L"@type").text();
               dw_role.InsertRow(0);
               dw_role.SetItemString(row + i, "id", id);
               dw_role.SetItemString(row + i, "name", ""+treepath);
               dw_role.SetItemDisplayString(row + i, "name", name);
               dw_role.SetItemString(row + i, "type", tpy);
         dw_role.SetItemString(row + i, L"id", id);
         dw_role.SetItemString(row + i, L"name", L"" + treepath);
         dw_role.SetItemDisplayString(row + i, L"name", name);
         dw_role.SetItemString(row + i, L"type", tpy);
            }
            return 1;
         }
         
         int OnAddRow()
         {
            int m = treeview__::GetSelectedItem(dw_tree.GetId());
      HTREEITEM m = dw_tree.GetSelectedItem();
            if(m == 0) return 0;
            
            int k = m_sheet.GetSheetIndex();
            if(k == 0)
               //openUrl("/sale/view/role.config/xpage/data/select/resource", dw_list);
               OpenWindow("dev:xpage[Resource.select.data.config.vx]", dw_list);
         //openUrl(L"/sale/view/role.config/xpage/data/select/resource", dw_list);
         OpenWindow(L"dev:xpage[Resource.select.data.config.vx]", dw_list);
            else
               OnAddRole();
               
@@ -385,19 +388,19 @@
         {
            int k = m_sheet.GetSheetIndex();
            int row;
            string hr_type;
            msxml::IXMLDOMElement e;
      xstring hr_type;
      KXMLDOMElement e;
            if(k == 0)
            {
               row = dw_list.GetRow();
               if(row<1 || row > dw_list.GetRowCount()) return -1;
               e = dw_list.GetRowElement(row);
               if(e.selectSingleNode("fromparent"))
         if (e.selectSingleNode(L"fromparent"))
               {
                  hr_type = e.selectSingleNode("fromparent").text;
                  if(hr_type != "")
            hr_type = e.selectSingleNode(L"fromparent").text();
            if (hr_type != L"")
                  {
                     alert("继承的权限无权删除!");
               alert(L"继承的权限无权删除!");
                     return 0;
                  }
               }
@@ -408,12 +411,12 @@
               row = dw_role.GetRow();
               if(row<1 || row > dw_role.GetRowCount()) return -1;
               e = dw_role.GetRowElement(row);
               if(e.selectSingleNode("fromparent"))
         if (e.selectSingleNode(L"fromparent"))
               {
                  hr_type = e.selectSingleNode("fromparent").text;
                  if(hr_type != "")
            hr_type = e.selectSingleNode(L"fromparent").text();
            if (hr_type != L"")
                  {
                     alert("继承的权限无权删除!");
               alert(L"继承的权限无权删除!");
                     return 0;
                  }
               }
@@ -423,48 +426,48 @@
            return 1;
         }
                  
         int OnSetCopy(xdwgrid__ dw, msxml::IXMLDOMElement e, string name)
   int OnSetCopy(xdwgrid dw, KXMLDOMElement e, xstring name)
         {
            xml__ x = new xml__;
            x.setNativePointer(xml__ ::CreateInstance());
            msxml::IXMLDOMElement ele;
      xml x;
      KXMLDOMElement ele;
            bool f = false;
                  
            int count = dw.GetRowCount();
            if(count == 0)
            {
               x.LoadXml("<" + name + "s/>");
               ele = x.GetXmlDoc().documentElement;
         x.loadXML(L"<" + name + L"s/>");
         ele = x.documentElement();
            }
            else
            {
               msxml::IXMLDOMElement e1  = dw.GetRowElement(1);
         KXMLDOMElement e1 = dw.GetRowElement(1);
               ele = e1.parentNode;
            }
            var li = e.SelectNodes(name);
      var li = e.selectNodes(name);
            int i;
            int len = li.length;
            string treepath = GetPath();
      xstring treepath = GetPath();
            for(i=0; i<len; i++)
            {
               msxml::IXMLDOMElement ele1= li.item(i);
               if(ele1.selectSingleNode("fromparent"))
         KXMLDOMElement ele1 = li.item(i);
         if (ele1.selectSingleNode(L"fromparent"))
               {
                  string str = ele1.selectSingleNode("fromparent").text;
                  if(str != "") continue;
            xstring str = ele1.selectSingleNode(L"fromparent").text();
            if (str != L"") continue;
               }
               xml__ x1 = new xml__;
               x1.setNativePointer(xml__::CreateInstance());
               x1.LoadXml(ele1.xml);
               msxml::IXMLDOMElement ele2 = x1.GetXmlDoc().documentElement;
               ele2.setAttribute("update.new","1");
               ele2.setAttribute("update.modify","1");
               ele2.setAttribute("guid",publiccode::GetGuid());
               if(ele2.selectSingleNode("name"))
                  ele2.selectSingleNode("name").text = treepath;
               //ele1.selectSingleNode("@guid").text = publiccode::GetGuid();
               //ele1.selectSingleNode("@update.new").text = "1";
               //ele1.selectSingleNode("@update.modify").text = "1";
         xml x1;
         x1.loadXML(ele1.xml());
         KXMLDOMElement ele2 = x1.documentElement();
         ele2.setAttribute(L"update.new", L"1");
         ele2.setAttribute(L"update.modify", L"1");
         ele2.setAttribute(L"guid", publiccode::GetGuid());
         if (ele2.selectSingleNode(L"name"))
            ele2.selectSingleNode(L"name").text() = treepath;
         //ele1.selectSingleNode(L"@guid").text() = publiccode::GetGuid();
         //ele1.selectSingleNode(L"@update.new").text() = L"1";
         //ele1.selectSingleNode(L"@update.modify").text() = L"1";
               ele.appendChild(ele2);
            }
            dw.Retrieve(ele);
@@ -476,96 +479,93 @@
                  
         int OnCopy()
         {
            xaserverarg__ arg=new xaserverarg__;
            arg.setNativePointer(arg.CreateInstance());
            int p = arg.__nativept;
            OpenWindow("dev:xpage[Data.config.copy.vx]", p);
            string id = arg.GetArgString("id");
            string f = arg.GetArgString("flag");
            if(id == "") return 1;
      xaserverarg arg;
            
            xml__ x = new xml__;
            x.setNativePointer(xml__ ::CreateInstance());
            if(url::get("/sale/data/Role.config/pref/maint/data",arg.GetString(),x)!=1)
      OpenWindow(L"dev:xpage[Data.config.copy.vx]", arg);
      xstring id = arg.GetArgString(L"id");
      xstring f = arg.GetArgString(L"flag");
      if (id == L"") return 1;
      xml x;
      if (xurl::get(L"/sale/data/Role.config/pref/maint/data", arg.GetString(), x) != 1)
            {
               trace("错误返回="+x.GetXml());
         trace(L"错误返回=L" + (xstring)x.xml());
               return -1;
            }
            if(x.GetXml() == "")
               x.LoadXml("<root><items/><roles/></root>");
      if (x.xml() == L"")
         x.loadXML(L"<root><items/><roles/></root>");
            
            msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
      KXMLDOMElement e = x.documentElement();
            
            if(f == "0" || f == "1")
      if (f == L"0" || f == L"1")
            {
               msxml::IXMLDOMElement ele1 = e.selectSingleNode("items");
               OnSetCopy(dw_list, ele1, "item");
         KXMLDOMElement ele1 = e.selectSingleNode(L"items");
         OnSetCopy(dw_list, ele1, L"item");
            }
            
            if(f == "0" || f == "2")
      if (f == L"0" || f == L"2")
            {
               msxml::IXMLDOMElement ele2 = e.selectSingleNode("roles")
               OnSetCopy(dw_role, ele2, "role");
         KXMLDOMElement ele2 = e.selectSingleNode(L"roles");
         OnSetCopy(dw_role, ele2, L"role");
            }
            
            return 1;
         }
         
         int OnCmdDispatch(string comdid)
   int OnCmdDispatch(xstring comdid)
         {
            if(comdid == "Config")
               openUrl("/sale/view/role.config/xpage/data/resource/config");
            if(comdid == "RightQuery")
               openUrl("/sale/view/role.config/xpage/data/modulerightquery");
            else if(comdid == "New")
      if (comdid == L"Config")
         openUrl(L"/sale/view/role.config/xpage/data/resource/config");
      if (comdid == L"RightQuery")
         openUrl(L"/sale/view/role.config/xpage/data/modulerightquery");
      else if (comdid == L"New")
               OnAddRow();
            else if(comdid == "Del")
      else if (comdid == L"Del")
               OnDelRow();
            else if(comdid == "Save")
      else if (comdid == L"Save")
               OnSave();
            else if(comdid == "Copy")
      else if (comdid == L"Copy")
               OnCopy();
            else if(comdid == "xmProdDivi")
               openUrl("/sale/view/RoleAccount3/xpage/data/proddivi");
      else if (comdid == L"xmProdDivi")
         openUrl(L"/sale/view/RoleAccount3/xpage/data/proddivi");
            return 0;
         }
         int OnXCommand(ref TXCommandEvent evt,int p)
   int OnXCommand(TEvent* evt, LPARAM param)
         {
            return OnCmdDispatch(evt.pStrID);
      return OnCmdDispatch(evt->xcommand.pStrID);
         }
         int onload()
         {
            SetAgent("data");
      SetAgent(L"data");
            
            dw_list = new xdwgrid__;
            dw_list.setNativePointer(GetControl("dw_list"));
            dw_list.openUrl("/sale/view/Role.config/template/data/config/resourceOrg");
      dw_list = new xdwgrid;
      dw_list.setNativePointer(GetControl(L"dw_list"));
      dw_list.openUrl(L"/sale/view/Role.config/template/data/config/resourceOrg");
            dw_list.SetReadOnly(false);
            
            dw_role = new xdwgrid__;
            dw_role.setNativePointer(GetControl("dw_role"));
            //dw_role.SetDataObject(GetServerUrl(), "dev:sheet[leftFrame.tpl/role]");
            //dw_role.openUrl(m_vface+"/template/role/config/role");
            dw_role.openUrl("/sale/view/Role.config/template/role/config/role");
      dw_role = new xdwgrid;
      dw_role.setNativePointer(GetControl(L"dw_role"));
      //dw_role.SetDataObject(GetServerUrl(), L"dev:sheet[leftFrame.tpl/role]");
      //dw_role.openUrl(m_vface+L"/template/role/config/role");
      dw_role.openUrl(L"/sale/view/Role.config/template/role/config/role");
            dw_role.SetReadOnly(false);
            
            dw_ddlb =  new combobox__;
            dw_ddlb.setNativePointer(this.GetControl("dw_ddlb"));
      dw_ddlb = new combobox;
      dw_ddlb.setNativePointer(GetControl(L"dw_ddlb"));
            
            m_sheet =  new xlayersheet__;
            m_sheet.setNativePointer(this.GetControl("m_sheet"));
      m_sheet = new xlayersheet;
      m_sheet.setNativePointer(GetControl(L"m_sheet"));
                        
            AttachEvent("WM_XCOMMAND",OnXCommand);
            AttachEvent("WM_SETFOCUS",OnSetFocus);
            AttachEvent("dw_ddlb","CBN_SELCHANGE",OnSelectDdlb);
      AttachEvent(L"WM_XCOMMAND", (FEvent)&DataConfig::OnXCommand);
      AttachEvent(L"WM_SETFOCUS", (FEvent)&DataConfig::OnSetFocus);
      AttachEvent(L"dw_ddlb", L"CBN_SELCHANGE", (FEvent)&DataConfig::OnSelectDdlb);
            
            createTreeRoot();
            
            return 1;
         }
      ]
   ]
]
};