From f7c01240b27f0ad97feb9115b238d7a44b4b56b2 Mon Sep 17 00:00:00 2001
From: LiFan <2308045698@qq.com>
Date: 星期三, 17 七月 2024 17:06:12 +0800
Subject: [PATCH] update

---
 jrj/project/business/SystemSettings/BindComputer.cpp |  213 +-
 jrj/project/business/SystemSettings/AddUser.cpp      |  429 +++---
 jrj/project/business/SystemSettings/Data.config.cpp  | 1108 +++++++++---------
 jrj/project/business/SystemSettings/AddUserGroup.cpp |  333 ++---
 jrj/project/business/SystemSettings/UserImport.cpp   |  634 +++++-----
 jrj/project/business/SystemSettings/SysUser.cpp      |  647 +++++-----
 6 files changed, 1,686 insertions(+), 1,678 deletions(-)

diff --git a/jrj/project/business/SystemSettings/AddUser.cpp b/jrj/project/business/SystemSettings/AddUser.cpp
index 3d9c416..4f10945 100644
--- a/jrj/project/business/SystemSettings/AddUser.cpp
+++ b/jrj/project/business/SystemSettings/AddUser.cpp
@@ -3,227 +3,226 @@
 use "dev:vm[xdwgrid.vm]"
 use "dev:vm[xdwtable.vm]"
 use "pref.vl"
-use "dev:vm[xml.vm]"
-use "dev:vm[xaserverarg.vm]"
-use "dev:vm[xaserver.vm]"
-use "dev:vm[xutil.vm]"
-use "dev:code[pa.tpp]"
-use "dev:vm[control.vm]"
-#include "dev:xpage[SysUser.vx]"
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-unit vbusiness.xpage tpp
-[
-	class pa
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+//use "dev:xpage[SysUser.vx]"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) AddUser : public xwin
+{
+
+public:
+
+	xstring note;
+	int hitem;
+	int row;
+	int wid;
+	xtreeview tv;
+	xdwgrid dw;
+	xwin pwin;
+	pa p;
+public:
+	AddUser(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static AddUser* CreateInstance(void* implPtr, void* hWnd)
 	{
-		string note;
-		int hitem;
-		int row;
-		int wid;
-		treeview__ tv;
-		xdwgrid__ dw;
-		win__ pwin;
+		AddUser* pWin = new AddUser(implPtr, (HWND)hWnd);
+		return pWin;
 	}
-]
 
-unit vbusiness.xpage
-[
-	AddUser is extend win__;
-	about AddUser
-	[
-		control:
-		
-		method:
-		[
-			pa p;
-			
-			int SetAgent()
-			{
-				return 1;
-			}
-			//焦点激活处理函数
-			int OnSetFocus(ref TEvent evt,int param)
-			{
-				int SetAgent();
+	int SetAgent()
+	{
+		return 1;
+	}
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM param)
+	{
+		int SetAgent();
 
-				//重置工具条
-				return 1;
-			}
-			int AppendItem(xml__ x,msxml::IXMLDOMElement r,string item){
-				var e = x.GetXmlDoc().createElement(item);
-				//xcontrol xc = GetControl(item);
-				control__ xc = new control__;
-				xc.setNativePointer(this.GetControl(item));
-				e.text = xc.GetText();
-				r.appendChild(e);		
-				return 1;
-			}
-			
-			int OnSave()
-			{
-				control__ xc = new control__;
-				/*xc=GetControl("EmployeeNo");
-				if (xc.GetText()=="")
-				{
-					alert("用户代码不能为空!");
-					return 0;
-				}*/
-				xc=GetControl("UserName");
-				if (xc.GetText()=="")
-				{
-					alert("用户名称不能为空!");
-					return 0;
-				}		
-				xml__ x = new xml__;
-				x.setNativePointer(x.CreateInstance());
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());
-				x.LoadXml("<SysUser/>");
-				var r = x.GetXmlDoc().documentElement;
-				string guid;
-				string guid1;
-				if (p.note=="修改")
-				{
-					msxml::IXMLDOMElement ele=xdwgrid__::GetRowElement(p.row);
-					guid = ele.selectSingleNode("UserID").text;
-					//guid=ele.getAttribute("guid");
-					//if (ele.selectSingleNode("empid"))
-					//	r.appendChild(ele.selectSingleNode("empid"));			
-				}
-				else
-					guid=win__::GetGuid();
-					//guid1=win32::GetGuid();
-				r.setAttribute("guid",guid);
-				//r.setAttribute("guid1",guid1);
-				//AppendItem(x,r,"EmployeeNo");
-				AppendItem(x,r,"UserName");
-				AppendItem(x,r,"PassWord");
-				AppendItem(x,r,"Status");
-				//trace(x.GetXml());
-				//return 1;
-				arg.AddArg("content",x.GetXml());
-				int ls_item = treeview__::GetSelectedItem(p.wid);
-				msxml::IXMLDOMElement e=treeview__::GetItemData(p.wid,ls_item);
-				string gpguid=e.selectSingleNode("@guid").text;
-				arg.AddArg("gpguid",gpguid);			
-				if (xaserver__::ExecXAction(GetServerUrl(),"[update.User.xa]",arg.GetString())==1)
-				{
-					alert("ok");
-					if (p.note=="修改")
-					{
-						xdwgrid__ dw = new xdwgrid__;
-						//dw.setNativePointer(p.dw_user);
-						int row = dw.GetNextSelectRow(0);
-						//dw.SetItemString(row,"UserName","");
-						msxml::IXMLDOMElement e;
-						e = x.GetXmlDoc().documentElement;
-						string ls_pass = e.selectSingleNode("PassWord").text;
-						string ls_status = e.selectSingleNode("Status").text;
-						dw.SetItemString(row,"PassWord",ls_pass);
-						dw.SetItemString(row,"Status",ls_status);
-						dw.Redraw();
-					}
-					else
-					{
-					//----------
-						//p.pwin.OnTreeSelChanged();
-					}
-				}
-				else
-				{
-					alert("保存出错!");
-					return 0;
-				}
-				return 1;		
-			}
-			
-			int ClearItem(string item)
-			{
-				control__ xc = new control__;
-				xc.setNativePointer(GetControl(item));
-				xc.SetText("");
-				return 1;
-			}
-			//命令发布函数
-			int OnCmdDispatch(string comdid)
-			{
-				if (comdid=="cb_cancel")
-					CloseWindow();
-				else if(comdid=="cb_ok")
-				{
-					int r=OnSave();
-					if (r==1)
-						CloseWindow();
-				}
-				else if(comdid=="cb_save")
-				{
-					OnSave();
-					p.note="新增";
-					win__::SetWindowText(GetHWND(),p.note+"用户");
-					ClearItem("userno");
-					ClearItem("username");
-					ClearItem("pwd");
-				}
-				return 0;
-			}
-			
-			//命令处理事件
-			int OnXCommand(ref TXCommandEvent evt,int param)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			
-			int OnAttachEvent()
-			{
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				//获取焦点事件,用于重置工具条
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-			}
-			
-			int OnInitial()
-			{
-				SetAgent();
+		//重置工具条
+		return 1;
+	}
+	int AppendItem(xml x, KXMLDOMElement r, xstring item) {
+		var e = x.createElement(item);
+		//xcontrol xc = GetControl(item);
+		control xc = new control;
+		xc.setNativePointer(GetControl(item));
+		e.text() = xc.GetText();
+		r.appendChild(e);
+		return 1;
+	}
 
-				OnAttachEvent();
-				
-				return 1;
-			}
-			
-			int SetItem(string value,string item){
-				control__ xc = new control__;
-				xc.setNativePointer(GetControl(item));
-				xc.SetText(value);	
-				return 1;
-			}	
-			int onload()
+	int OnSave()
+	{
+		control xc = new control;
+		/*xc=GetControl(L"EmployeeNo");
+		if (xc.GetText()==L"")
+		{
+			alert(L"用户代码不能为空!");
+			return 0;
+		}*/
+		xc = GetControl(L"UserName");
+		if (xc.GetText() == L"")
+		{
+			alert(L"用户名称不能为空!");
+			return 0;
+		}
+		xml x;
+
+		xaserverarg arg;
+
+		x.loadXML(L"<SysUser/>");
+		var r = x.documentElement();
+		xstring guid;
+		xstring guid1;
+		if (p.note == L"修改")
+		{
+			KXMLDOMElement ele = xdwgrid::GetRowElement(p.row);
+			guid = ele.selectSingleNode(L"UserID").text();
+			//guid=ele.getAttribute(L"guid");
+			//if (ele.selectSingleNode(L"empid"))
+			//	r.appendChild(ele.selectSingleNode(L"empid"));			
+		}
+		else
+			guid = GetGuid();
+		//guid1=win32::GetGuid();
+		r.setAttribute(L"guid", guid);
+		//r.setAttribute(L"guid1",guid1);
+		//AppendItem(x,r,L"EmployeeNo");
+		AppendItem(x, r, L"UserName");
+		AppendItem(x, r, L"PassWord");
+		AppendItem(x, r, L"Status");
+		//trace(x.xml());
+		//return 1;
+		arg.AddArg(L"content", x.xml());
+		int ls_item = treeview::GetSelectedItem(p.wid);
+		KXMLDOMElement e = treeview::GetItemData(p.wid, ls_item);
+		xstring gpguid = e.selectSingleNode(L"@guid").text();
+		arg.AddArg(L"gpguid", gpguid);
+		if (xaserver::ExecXAction(GetServerUrl(), L"[update.User.xa]", arg.GetString()) == 1)
+		{
+			alert(L"ok");
+			if (p.note == L"修改")
 			{
-				OnInitial();
-				p = new pa;
-				
-				if(this.GetParam())
-				{
-					p=GetParam();
-					win__::SetWindowText(GetHWND(),p.note+"用户");
-					if (p.note=="修改")
-					{
-						xdwgrid__ dw = new xdwgrid__;
-						dw.setNativePointer(p.dw);
-						msxml::IXMLDOMElement ele=dw.GetRowElement(p.row);
-						//if(ele.selectSingleNode("EmployeeNo"))
-							//SetItem(ele.selectSingleNode("EmployeeNo").text,"EmployeeNo");
-						if(ele.selectSingleNode("UserName"))
-							SetItem(ele.selectSingleNode("UserName").text,"UserName");
-						if(ele.selectSingleNode("PassWord"))
-							SetItem(ele.selectSingleNode("PassWord").text,"PassWord");
-						if(ele.selectSingleNode("Status"))
-							SetItem(ele.selectSingleNode("Status").text,"Status");
-					trace("Aa");
-					return 1;
-					}
-				}		
+				xdwgrid dw = new xdwgrid;
+				//dw.setNativePointer(p.dw_user);
+				int row = dw.GetNextSelectRow(0);
+				//dw.SetItemString(row,L"UserName",L"");
+				KXMLDOMElement e;
+				e = x.documentElement();
+				xstring ls_pass = e.selectSingleNode(L"PassWord").text();
+				xstring ls_status = e.selectSingleNode(L"Status").text();
+				dw.SetItemString(row, L"PassWord", ls_pass);
+				dw.SetItemString(row, L"Status", ls_status);
+				dw.Redraw();
+			}
+			else
+			{
+				//----------
+					//p.pwin.OnTreeSelChanged();
+			}
+		}
+		else
+		{
+			alert(L"保存出错!");
+			return 0;
+		}
+		return 1;
+	}
+
+	int ClearItem(xstring item)
+	{
+		control xc = new control;
+		xc.setNativePointer(GetControl(item));
+		xc.SetText(L"");
+		return 1;
+	}
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"cb_cancel")
+			CloseWindow();
+		else if (comdid == L"cb_ok")
+		{
+			int r = OnSave();
+			if (r == 1)
+				CloseWindow();
+		}
+		else if (comdid == L"cb_save")
+		{
+			OnSave();
+			p.note = L"新增";
+			SetWindowText(GetHWND(), p.note + L"用户");
+			ClearItem(L"userno");
+			ClearItem(L"username");
+			ClearItem(L"pwd");
+		}
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&AddUser::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&AddUser::OnSetFocus);
+		return 1;
+	}
+
+	int OnInitial()
+	{
+		SetAgent();
+
+		OnAttachEvent();
+
+		return 1;
+	}
+
+	int SetItem(xstring value, xstring item) {
+		control xc = new control;
+		xc.setNativePointer(GetControl(item));
+		xc.SetText(value);
+		return 1;
+	}
+	int onload()
+	{
+		SetArg();
+		OnInitial();
+		p = new pa;
+
+		if (GetWinParam())
+		{
+			p = GetArg();
+			SetWindowText(GetHWND(), p.note + L"用户");
+			if (p.note == L"修改")
+			{
+				xdwgrid dw = new xdwgrid;
+				dw.setNativePointer(p.dw);
+				KXMLDOMElement ele = dw.GetRowElement(p.row);
+				//if(ele.selectSingleNode(L"EmployeeNo"))
+					//SetItem(ele.selectSingleNode(L"EmployeeNo").text(),L"EmployeeNo");
+				if (ele.selectSingleNode(L"UserName"))
+					SetItem(ele.selectSingleNode(L"UserName").text(), L"UserName");
+				if (ele.selectSingleNode(L"PassWord"))
+					SetItem(ele.selectSingleNode(L"PassWord").text(), L"PassWord");
+				if (ele.selectSingleNode(L"Status"))
+					SetItem(ele.selectSingleNode(L"Status").text(), L"Status");
+				trace(L"Aa");
 				return 1;
 			}
-		]
-		
-	]
-]
\ No newline at end of file
+		}
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/AddUserGroup.cpp b/jrj/project/business/SystemSettings/AddUserGroup.cpp
index fc7a253..978f2fa 100644
--- a/jrj/project/business/SystemSettings/AddUserGroup.cpp
+++ b/jrj/project/business/SystemSettings/AddUserGroup.cpp
@@ -1,183 +1,172 @@
-use "win.vl"
-use "treeview.vm"
-use "dev:vm[xdwgrid.vm]"
-use "dev:vm[xdwtable.vm]"
-use "pref.vl"
-use "dev:vm[xml.vm]"
-use "dev:vm[xaserverarg.vm]"
-use "dev:vm[xaserver.vm]"
-use "dev:vm[xutil.vm]"
-use "dev:code[pa.tpp]"
-use "dev:vm[control.vm]"
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-unit vbusiness.xpage tpp
-[
-	class pa
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) AddUserGroup : public xwin
+{
+
+public:
+	xstring note;
+	int hitem;
+	int row;
+	int wid;
+	xtreeview tv;
+	xdwgrid dw;
+	xwin pwin;
+
+public:
+	AddUserGroup(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static AddUserGroup* CreateInstance(void* implPtr, void* hWnd)
 	{
-		string note;
-		int hitem;
-		int row;
-		int wid;
-		treeview__ tv;
-		xdwgrid__ dw;
-		win__ pwin;
+		AddUserGroup* pWin = new AddUserGroup(implPtr, (HWND)hWnd);
+		return pWin;
 	}
-]
-			
-unit vbusiness.xpage
-[
+	int SetAgent()
+	{
+		return 1;
+	}
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM param)
+	{
+		int SetAgent();
 
-	AddUserGroup is extend win__;
-	about AddUserGroup
-	[
-		control:
-		
-		method:
-		[
-			pa p;
-			
-			int SetAgent()
-			{
-				return 1;
-			}
-			//焦点激活处理函数
-			int OnSetFocus(ref TEvent evt,int p)
-			{
-				int SetAgent();
+		//重置工具条
+		return 1;
+	}
+	int AppendItem(xml x, KXMLDOMElement r, xstring item) {
+		var e = x.createElement(item);
+		control xc = new control;
+		xc.setNativePointer(GetControl(item));
+		e.text() = xc.GetText();
+		r.appendChild(e);
+		return 1;
+	}
+	int AppendAttrib(xml x, KXMLDOMElement r, xstring item) {
+		var e = x.createElement(item);
+		//xcontrol xc = GetControl(item);
+		control xc = new control;
+		xc.setNativePointer(GetControl(item));
+		e.text() = xc.GetText();
+		r.setAttribute(item, xc.GetText());
+		return 1;
+	}
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"cb_cancel")
+			CloseWindow();
+		else if (comdid == L"cb_ok")
+		{
+			int wid = p.wid;
+			xml x;
 
-				//重置工具条
-				return 1;
-			}
-			int AppendItem(xml__ x,msxml::IXMLDOMElement r,string item){
-				var e = x.GetXmlDoc().createElement(item);
-				control__ xc = new control__;
-				xc.setNativePointer(this.GetControl(item));
-				e.text = xc.GetText();
-				r.appendChild(e);		
-				return 1;
-			}	
-			int AppendAttrib(xml__ x,msxml::IXMLDOMElement r,string item){
-				var e = x.GetXmlDoc().createElement(item);
-				//xcontrol xc = GetControl(item);
-				control__ xc = new control__;
-				xc.setNativePointer(this.GetControl(item));
-				e.text = xc.GetText();
-				r.setAttribute(item,xc.GetText());
-				return 1;
-			}	
-			//命令发布函数
-			int OnCmdDispatch(string comdid)
+			xaserverarg arg;
+
+			x.loadXML(L"<row/>");
+			var r = x.documentElement();
+			xstring gpguid;
+			if (p.note == L"修改")
 			{
-				if (comdid=="cb_cancel")
-					CloseWindow();
-				else if(comdid=="cb_ok")
+				KXMLDOMElement ele = treeview::GetItemData(wid, p.hitem);
+				gpguid = ele.selectSingleNode(L"@JobID").text();
+			}
+			else
+				gpguid = GetGuid();
+			r.setAttribute(L"JobID", gpguid);
+			AppendAttrib(x, r, L"JobName");
+			AppendAttrib(x, r, L"JobType");
+			//AppendItem(x,r,L"JobName");
+			//AppendItem(x,r,L"JobType");
+			//trace(x.xml());
+			//return 1;
+			arg.AddArg(L"content", x.xml());
+			if (xaserver::ExecXAction(GetServerUrl(), L"[update.Usergroup.xa]", arg.GetString()) == 1)
+			{
+				control xc = new control;
+				xc.setNativePointer(GetControl(L"JobName"));
+				//p.tv.Redraw();
+				if (p.note == L"修改")
 				{
-					int wid = p.wid;
-					xml__ x = new xml__;
-					x.setNativePointer(x.CreateInstance());
-					xaserverarg__ arg = new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());
-					x.LoadXml("<row/>");
-					var r = x.GetXmlDoc().documentElement;
-					string gpguid;
-					if (p.note=="修改")
-					{
-						msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,p.hitem);
-						gpguid=ele.selectSingleNode("@JobID").text;
-					}
-					else
-						gpguid=win__::GetGuid();
-					r.setAttribute("JobID",gpguid);
-					AppendAttrib(x,r,"JobName");
-					AppendAttrib(x,r,"JobType");
-					//AppendItem(x,r,"JobName");
-					//AppendItem(x,r,"JobType");
-					//trace(x.GetXml());
-					//return 1;
-					arg.AddArg("content",x.GetXml());
-					if (xaserver__::ExecXAction(GetServerUrl(),"[update.Usergroup.xa]",arg.GetString())==1)
-					{
-						control__ xc = new control__;
-						xc.setNativePointer(this.GetControl("JobName"));
-						//p.tv.Redraw();
-						if (p.note=="修改")
-						{
-							treeview__::SetItemData(wid,p.hitem,r);
-							treeview__::SetItemLabel(wid,p.hitem,xc.GetText());
-						}
-						else
-						{
-							int root = treeview__::GetRootItem(wid);
-							treeview__::InsertChildItem(wid,root,xc.GetText(),r,15);
-						}
-						CloseWindow();
-					}
-					else
-					{
-						alert("保存出错!");
-					}
+					treeview::SetItemData(wid, p.hitem, r);
+					treeview::SetItemLabel(wid, p.hitem, xc.GetText());
 				}
-				return 0;
-			}
-			
-			//命令处理事件
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			
-			int OnAttachEvent()
-			{
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				//获取焦点事件,用于重置工具条
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-			}
-			
-			int OnInitial()
-			{
-				SetAgent();
-
-				OnAttachEvent();
-				
-				return 1;
-			}
-			
-			int SetItem(string value,string item){
-				control__ xc = new control__;
-				xc.setNativePointer(GetControl(item));
-				xc.SetText(value);	
-				return 1;
-			}	
-			
-			int onload()
-			{
-				OnInitial();
-				p = new pa;
-				
-				if(this.GetParam())
+				else
 				{
-					p=GetParam();
-					win__::SetWindowText(GetHWND(),p.note+"用户组");
-					if (p.note=="修改")
-					{
-						int wid = p.wid;
-						msxml::IXMLDOMElement ele=treeview__::GetItemData(wid,p.hitem);
-						//trace(ele.xml);
-						//SetItem(ele.selectSingleNode("gpno").text,"gpno");
-						//SetItem(ele.selectSingleNode("gpname").text,"gpname");
-						string ls_guid = ele.selectSingleNode("@JobID").text;
-						string ls_name = ele.selectSingleNode("@JobName").text;
-						string ls_type = ele.selectSingleNode("@JobType").text;
-						SetItem(ls_guid,"JobID");
-						SetItem(ls_name,"JobName");
-						SetItem(ls_type,"JobType");
-					}
+					int root = treeview::GetRootItem(wid);
+					treeview::InsertChildItem(wid, root, xc.GetText(), r, 15);
 				}
-				
-				return 1;
+				CloseWindow();
 			}
-		]
-		
-	]
-]
\ No newline at end of file
+			else
+			{
+				alert(L"保存出错!");
+			}
+		}
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&AddUserGroup::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&AddUserGroup::OnSetFocus);
+		return 1;
+	}
+
+	int OnInitial()
+	{
+		SetAgent();
+
+		OnAttachEvent();
+
+		return 1;
+	}
+
+	int SetItem(xstring value, xstring item) {
+		control xc = new control;
+		xc.setNativePointer(GetControl(item));
+		xc.SetText(value);
+		return 1;
+	}
+
+	int onload()
+	{
+		OnInitial();
+		p = new pa;
+
+		if (GetWinParam())
+		{
+			p = GetArg();
+			SetWindowText(GetHWND(), p.note + L"用户组");
+			if (p.note == L"修改")
+			{
+				int wid = p.wid;
+				KXMLDOMElement ele = treeview::GetItemData(wid, p.hitem);
+				//trace(ele.xml);
+				//SetItem(ele.selectSingleNode(L"gpno").text(),L"gpno");
+				//SetItem(ele.selectSingleNode(L"gpname").text(),L"gpname");
+				xstring ls_guid = ele.selectSingleNode(L"@JobID").text();
+				xstring ls_name = ele.selectSingleNode(L"@JobName").text();
+				xstring ls_type = ele.selectSingleNode(L"@JobType").text();
+				SetItem(ls_guid, L"JobID");
+				SetItem(ls_name, L"JobName");
+				SetItem(ls_type, L"JobType");
+			}
+		}
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/BindComputer.cpp b/jrj/project/business/SystemSettings/BindComputer.cpp
index 0af3e7f..73bc5aa 100644
--- a/jrj/project/business/SystemSettings/BindComputer.cpp
+++ b/jrj/project/business/SystemSettings/BindComputer.cpp
@@ -1,106 +1,115 @@
-use"lang.vl"
-use "win.vl"
-use "dev:vm[xdwgrid.vm]"
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-unit vbusiness.vpage
-[
-	BindComputerDlgNew is extend win__;
-	about BindComputerDlgNew
-	[
-		field:
-			
-		method:
-		[
-			xdwgrid__	dw_list;
-			int  OnRetrieve()
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) BindComputerDlgNew : public xwin
+{
 
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg = this.GetParam();	
-				if(arg.GetArgString("BindComputer"))
-				{	
-					string sbys= arg.GetArgString("BindComputer");
-					//alert(sbys);
-					x.LoadXml(sbys);
-					
-				}
-				else
-				{	
+public:
 
-					x.LoadXml("<args></args>");	
-				}	
+	xdwgrid	dw_list;
+public:
+	BindComputerDlgNew(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static BindComputerDlgNew* CreateInstance(void* implPtr, void* hWnd)
+	{
+		BindComputerDlgNew* pWin = new BindComputerDlgNew(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int  OnRetrieve()
+	{
+		xml x;
 
-				dw_list.Retrieve(x.GetXmlDoc().selectSingleNode("args"));		
-				dw_list.ResetUpdateStatus();
-				dw_list.Redraw();
-				return 1;
-			}
-			int OnAddRow(xdwgrid__ dw)
-			{
-				dw.InsertRow(0);
-				return 1;
-			}
-			
-			int OnDelRow(xdwgrid__ dw)
-			{
-				int row = dw.GetRow();
-				if(row<1 || row > dw.GetRowCount()) return -1;
-				dw.DeleteRow(row);			
-				return 1;
-			}				
-			//命令发布函数
-			int OnCmdDispatch(string comdid)
-			{
-				dw_list.AcceptText();
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());							
-				arg = win__::GetParam();
-				arg.AddArg("comdid",comdid);				
-				if (comdid=="ok")
-				{
-					xml__ x = new xml__;
-					x.setNativePointer(xml__ ::CreateInstance());
-					dw_list.DwUpdateAllTo(x.GetXmlDoc());
-					arg.AddArg("xml",x.GetXml());			
-					CloseWindow();
-				}
-				else if(comdid=="close")
-					CloseWindow();
-				else if(comdid == "add")
-					OnAddRow(dw_list);
-				else if(comdid == "del")
-					OnDelRow(dw_list);				
-				return 0;
-			}
-			
-			//命令处理事件
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			
-			int OnAttachEvent()
-			{
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-			}
-			int onload()
-			{
-				OnAttachEvent();
-			
-				dw_list = new xdwgrid__;
-				dw_list.setNativePointer(GetControl("dw_list"));
-				dw_list.SetDataObject(GetServerUrl(),"dev:sheet[SysUser.tpl/BindComputer]");
-				dw_list.SetReadOnly(true);
-				if(this.GetParam())
-				{				
-					OnRetrieve();
-				}
-				return 1;
-			}			
-		]
-	]
-]
\ No newline at end of file
+
+		xaserverarg arg;
+		
+		arg = GetArg();
+		if (arg.GetArgString(L"BindComputer"))
+		{
+			xstring sbys = arg.GetArgString(L"BindComputer");
+			//alert(sbys);
+			x.loadXML(sbys);
+
+		}
+		else
+		{
+
+			x.loadXML(L"<args></args>");
+		}
+
+		dw_list.Retrieve(x.selectSingleNode(L"args"));
+		dw_list.ResetUpdateStatus();
+		dw_list.Redraw();
+		return 1;
+	}
+	int OnAddRow(xdwgrid dw)
+	{
+		dw.InsertRow(0);
+		return 1;
+	}
+
+	int OnDelRow(xdwgrid dw)
+	{
+		int row = dw.GetRow();
+		if (row<1 || row > dw.GetRowCount()) return -1;
+		dw.DeleteRow(row);
+		return 1;
+	}
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		dw_list.AcceptText();
+		xaserverarg arg;
+		
+		arg = GetArg();
+		arg.AddArg(L"comdid", comdid);
+		if (comdid == L"ok")
+		{
+			xml x;
+
+			dw_list.DwUpdateAllTo(x);
+			arg.AddArg(L"xml", x.xml());
+			CloseWindow();
+		}
+		else if (comdid == L"close")
+			CloseWindow();
+		else if (comdid == L"add")
+			OnAddRow(dw_list);
+		else if (comdid == L"del")
+			OnDelRow(dw_list);
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&BindComputerDlgNew::OnXCommand);
+		return 1;
+	}
+	int onload()
+	{
+		SetArg();
+		OnAttachEvent();
+
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.SetDataObject(GetServerUrl(), L"dev:sheet[SysUser.tpl/BindComputer]");
+		dw_list.SetReadOnly(true);
+		if (GetWinParam())
+		{
+			OnRetrieve();
+		}
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Data.config.cpp b/jrj/project/business/SystemSettings/Data.config.cpp
index f5b5019..c3f0327 100644
--- a/jrj/project/business/SystemSettings/Data.config.cpp
+++ b/jrj/project/business/SystemSettings/Data.config.cpp
@@ -1,571 +1,571 @@
-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:
-			
-		method:
-		[
-			treeview__	dw_tree;
-			xdwgrid__ dw_list;
-			xdwgrid__ dw_role;
-			combobox__ dw_ddlb;
-			xlayersheet__ m_sheet;
-			
-			int alert(string str)
-			{
-				TApp::alert(this,str,3);
-				return 0;
-			}
-			int createTree(msxml::IXMLDOMElement e, int parentItem)
-			{	
-				if(treeview__::GetChildItem(dw_tree.GetId(), parentItem) > 0) return 0;
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-				var list=e.selectNodes("item");
-				int i=0,s=list.length;
-				msxml::IXMLDOMElement 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);
-				}
-				return 1;
-			}
-					
-			int OnTreeExpanding(ref TNotifyEvent evt,int p)
-			{
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int sitem = nmtv.itemNew.hItem;
-					
-				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__;
-				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)
-				{
-					trace("错误返回="+x.GetXml());
-					return -1;	
-				}
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) DataConfig : public xframe
+{
 
-				msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
-				createTree(ele, sitem);
-				xutil__::RestoreCursor(hCursor);
-				return 1;
-			}
-							
-			int OnRetrieve(string id)
-			{
-				int hIcon= xutil__::SetCursorWait();
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("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)
-				{
-					trace("错误返回1="+x.GetXml());
-					return -1;
-				}
+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(KXMLDOMElement e, HTREEITEM parentItem)
+	{
+		if (dw_tree.GetChildItem(parentItem) > 0) return 0;
 
-				if(x.GetXml() == "")
-					x.LoadXml("<root><items/><roles/></root>");
-				
-				xml__ x1 = new xml__;
-				x1.setNativePointer(xml__ ::CreateInstance());
-				if(x.GetXmlDoc().selectSingleNode("root/items"))
-				{
-					dw_list.Retrieve(x.GetXmlDoc().selectSingleNode("root/items"));
-					dw_list.SetReadOnly(true);
-					dw_list.Redraw();
-				}
-				else
-				{
-					x1.LoadXml("<items/>");
-					dw_list.Retrieve(x1);
-					dw_list.SetReadOnly(true);
-					dw_list.Redraw();					
-				}
-				if(x.GetXmlDoc().selectSingleNode("root/roles"))
-				{
-					dw_role.Retrieve(x.GetXmlDoc().selectSingleNode("root/roles"));
-					dw_role.SetReadOnly(true);
-					dw_role.Redraw();		
-				}				
-				else
-				{
-					x1.LoadXml("<roles/>");
-					dw_role.Retrieve(x1);
-					dw_role.SetReadOnly(true);
-					dw_role.Redraw();					
-				}
-				xutil__::RestoreCursor(hIcon);
-				return 1;
-			}
+		var list = e.selectNodes(L"item");
+		int i = 0, s = list.length;
+		KXMLDOMElement xitem;
+		for (i = 0; i < s; i++)
+		{
+			xitem = list.item(s - i - 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 OnTreeSelecded( ref TNotifyEvent evt,int p)
-			{
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int hItem = nmtv.itemNew.hItem;					
-				int wid = dw_tree.GetId();				
-				msxml::IXMLDOMElement ele =treeview__::GetItemData(wid,hItem);
-				
-				string id = ele.SelectSingleNode("id").text;
-				OnRetrieve(id);
-				
-				return 1;	
-			}
-				
-			int OnSelect()
-			{
-				int nIndex = combobox__::GetCurSel(dw_ddlb.GetId());
+	int OnTreeExpanding(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
 
-				combobox__ dw_ddlbdata =  new combobox__;
-				dw_ddlbdata.setNativePointer(this.GetControl("dw_ddlbdata"));
-				int h = combobox__::FindString(dw_ddlbdata.GetId(), nIndex.toString());
-				param p;
-				xnode__ bnode;
-				xnode__ anode = new xnode__;
-				anode.setNativePointer(GetAgentNode("tree"));
-				if(h < 0)
-				{
-					string str = "<vbox><xtree name='dw_tree"+nIndex.toString()+"' imagelist='0'/></vbox>";
-					bnode = new xnode__;
-					bnode.setNativePointer(SetAgentNodeContent(anode,str));
-				
-					p = combobox__::GetItemData(dw_ddlb.GetId(), nIndex);
-					msxml::IXMLDOMElement ele = p;
-					
-					dw_tree =  new treeview__;
-					dw_tree.setNativePointer(this.GetControl("dw_tree"+nIndex.toString()));
-				
-					createTree(ele, 0);
-					AttachEvent("dw_tree"+nIndex.toString(), "TVN_ITEMEXPANDING",OnTreeExpanding);
-					AttachEvent("dw_tree"+nIndex.toString(), "TVN_SELCHANGED",OnTreeSelecded);
-				
-					int sk = combobox__::AddItem(dw_ddlbdata.GetId(), nIndex.toString());
-					p = bnode;
-					combobox__::SetItemData(dw_ddlbdata.GetId(), sk, p);
-				}
-				else
-				{
-					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()));
-				}
-				
-				return 1;
-			}
-			
-			int OnSave()
-			{
-				int m = treeview__::GetSelectedItem(dw_tree.GetId());
-				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;
-				
-				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__ x1 = new xml__;
-				x1.setNativePointer(xml__ ::CreateInstance());
-				dw_role.DwUpdateAllToEx(x1.GetXmlDoc());
-				msxml::IXMLDOMElement e1 = x1.GetXmlDoc().documentElement;
-				e.AppendChild(e1);
-	
-				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)
-				{
-					trace("error:"+x.GetXml());
-					alert("保存出错!");
-					return 0;
-				}
-				if(x.GetXmlDoc().selectSingleNode("error"))
-				{
-					alert("保存出错2!");
-					return 0;
-				}
-				dw_list.ResetUpdateStatus();
-				dw_role.ResetUpdateStatus();
-				alert("保存成功!");
-				
-				return 1;
-			}
-			
-			int OnSelectDdlb(ref TNotifyEvent evt,int p)
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				dw_list.DwUpdateAllToEx(x.GetXmlDoc());
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				if(e)
-				{
-					var list = e.SelectNodes("//*[@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);
-						if(ret == 6)
-							OnSave();
-					}
-				}
-						
-				OnSelect();
+		HTREEITEM sitem = nmtv.itemNew.hItem;
 
-				int m = treeview__::GetSelectedItem(dw_tree.GetId());
-				string id;
-				if(m == 0)
-				{
-					id = "";
-				}
-				else
-				{
-					msxml::IXMLDOMElement ele =treeview__::GetItemData(dw_tree.GetId(),m);
-					id = ele.SelectSingleNode("id").text;
-				}
-				OnRetrieve(id);
+		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;
 
-				return 1;
-			}
-			
-			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)
-				{
-					trace("错误返回="+x.GetXml());
-					return -1;	
-				}
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				var list = e.SelectNodes("*");
-				int i;
-				int len = list.length;
-				msxml::IXMLDOMElement 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);
-					param p = ele;
-					combobox__::SetItemData(dw_ddlb.GetId(), sk, p);
-				}
-				if(len > 0)
-				{
-					combobox__::SetCurSel(dw_ddlb.GetId(), 0);
-					OnSelect();
-				}
-				OnRetrieve("");
-				return 1;
-			}
-			
-			int OnSetFocus(ref TEvent evt,int p)
-			{
-				SetAgent("data");
-				return 1;
-			}
-				
-			string GetPath()
-			{
-				int h = treeview__::GetSelectedItem(dw_tree.GetId());
-				if(h == 0) return 0;
-				
-				int tv = dw_tree.GetId();
-				string str = treeview__::GetItemLabel(tv, h);
-				int k = treeview__::GetParentItem(tv, h);
-				while(k > 0)
-				{
-					string tmp = treeview__::GetItemLabel(tv, k);
-					str = tmp+"\\" + str;
-					k = treeview__::GetParentItem(tv, k);
-				}
-				return str;
-			}
-				
-			int OnAddRole()
-			{
-				int m = treeview__::GetSelectedItem(dw_tree.GetId());
-				if(m == 0) return -1;
-				msxml::IXMLDOMElement ele =treeview__::GetItemData(dw_tree.GetId(),m);
-				string tpy=""+ele.selectSingleNode("type").text;
-				xaserverarg__ arg=new xaserverarg__;
-				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");
-				int i=0,s=list.length;
-				msxml::IXMLDOMElement xitem;
-				int row = dw_role.GetRowCount() + 1;
-				string 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;
-					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);
-				}
-				return 1;
-			}
-			
-			int OnAddRow()
-			{
-				int m = treeview__::GetSelectedItem(dw_tree.GetId());
-				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);
-				else
-					OnAddRole();
-					
-				return 1;
-			}
-			
-			int OnDelRow()
-			{
-				int k = m_sheet.GetSheetIndex();
-				int row;
-				string hr_type;
-				msxml::IXMLDOMElement 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"))
-					{
-						hr_type = e.selectSingleNode("fromparent").text;
-						if(hr_type != "")
-						{
-							alert("继承的权限无权删除!");
-							return 0;
-						}
-					}
-					dw_list.DeleteRow(row);				
-				}
-				else
-				{
-					row = dw_role.GetRow();
-					if(row<1 || row > dw_role.GetRowCount()) return -1;
-					e = dw_role.GetRowElement(row);
-					if(e.selectSingleNode("fromparent"))
-					{
-						hr_type = e.selectSingleNode("fromparent").text;
-						if(hr_type != "")
-						{
-							alert("继承的权限无权删除!");
-							return 0;
-						}
-					}
-					dw_role.DeleteRow(row);				
-				}
-				
-				return 1;
-			}
-						
-			int OnSetCopy(xdwgrid__ dw, msxml::IXMLDOMElement e, string name)
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				msxml::IXMLDOMElement ele;
-				bool f = false;
-						
-				int count = dw.GetRowCount();
-				if(count == 0)
-				{
-					x.LoadXml("<" + name + "s/>");
-					ele = x.GetXmlDoc().documentElement;
-				}
-				else
-				{
-					msxml::IXMLDOMElement e1  = dw.GetRowElement(1);
-					ele = e1.parentNode;
-				}
-				var li = e.SelectNodes(name);
-				int i;
-				int len = li.length;
-				string treepath = GetPath();
-				for(i=0; i<len; i++)
-				{
-					msxml::IXMLDOMElement ele1= li.item(i);
-					if(ele1.selectSingleNode("fromparent"))
-					{
-						string str = ele1.selectSingleNode("fromparent").text;
-						if(str != "") 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";
-					ele.appendChild(ele2);
-				}
-				dw.Retrieve(ele);
-				dw.SetReadOnly(true);
-				dw.Redraw();
+		xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		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(L"错误返回=L" + (xstring)x.xml());
+			return -1;
+		}
 
-				return 1;
-			}
-						
-			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;
-				
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				if(url::get("/sale/data/Role.config/pref/maint/data",arg.GetString(),x)!=1)
-				{
-					trace("错误返回="+x.GetXml());
-					return -1;
-				}
+		KXMLDOMElement ele = x.documentElement();
+		createTree(ele, sitem);
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
 
-				if(x.GetXml() == "")
-					x.LoadXml("<root><items/><roles/></root>");
-				
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				
-				if(f == "0" || f == "1") 
-				{
-					msxml::IXMLDOMElement ele1 = e.selectSingleNode("items");
-					OnSetCopy(dw_list, ele1, "item");
-				}
-				
-				if(f == "0" || f == "2") 
-				{
-					msxml::IXMLDOMElement ele2 = e.selectSingleNode("roles")
-					OnSetCopy(dw_role, ele2, "role");
-				}
-				
-				return 1;
-			}
-			
-			int OnCmdDispatch(string comdid)
+	int OnRetrieve(xstring id)
+	{
+		HCURSOR hIcon = xutil::SetCursorWait();
+		xml x;
+
+		xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"id", id);
+		trace(id);
+		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(L"错误返回1=L" + (xstring)x.xml());
+			return -1;
+		}
+
+		if (x.xml() == L"")
+			x.loadXML(L"<root><items/><roles/></root>");
+
+		xml x1;
+
+		if (x.selectSingleNode(L"root/items"))
+		{
+			dw_list.Retrieve(x.selectSingleNode(L"root/items"));
+			dw_list.SetReadOnly(true);
+			dw_list.Redraw();
+		}
+		else
+		{
+			x1.loadXML(L"<items/>");
+			dw_list.Retrieve(x1);
+			dw_list.SetReadOnly(true);
+			dw_list.Redraw();
+		}
+		if (x.selectSingleNode(L"root/roles"))
+		{
+			dw_role.Retrieve(x.selectSingleNode(L"root/roles"));
+			dw_role.SetReadOnly(true);
+			dw_role.Redraw();
+		}
+		else
+		{
+			x1.loadXML(L"<roles/>");
+			dw_role.Retrieve(x1);
+			dw_role.SetReadOnly(true);
+			dw_role.Redraw();
+		}
+		xutil::RestoreCursor(hIcon);
+		return 1;
+	}
+
+	int OnTreeSelecded(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+
+		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;
+	}
+
+	int OnSelect()
+	{
+		int nIndex = dw_ddlb.GetCurSel();
+
+		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(L"tree"));
+		if (h < 0)
+		{
+			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);
+			KXMLDOMElement ele = p;
+
+			dw_tree = new treeview;
+			dw_tree.setNativePointer(GetControl(L"dw_tree" + xstring(nIndex)));
+
+			createTree(ele, 0);
+			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(), xstring(nIndex));
+			p = bnode;
+			combobox::SetItemData(dw_ddlbdata.GetId(), sk, p);
+		}
+		else
+		{
+			p = combobox::GetItemData(dw_ddlbdata.GetId(), h);
+			bnode = p;
+			SetAgentNodeContent(anode, bnode);
+
+			dw_tree = new treeview;
+			dw_tree.setNativePointer(GetControl(L"dw_tree" + xstring(nIndex)));
+		}
+
+		return 1;
+	}
+
+	int OnSave()
+	{
+		HTREEITEM m = dw_tree.GetSelectedItem();
+		if (m == 0) return 0;
+
+		//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;
+
+		dw_list.DwUpdateAllToEx(x);
+		KXMLDOMElement e = x.documentElement();
+		e.setAttribute(L"id", id);
+		e.setAttribute(L"type", tpy);
+
+		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(L"error:" + (xstring)x.xml());
+			alert(L"保存出错!");
+			return 0;
+		}
+		if (x.selectSingleNode(L"error"))
+		{
+			alert(L"保存出错2!");
+			return 0;
+		}
+		dw_list.ResetUpdateStatus();
+		dw_role.ResetUpdateStatus();
+		alert(L"保存成功!");
+
+		return 1;
+	}
+
+	int OnSelectDdlb(TEvent* evt, LPARAM p)
+	{
+		xml x;
+
+		dw_list.DwUpdateAllToEx(x);
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			var list = e.selectNodes(L"//*[@update.new='1' or @update.modify='1' or @update.delete='1']");
+			int s = list.length;
+			if (s > 0)
 			{
-				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")
-					OnAddRow();
-				else if(comdid == "Del")
-					OnDelRow();
-				else if(comdid == "Save")
+				int ret = MessageBox(GetHWND(), L"当前修改记录未保存,是否保存?", L"提示", 4);
+				if (ret == 6)
 					OnSave();
-				else if(comdid == "Copy")
-					OnCopy();
-				else if(comdid == "xmProdDivi")
-					openUrl("/sale/view/RoleAccount3/xpage/data/proddivi");
-				return 0;
 			}
+		}
 
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
+		OnSelect();
 
-			int onload()
+		HTREEITEM m = dw_tree.GetSelectedItem();
+		xstring id;
+		if (m == 0)
+		{
+			id = L"";
+		}
+		else
+		{
+			KXMLDOMElement ele = dw_tree.GetItemData(m);
+			id = ele.selectSingleNode(L"id").text();
+		}
+		OnRetrieve(id);
+
+		return 1;
+	}
+
+	int createTreeRoot()
+	{
+		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(L"错误返回=L" + (xstring)x.xml());
+			return -1;
+		}
+		KXMLDOMElement e = x.documentElement();
+		var list = e.selectNodes(L"*");
+		int i;
+		int len = list.length;
+		KXMLDOMElement ele;
+		for (i = 0; i < len; i++)
+		{
+			ele = list.item(i);
+			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);
+		}
+		if (len > 0)
+		{
+			combobox::SetCurSel(dw_ddlb.GetId(), 0);
+			OnSelect();
+		}
+		OnRetrieve(L"");
+		return 1;
+	}
+
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent(L"data");
+		return 1;
+	}
+
+	xstring GetPath()
+	{
+		HTREEITEM h = dw_tree.GetSelectedItem();
+		if (h == 0) return 0;
+
+		//int tv = dw_tree.GetId();
+		xstring str = dw_tree.GetItemLabel(h);
+		HTREEITEM k = dw_tree.GetParentItem(h);
+		while (k > 0)
+		{
+			xstring tmp = dw_tree.GetItemLabel(k);
+			str = tmp + L"\\" + str;
+			k = dw_tree.GetParentItem(k);
+		}
+		return str;
+	}
+
+	int OnAddRole()
+	{
+		HTREEITEM m = dw_tree.GetSelectedItem();
+		if (m == 0) return -1;
+		KXMLDOMElement ele = dw_tree.GetItemData(m);
+		xstring tpy = L"" + (xstring)ele.selectSingleNode(L"type").text();
+		xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		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;
+		KXMLDOMElement xitem;
+		int row = dw_role.GetRowCount() + 1;
+		xstring treepath = GetPath();
+		for (i = 0; i < s; i++)
+		{
+			xitem = list.item(i);
+			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, 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()
+	{
+		HTREEITEM m = dw_tree.GetSelectedItem();
+		if (m == 0) return 0;
+
+		int k = m_sheet.GetSheetIndex();
+		if (k == 0)
+			//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();
+
+		return 1;
+	}
+
+	int OnDelRow()
+	{
+		int k = m_sheet.GetSheetIndex();
+		int row;
+		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(L"fromparent"))
 			{
-				SetAgent("data");
-				
-				dw_list = new xdwgrid__;
-				dw_list.setNativePointer(GetControl("dw_list"));
-				dw_list.openUrl("/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.SetReadOnly(false);
-				
-				dw_ddlb =  new combobox__;
-				dw_ddlb.setNativePointer(this.GetControl("dw_ddlb"));
-				
-				m_sheet =  new xlayersheet__;
-				m_sheet.setNativePointer(this.GetControl("m_sheet"));
-								
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				AttachEvent("dw_ddlb","CBN_SELCHANGE",OnSelectDdlb);
-				
-				createTreeRoot();
-				
-				return 1;
+				hr_type = e.selectSingleNode(L"fromparent").text();
+				if (hr_type != L"")
+				{
+					alert(L"继承的权限无权删除!");
+					return 0;
+				}
 			}
-		]
-	]
-]
\ No newline at end of file
+			dw_list.DeleteRow(row);
+		}
+		else
+		{
+			row = dw_role.GetRow();
+			if (row<1 || row > dw_role.GetRowCount()) return -1;
+			e = dw_role.GetRowElement(row);
+			if (e.selectSingleNode(L"fromparent"))
+			{
+				hr_type = e.selectSingleNode(L"fromparent").text();
+				if (hr_type != L"")
+				{
+					alert(L"继承的权限无权删除!");
+					return 0;
+				}
+			}
+			dw_role.DeleteRow(row);
+		}
+
+		return 1;
+	}
+
+	int OnSetCopy(xdwgrid dw, KXMLDOMElement e, xstring name)
+	{
+		xml x;
+
+		KXMLDOMElement ele;
+		bool f = false;
+
+		int count = dw.GetRowCount();
+		if (count == 0)
+		{
+			x.loadXML(L"<" + name + L"s/>");
+			ele = x.documentElement();
+		}
+		else
+		{
+			KXMLDOMElement e1 = dw.GetRowElement(1);
+			ele = e1.parentNode;
+		}
+		var li = e.selectNodes(name);
+		int i;
+		int len = li.length;
+		xstring treepath = GetPath();
+		for (i = 0; i < len; i++)
+		{
+			KXMLDOMElement ele1 = li.item(i);
+			if (ele1.selectSingleNode(L"fromparent"))
+			{
+				xstring str = ele1.selectSingleNode(L"fromparent").text();
+				if (str != L"") continue;
+			}
+			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);
+		dw.SetReadOnly(true);
+		dw.Redraw();
+
+		return 1;
+	}
+
+	int OnCopy()
+	{
+		xaserverarg arg;
+
+		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(L"错误返回=L" + (xstring)x.xml());
+			return -1;
+		}
+
+		if (x.xml() == L"")
+			x.loadXML(L"<root><items/><roles/></root>");
+
+		KXMLDOMElement e = x.documentElement();
+
+		if (f == L"0" || f == L"1")
+		{
+			KXMLDOMElement ele1 = e.selectSingleNode(L"items");
+			OnSetCopy(dw_list, ele1, L"item");
+		}
+
+		if (f == L"0" || f == L"2")
+		{
+			KXMLDOMElement ele2 = e.selectSingleNode(L"roles");
+			OnSetCopy(dw_role, ele2, L"role");
+		}
+
+		return 1;
+	}
+
+	int OnCmdDispatch(xstring comdid)
+	{
+		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 == L"Del")
+			OnDelRow();
+		else if (comdid == L"Save")
+			OnSave();
+		else if (comdid == L"Copy")
+			OnCopy();
+		else if (comdid == L"xmProdDivi")
+			openUrl(L"/sale/view/RoleAccount3/xpage/data/proddivi");
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int onload()
+	{
+		SetAgent(L"data");
+
+		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(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(GetControl(L"dw_ddlb"));
+
+		m_sheet = new xlayersheet;
+		m_sheet.setNativePointer(GetControl(L"m_sheet"));
+
+		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;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/SysUser.cpp b/jrj/project/business/SystemSettings/SysUser.cpp
index 51322ba..13952ec 100644
--- a/jrj/project/business/SystemSettings/SysUser.cpp
+++ b/jrj/project/business/SystemSettings/SysUser.cpp
@@ -1,330 +1,335 @@
-use "win.vl"
-use "treeview.vm"
-use "dev:vm[xdwgrid.vm]"
-use "dev:vm[xdwtable.vm]"
-use "pref.vl"
-use "dev:vm[xml.vm]"
-use "dev:vm[xaserverarg.vm]"
-use "dev:vm[xaserver.vm]"
-use "dev:vm[xutil.vm]"
-use "dev:code[pa.tpp]"
-use "list.vl"
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-unit vbusiness.xpage
-[
-	SysUser is extend list;
-	about SysUser
-	[
-		
-		method:
-		[
-			treeview__ tv_usergroup;
-			xdwgrid__ dw_user;
-			xnode__	m_agentNode;
-			string strJobID;			
-			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 param)
-			{
-				SetAgent();
-				//重置工具条
-				return 1;
-			}
-				
-			int SetEntityData(param p)
-			{
-				xml__ x=new xml__;	
-				x.setNativePointer(x.CreateInstance());
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());
-				string str = this.m_QueryTxt;
-				//trace(ele.xml);
-				//alert(str);
-				arg.AddArg("guid",str);
-				//trace(strJobID);
-				if (xaserver__::ExecXQuery("","[list.SysUser.xq]",arg.GetString(),x) == 1)
-				{
-					dw_user.AcceptText();					
-					dw_user.Retrieve(x);
-					dw_user.Redraw();
-				}
-				return 1;
-			}
-			
-			int OnTreeSelChanged(ref TNotifyEvent evt,int p)
-			{
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int hItem = nmtv.itemNew.hItem;	
-			
-				int wid = tv_usergroup.GetId();
-				int hitem=treeview__::GetSelectedItem(wid);
-				int rootItem = treeview__::GetRootItem(wid);
-				//if (hItem <=0 || hItem == rootItem) 
-				//	return 0;	
-				msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem);
-				//trace("ok");
-				if (ele)
-				{				
-					xml__ x=new xml__;	
-					x.setNativePointer(x.CreateInstance());
-					xaserverarg__ arg = new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());
-					strJobID = ele.selectSingleNode("@JobID").text;
-					//trace(ele.xml);
-					//alert(strJobID);
-					arg.AddArg("guid",strJobID);
-					//trace(strJobID);
-					if (xaserver__::ExecXQuery("","[list.SysUser.xq]",arg.GetString(),x) == 1)
-					{
-						dw_user.AcceptText();					
-						dw_user.Retrieve(x);
-						dw_user.Redraw();
-					}
-				}
-				
-				return 1;
-			}
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-			int xmImport()
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) SysUser : public xwin
+{
+public:
+	xtreeview tv_usergroup;
+	xdwgrid dw_user;
+	xnode	m_agentNode;
+	xstring strJobID;
+public:
+	SysUser(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static SysUser* CreateInstance(void* implPtr, void* hWnd)
+	{
+		SysUser* pWin = new SysUser(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)
 			{
-				
-				int wid = tv_usergroup.GetId();
-				int hitem=treeview__::GetSelectedItem(wid);
-				if (!hitem)
-				{
-					alert("请选择职位!");
-					return 0;
-				}
-				OpenWindow("dev:xpage[UserImport.vx]",this);						
-				//openUrl("系统用户.vface/xpage/SysUser/UserImport", this);
-				return 1;		
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
 			}
-			int OnSave()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(x.CreateInstance());			
-				dw_user.DwUpdateAllToEx(x.GetXmlDoc());
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());
-				arg.AddArg("content",x.GetXml());
-				arg.AddArg("dbmap","SysUser.dbmap");
-				if(getUrl("/sale/data/SysUser/SysUser",arg.GetString(),x)!=1)
-				{
-					//trace("error:"+x.GetXml());
-					alert("保存失败");
-				}
-				else{
-					if(x.GetXmlDoc().selectSingleNode("erroe"))
-					{
-						alert("保存出错2! ");
-						return 0;				
-					}
-					//trace(x.GetXml());
-					dw_user.ResetUpdateStatus();
-					win__::MessageBox(GetHWND(),"保存成功!","提示",0);	
-				}
-				
-/*					arg.AddArg("xdata",x.GetXml());
-				//arg.AddArg("jobguid",strJobID);
-				//trace(x.GetXml());
-				//trace(strJobID);				
-				//if (getUrl("/sale/data/SysUser/SysUser",arg.GetString(),x) != 1)
-				//trace(xaserver__::ExecXAction(GetServerUrl(),"[SysUser.xa]",arg.GetString(),x));
-			if (xaserver__::ExecXAction(GetServerUrl(),"[SysUser.xa]",arg.GetString(),x)!=1)				
-				{
-					//trace("error:"+x.GetXml());
-					alert("保存失败");
-				}
-				else{
-					if(x.GetXmlDoc().selectSingleNode("ERROR"))
-					{
-						alert("保存出错2! ");
-						return 0;				
-					}
-					win__::MessageBox(GetHWND(),"保存成功!","提示",0);	
-				}*/
-				return 1;
-			}				
-			int OnAddRow()
-			{
-				int wid = tv_usergroup.GetId();
-				int hitem=treeview__::GetSelectedItem(wid);
-				if(hitem==0)
-				{
-					alert("请先选择职位类型!");
-				}
-				else
-				{
-					int row = dw_user.InsertRow(0);
-					dw_user.SetItemString(row,"Status","Y");				
-				}
-				return 1;
-			}
-			
-			int OnInsertRow()
-			{
-				int wid = tv_usergroup.GetId();
-				int hitem=treeview__::GetSelectedItem(wid);
-				if(hitem==0)
-				{
-					alert("请先选择职位类型!");
-				}
-				else
-				{
-					int crow=dw_user.GetRow();
-					int row=dw_user.InsertRow(crow);
-					dw_user.SetItemString(row,"Status","Y");				
-				}
-				return 1;
-			}
+		}
+		return 1;
+	}
 
-			int OnDeleteRow()
-			{
-				int row=dw_user.GetRow();
-				dw_user.DeleteRow(row);
-				return 1;
-			}
-				
-			int OnJobType()
-			{
-				openUrl("组织架构.vface/worknode/Hr/HrJob");
-				return 1;
-			}
-				
-			int OnClicked(ref TNotifyEvent evt,int p)
-			{	
-				ref DWNMHDR  hdr = evt.pnmh;				
-				int row = hdr.row;
-				int col=hdr.col ;
-				string colname=dw_user.GetColumnName(col);
-				msxml::IXMLDOMElement xrow = dw_user.GetRowElement(row);
-				string BindComputer=xrow.selectSingleNode("BindComputer").text;			
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());
-				if(BindComputer  != "" )
-				{	
-					arg.AddArg("BindComputer",BindComputer);					
-				}
-			
-				string comdid;
-				if(colname=="BindComputer")
-				{	
-					openUrl("系统用户.vface/xpage/SysUser/BindComputer/dialog", arg);		
-					comdid = arg.GetArgString("comdid");			
-					if(comdid=="ok")
-					{
-						string strxml = arg.GetArgString("xml");					
-						dw_user.SetItemDisplayString(row,colname,strxml); 
-						dw_user.SetItemString(row,colname,strxml); 					
-						dw_user.Redraw();
-					}
-				}				
-				return 1;
-			}	
-					
-			int OnResetPass()
-			{
-				xaserverarg__ arg = new xaserverarg__;
-				int pt = arg.CreateInstance();
-				arg.setNativePointer(pt);
-					
-				int row = dw_user.GetRow();
-				if(row < 1) return 1;
-				arg.AddArg("user", dw_user.GetItemString(row,"EmployeeNo"));
-				
-				OpenWindow("dev:xpage[ResetUserPassDlg.vx]",pt);
-				return 1;
-			}
-					
-			int Onlog()
-			{
-				openUrl("/sale/view/SysUser/xpage/SysUser/SysLoginRecord");
-				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 =="JobType") OnJobType();
-				else if (comdid=="xmImport") xmImport();
-				else if (comdid == "xmLog") Onlog();
-				else if(comdid=="_cb_grid_search") return GridSearchEx();
-				else if(comdid=="xmResetPass") return OnResetPass();
-				else if(comdid=="xmResetPassEx") OpenWindow("dev:xpage[SysForcePassward.vx]");
-				return 0;			
-			}
-			
-			
-			//命令处理事件
-			int OnXCommand(ref TXCommandEvent evt,int param)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM param)
+	{
+		SetAgent();
+		//重置工具条
+		return 1;
+	}
 
-			int OnAttachEvent()
-			{
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				//获取焦点事件,用于重置工具条
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				//获得树的选择事件
-				AttachEvent("tv_usergroup", "TVN_SELCHANGED",OnTreeSelChanged);
-				//AttachEvent("dw_user","DWV_ITEMBEINGEDIT",OnClicked);					
-				AttachEvent("dw_user","DWV_DOUBLECLICKED",OnClicked);					
-			}
-			
-			int OnInitial()
-			{
-				SetAgent();
+	int SetEntityData(param p)
+	{
+		xml x;
 
-				OnAttachEvent();
-				return 1;
-			}
-			
-			int onload()
+		xaserverarg arg;
+
+		xstring str = m_QueryTxt;
+		//trace(ele.xml);
+		//alert(str);
+		arg.AddArg(L"guid", str);
+		//trace(strJobID);
+		if (xaserver::ExecXQuery(L"", L"[list.SysUser.xq]", arg.GetString(), x) == 1)
+		{
+			dw_user.AcceptText();
+			dw_user.Retrieve(x);
+			dw_user.Redraw();
+		}
+		return 1;
+	}
+
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+
+		//int wid = tv_usergroup.GetId();
+		HTREEITEM hitem = tv_usergroup.GetSelectedItem();
+		HTREEITEM rootItem = tv_usergroup.GetRootItem();
+		//if (hItem <=0 || hItem == rootItem) 
+		//	return 0;	
+		KXMLDOMElement ele = tv_usergroup.GetItemData(hitem);
+		//trace(L"ok");
+		if (ele)
+		{
+			xml x;
+
+			xaserverarg arg;
+
+			strJobID = ele.selectSingleNode(L"@JobID").text();
+			//trace(ele.xml);
+			//alert(strJobID);
+			arg.AddArg(L"guid", strJobID);
+			//trace(strJobID);
+			if (xaserver::ExecXQuery(L"", L"[list.SysUser.xq]", arg.GetString(), x) == 1)
 			{
-				m_agentNode = new xnode__;
-				
-				tv_usergroup =  new treeview__;
-				tv_usergroup.setNativePointer(this.GetControl("tv_usergroup"));			
-				dw_user =  new xdwgrid__;
-				dw_user.setNativePointer(this.GetControl("dw_user"));				
-				dw_user.SetDataObject(GetServerUrl(),"dev:sheet[SysUser.tpl/UserList]");	
-				dw_user.SetReadOnly(true);		
-				dw_user.SetSelectionMode(1);
-
-				OnInitial();
-				int wid = tv_usergroup.GetId();
-				int root = treeview__::GetRootItem(wid);		
-				treeview__::ExpandItem(wid,root);
-
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());				
-				x.LoadXml("<Config/>");
-				this.m_configDoc = x.GetXmlDoc();
-				rowSearch("系统用户.vface/template/SysUser/list");
-				GridSearchEx();
-				
-				return 1;
+				dw_user.AcceptText();
+				dw_user.Retrieve(x);
+				dw_user.Redraw();
 			}
-		]
-		
-	]
-]
\ No newline at end of file
+		}
+
+		return 1;
+	}
+
+	int xmImport()
+	{
+
+		//int wid = tv_usergroup.GetId();
+		HTREEITEM hitem = tv_usergroup.GetSelectedItem();
+		if (!hitem)
+		{
+			alert(L"请选择职位!");
+			return 0;
+		}
+		OpenWindow(L"dev:xpage[UserImport.vx]");
+		//openUrl(L"系统用户.vface/xpage/SysUser/UserImport", this);
+		return 1;
+	}
+	int OnSave()
+	{
+		xml x;
+
+		dw_user.DwUpdateAllToEx(x);
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"SysUser.dbmap");
+		if (getUrl(L"/sale/data/SysUser/SysUser", arg.GetString(), x) != 1)
+		{
+			//trace(L"error:"+x.xml());
+			alert(L"保存失败");
+		}
+		else {
+			if (x.selectSingleNode(L"erroe"))
+			{
+				alert(L"保存出错2! ");
+				return 0;
+			}
+			//trace(x.xml());
+			dw_user.ResetUpdateStatus();
+			MessageBox(GetHWND(), L"保存成功!", L"提示", 0);
+		}
+
+		/*					arg.AddArg(L"xdata",x.xml());
+						//arg.AddArg(L"jobguid",strJobID);
+						//trace(x.xml());
+						//trace(strJobID);
+						//if (getUrl(L"/sale/data/SysUser/SysUser",arg.GetString(),x) != 1)
+						//trace(xaserver::ExecXAction(GetServerUrl(),L"[SysUser.xa]",arg.GetString(),x));
+					if (xaserver::ExecXAction(GetServerUrl(),L"[SysUser.xa]",arg.GetString(),x)!=1)
+						{
+							//trace(L"error:"+x.xml());
+							alert(L"保存失败");
+						}
+						else{
+							if(x.selectSingleNode(L"ERROR"))
+							{
+								alert(L"保存出错2! ");
+								return 0;
+							}
+							MessageBox(GetHWND(),L"保存成功!",L"提示",0);
+						}*/
+		return 1;
+	}
+	int OnAddRow()
+	{
+		//int wid = tv_usergroup.GetId();
+		HTREEITEM hitem = tv_usergroup.GetSelectedItem();
+		if (hitem == 0)
+		{
+			alert(L"请先选择职位类型!");
+		}
+		else
+		{
+			int row = dw_user.InsertRow(0);
+			dw_user.SetItemString(row, L"Status", L"Y");
+		}
+		return 1;
+	}
+
+	int OnInsertRow()
+	{
+		//int wid = tv_usergroup.GetId();
+		HTREEITEM hitem = tv_usergroup.GetSelectedItem();
+		if (hitem == 0)
+		{
+			alert(L"请先选择职位类型!");
+		}
+		else
+		{
+			int crow = dw_user.GetRow();
+			int row = dw_user.InsertRow(crow);
+			dw_user.SetItemString(row, L"Status", L"Y");
+		}
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		int row = dw_user.GetRow();
+		dw_user.DeleteRow(row);
+		return 1;
+	}
+
+	int OnJobType()
+	{
+		openUrl(L"组织架构.vface/worknode/Hr/HrJob");
+		return 1;
+	}
+
+	int OnClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		int col = hdr.col;
+		xstring colname = dw_user.GetColumnName(col);
+		KXMLDOMElement xrow = dw_user.GetRowElement(row);
+		xstring BindComputer = xrow.selectSingleNode(L"BindComputer").text();
+		xaserverarg arg;
+
+		if (BindComputer != L"")
+		{
+			arg.AddArg(L"BindComputer", BindComputer);
+		}
+
+		xstring comdid;
+		if (colname == L"BindComputer")
+		{
+			openUrl(L"系统用户.vface/xpage/SysUser/BindComputer/dialog", arg);
+			comdid = arg.GetArgString(L"comdid");
+			if (comdid == L"ok")
+			{
+				xstring strxml = arg.GetArgString(L"xml");
+				dw_user.SetItemDisplayString(row, colname, strxml);
+				dw_user.SetItemString(row, colname, strxml);
+				dw_user.Redraw();
+			}
+		}
+		return 1;
+	}
+
+	int OnResetPass()
+	{
+		xaserverarg arg;
+
+
+		int row = dw_user.GetRow();
+		if (row < 1) return 1;
+		arg.AddArg(L"user", dw_user.GetItemString(row, L"EmployeeNo"));
+
+		OpenWindow(L"dev:xpage[ResetUserPassDlg.vx]", arg);
+		return 1;
+	}
+
+	int Onlog()
+	{
+		openUrl(L"/sale/view/SysUser/xpage/SysUser/SysLoginRecord");
+		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"JobType") OnJobType();
+		else if (comdid == L"xmImport") xmImport();
+		else if (comdid == L"xmLog") Onlog();
+		else if (comdid == L"_cb_grid_search") return GridSearchEx();
+		else if (comdid == L"xmResetPass") return OnResetPass();
+		else if (comdid == L"xmResetPassEx") OpenWindow(L"dev:xpage[SysForcePassward.vx]");
+		return 0;
+	}
+
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&SysUser::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&SysUser::OnSetFocus);
+		//获得树的选择事件
+		AttachEvent(L"tv_usergroup", L"TVN_SELCHANGED", (FEvent)&SysUser::OnTreeSelChanged);
+		//AttachEvent(L"dw_user",L"DWV_ITEMBEINGEDIT",OnClicked);					
+		AttachEvent(L"dw_user", L"DWV_DOUBLECLICKED", (FEvent)&SysUser::OnClicked);
+		return 1;
+	}
+
+	int OnInitial()
+	{
+		SetAgent();
+
+		OnAttachEvent();
+		return 1;
+	}
+
+	int onload()
+	{
+		m_agentNode = new xnode;
+
+		tv_usergroup = new treeview;
+		tv_usergroup.setNativePointer(GetControl(L"tv_usergroup"));
+		dw_user = new xdwgrid;
+		dw_user.setNativePointer(GetControl(L"dw_user"));
+		dw_user.SetDataObject(GetServerUrl(), L"dev:sheet[SysUser.tpl/UserList]");
+		dw_user.SetReadOnly(true);
+		dw_user.SetSelectionMode(1);
+
+		OnInitial();
+		//int wid = tv_usergroup.GetId();
+		HTREEITEM root = tv_usergroup.GetRootItem();
+		tv_usergroup.ExpandItem( root);
+
+		xml x;
+
+		x.loadXML(L"<Config/>");
+		m_configDoc = x;
+		rowSearch(L"系统用户.vface/template/SysUser/list");
+		GridSearchEx();
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/UserImport.cpp b/jrj/project/business/SystemSettings/UserImport.cpp
index 801196b..0ef3160 100644
--- a/jrj/project/business/SystemSettings/UserImport.cpp
+++ b/jrj/project/business/SystemSettings/UserImport.cpp
@@ -1,329 +1,335 @@
-use "win.vl"
-use "treeview.vm"
-use "dev:vm[xdwgrid.vm]"
-use "dev:vm[xdwtable.vm]"
-use "pref.vl"
-use "dev:vm[xml.vm]"
-use "dev:vm[xaserverarg.vm]"
-use "dev:vm[xaserver.vm]"
-use "dev:vm[xutil.vm]"
-use "dev:code[SysUser.vx]"
-use "frame.vl"
-use "file.vl"
-unit vbusiness.xpage
-[
-	UserImport is extend frame;
-	about UserImport
-	[
-		field:
-		[
-			SysUser lw_obj;
-			xdwgrid__	dw_list;
-			treeview__		tv_org;
-			xnode__	m_agentNode;	//Agent Condition
-			string	m_agentCond;	//Agent Node
-			string	m_sTxt;
-			string		is_orgid;			
-		]
-		
-		method:
-		[
-			int SetAgent()
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+//use "dev:code[SysUser.vx]"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) UserImport : public xframe
+{
+public:
+
+
+	SysUser lw_obj;
+	xdwgrid	dw_list;
+	xtreeview	tv_org;
+	xnode	m_agentNode;	//Agent Condition
+	xstring	m_agentCond;	//Agent Node
+	xstring	m_sTxt;
+	xstring		is_orgid;
+public:
+	UserImport(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static UserImport* CreateInstance(void* implPtr, void* hWnd)
+	{
+		UserImport* pWin = new UserImport(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)
 			{
-				string xfNodeAgentArea  = "agentarea";
-				xnode__ anode = new xnode__;
-				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
-				var xframeElement =  GetElement();
-				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
-				if(agent)
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM param)
+	{
+		SetAgent();
+		//重置工具条
+		return 1;
+	}
+
+	int  OnRetrieve(xstring ls_orgid)
+	{
+
+		xml x;
+
+		xaserverarg arg;
+
+		arg.AddArg(L"OrgID", ls_orgid);
+		//trace(ls_orgid);
+		//if (xaserver::ExecXQuery(GetServerUrl(),L"[MSSqlHrEmployee.xq]",arg.GetString(),x) == 1)
+		if (xurl::get(L"SysUser.config/UserSelect.xq", arg.GetString(), x) == 1)
+		{
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+		//trace(x.xml());
+		return 1;
+	}
+
+	int OnOK()
+	{
+		if (GetWinParam())
+		{
+			lw_obj = new SysUser;
+			lw_obj.setNativePointer(GetParam());
+			lw_obj = GetParam();
+		}
+		else
+			return 0;
+
+		int row = dw_list.GetNextSelectRow(1);
+		//trace(row);
+		if (row < 1)
+		{
+			alert(L"请选择人员!");
+			return 1;
+		}
+
+		xstring sPositionID, sPositionName;
+		xstring sOrgID, sOrgName;
+		xstring sJobID, sJobName;
+		int wid = lw_obj.tv_usergroup.GetId();
+		int hitem = tv_org.GetSelectedItem(wid);
+		KXMLDOMElement ele = tv_org.GetItemData(wid, hitem);
+
+
+		while (row > 0)
+		{
+			//trace(row);
+			KXMLDOMElement e = dw_list.GetRowElement(row);
+			trace(e.xml());
+			xstring sEmployeeNo = e.selectSingleNode(L"EmployeeNo").text() + L"";
+			xstring sOldEmpNo = e.selectSingleNode(L"OldEmpNo").text() + L"";
+			xstring sPersonID = e.selectSingleNode(L"PersonID").text() + L"";
+			xstring sPersonName = e.selectSingleNode(L"Name").text() + L"";
+			xstring sPassWord = xutil::MD5(sOldEmpNo);
+
+			/*
+			xml xx;
+			x
+			xaserverarg arg;
+			arg.setNativePointer(arg.CreateInstance());
+			arg.AddArg(L"userno",sOldEmpNo);
+			arg.AddArg(L"password",sPassWord);
+			if(xurl::get(L"/sale/data/SysUser/GetOldPassWord",arg.GetString(),xx)==1)
+			{
+				if(xx.xml()!=L"")
 				{
-					string s = agent.xml;
-					SetAgentNodeContent (anode,s);
+					KXMLDOMElement ex = xx.documentElement();
+					sPassWord = L""+ex.text();
 				}
-				return 1;
-			}
+			}*/
 
-			//焦点激活处理函数
-			int OnSetFocus(ref TEvent evt,int param)
+			int nRow = lw_obj.dw_user.InsertRow(0);
+			lw_obj.dw_user.SetItemString(nRow, L"EmployeeNo", sEmployeeNo);
+			lw_obj.dw_user.SetItemString(nRow, L"UserName", sOldEmpNo);
+			lw_obj.dw_user.SetItemString(nRow, L"PassWord", sPassWord);
+			lw_obj.dw_user.SetItemString(nRow, L"PersonID", sPersonID);
+			lw_obj.dw_user.SetItemDisplayString(nRow, L"PersonID", sPersonName);
+			lw_obj.dw_user.SetItemString(nRow, L"Status", L"Y");
+			lw_obj.dw_user.SetItemDisplayString(nRow, L"Status", L"有效");
+			lw_obj.dw_user.SetItemString(nRow, L"OldEmpNo", sOldEmpNo);
+			/*
+				lw_obj.dw_user.SetItemString(nRow,L"PositionID",sPositionID);
+				lw_obj.dw_user.SetItemDisplayString(nRow,L"PositionID",sPositionName);
+				lw_obj.dw_user.SetItemString(nRow,L"OrgID",sOrgID);
+				lw_obj.dw_user.SetItemDisplayString(nRow,L"OrgID",sOrgName);
+				lw_obj.dw_user.SetItemString(nRow,L"JobID",sJobID);
+				lw_obj.dw_user.SetItemDisplayString(nRow,L"JobID",sJobName);
+
+				lw_obj.dw_user.SetItemString(nRow,L"Status",L"Y");
+				lw_obj.dw_user.SetItemDisplayString(nRow,L"Status",L"有效");
+				xstring sdate = TApp::GetCurDate()+L"";
+				lw_obj.dw_user.SetItemString(nRow,L"StartDate",sdate+L"");
+				lw_obj.dw_user.SetItemString(nRow,L"EndDate",L"2050-12-31");*/
+
+			row = dw_list.GetNextSelectRow(row + 1);
+			//trace(row);
+		}
+		CloseWindow();
+		return 1;
+	}
+	int OnSubTree(xstring id, HTREEITEM parentitem)
+	{
+		int wid = tv_org.GetId();
+		if (tv_org.GetChildItem(wid, parentitem) > 0) return 1;
+		xml x;
+
+		xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"sguid", id);
+		if (xurl::post(L"/sale/data/OrganizationStruct/tree.child.OrgChart", arg.GetString(), x) != 1)
+		{
+			trace(x.xml());
+			return -1;
+		}
+		//trace(x.xml());
+		var list = x.selectNodes(L"//item");
+		int i = 0, s = list.length;
+		KXMLDOMElement xitem;
+		xstring sName;
+		xstring sguid;
+		xstring stype;
+		if (s > 0)
+		{
+			for (i = 0; i < s; i++)
 			{
-				SetAgent();
-				//重置工具条
-				return 1;
-			}
-
-			int  OnRetrieve(string ls_orgid)
-			{
-
-				xml__ x=new xml__;
-				x.setNativePointer(x.CreateInstance());
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());
-				arg.AddArg("OrgID",ls_orgid);
-				//trace(ls_orgid);
-				//if (xaserver__::ExecXQuery(GetServerUrl(),"[MSSqlHrEmployee.xq]",arg.GetString(),x) == 1)
-				if (url::get("SysUser.config/UserSelect.xq",arg.GetString(),x) == 1)
+				xitem = list.item(i);
+				sName = xitem.selectSingleNode(L"name").text();
+				sguid = xitem.selectSingleNode(L"id").text();
+				stype = xitem.selectSingleNode(L"typ").text();
+				//int curItem = tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4);
+				int curItem = 0;
+				if (stype == L"Org")
 				{
-					dw_list.Retrieve(x);
-					dw_list.Redraw();
-				}
-				//trace(x.GetXml());
-				return 1;
-			}
-			
-			int OnOK()
-			{
-				if (GetParam())
-				{
-					lw_obj = new SysUser;
-					lw_obj.setNativePointer(GetParam());
-					lw_obj = GetParam();
+					curItem = tv_org.InsertChildItemEx(wid, parentitem, sName, xitem, 15, 4);
+					tv_org.SetItemChild1(wid, curItem, 1);
 				}
 				else
-					return 0;
+				{
+					curItem = tv_org.InsertChildItemEx(wid, parentitem, sName, xitem, 21, 21);
+				}
+				//OnSubTree(sguid,curItem);
+			}
+		}
+		return 1;
+	}
 
-				int row = dw_list.GetNextSelectRow(1);
-				trace(row);
-				if (row<1)
-				{
-					alert("请选择人员!");
-					return 1;
-				}	
-				
-				string sPositionID,sPositionName;
-				string sOrgID,sOrgName;
-				string sJobID,sJobName;
-				int wid = lw_obj.tv_usergroup.GetId();
-				int hitem=treeview__::GetSelectedItem(wid);
-				msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem);
+	int OnCreateTree(xstring id, int parentitem)
+	{
+		//while (tv_1.GetRootItem()>0)
+		//	tv_1.DeleteItem(tv_1.GetRootItem());				
+		int wid = tv_org.GetId();
+		xml x;
 
-				
-				while (row>0)
-				{	
-					trace(row);
-					msxml::IXMLDOMElement e = dw_list.GetRowElement(row);
-					trace(e.xml);				
-					string sEmployeeNo = e.selectSingleNode("EmployeeNo").text+"";
-					string sOldEmpNo = e.selectSingleNode("OldEmpNo").text+"";				
-					string sPersonID = e.selectSingleNode("PersonID").text+"";
-					string sPersonName = e.selectSingleNode("Name").text+"";
-					string sPassWord = xutil__::MD5(sOldEmpNo);
-				
-					/*
-					xml__ xx = new xml__;
-					xx.setNativePointer(xml__ ::CreateInstance());
-					xaserverarg__ arg=new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());	
-					arg.AddArg("userno",sOldEmpNo);
-					arg.AddArg("password",sPassWord);
-					if(url::get("/sale/data/SysUser/GetOldPassWord",arg.GetString(),xx)==1)
-					{
-						if(xx.GetXml()!="")
-						{
-							msxml::IXMLDOMElement ex = xx.GetXmlDoc().documentElement;
-							sPassWord = ""+ex.text;
-						}
-					}*/
+		x.loadXML(L"<item><id>" + id + L"</id><no/><name>凤凰集团</name><typ>Org</typ></item>");
+		//KXMLDOMDocument root = x;
+		//KXMLDOMElement RDoc = x.documentElement();
+		//KXMLDOMElement ele = RDoc.SelectSingleNode(L"//Org");
+		KXMLDOMElement ele = x.selectSingleNode(L"//item");
+		int hItem = tv_org.InsertChildItemEx(wid, 0, L"凤凰集团", ele, 15, 4);
+		tv_org.SetItemChild1(wid, hItem, 1);
+		return 1;
 
-					int nRow = lw_obj.dw_user.InsertRow(0);
-					lw_obj.dw_user.SetItemString(nRow,"EmployeeNo",sEmployeeNo);
-					lw_obj.dw_user.SetItemString(nRow,"UserName",sOldEmpNo);
-					lw_obj.dw_user.SetItemString(nRow,"PassWord",sPassWord);						
-					lw_obj.dw_user.SetItemString(nRow,"PersonID",sPersonID);
-					lw_obj.dw_user.SetItemDisplayString(nRow,"PersonID",sPersonName);
-					lw_obj.dw_user.SetItemString(nRow,"Status","Y");
-					lw_obj.dw_user.SetItemDisplayString(nRow,"Status","有效");
-					lw_obj.dw_user.SetItemString(nRow,"OldEmpNo",sOldEmpNo);						
-				/*
-					lw_obj.dw_user.SetItemString(nRow,"PositionID",sPositionID);
-					lw_obj.dw_user.SetItemDisplayString(nRow,"PositionID",sPositionName);
-					lw_obj.dw_user.SetItemString(nRow,"OrgID",sOrgID);
-					lw_obj.dw_user.SetItemDisplayString(nRow,"OrgID",sOrgName);
-					lw_obj.dw_user.SetItemString(nRow,"JobID",sJobID);
-					lw_obj.dw_user.SetItemDisplayString(nRow,"JobID",sJobName);
-				
-					lw_obj.dw_user.SetItemString(nRow,"Status","Y");
-					lw_obj.dw_user.SetItemDisplayString(nRow,"Status","有效");
-					string sdate = TApp::GetCurDate()+"";
-					lw_obj.dw_user.SetItemString(nRow,"StartDate",sdate+"");
-					lw_obj.dw_user.SetItemString(nRow,"EndDate","2050-12-31");*/
-				
-					row = dw_list.GetNextSelectRow(row + 1);
-					trace(row);
-				}
-				CloseWindow();
-				return 1;
-			}
-			int OnSubTree(string id,int parentitem)
+		/*xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"sguid",id);
+		if(xurl::post(L"/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1)
+		{
+			trace(x.xml());
+			return -1;
+		}
+		//trace(x.xml());
+		var list=x.selectNodes(L"//item");
+		int i=0,s=list.length;
+		KXMLDOMElement xitem;
+		xstring sName;
+		xstring sguid;
+		if (s >0)
+		{
+			for (i=0;i<s;i++)
 			{
-				int wid = tv_org.GetId();
-				if (treeview__::GetChildItem(wid,parentitem) >0) return 1;
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("sguid",id);
-				if(url::post("/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1)
-				{
-					trace(x.GetXml());
-					return -1;	
-				}
-				//trace(x.GetXml());
-				var list=x.GetXmlDoc().selectNodes("//item");
-				int i=0,s=list.length;
-				msxml::IXMLDOMElement xitem;
-				string sName; 
-				string sguid; 
-				string stype; 
-				if (s >0)
-				{
-					for (i=0;i<s;i++)
-					{
-						xitem= list.item(i);
-						sName = xitem.SelectSingleNode("name").text;
-						sguid = xitem.SelectSingleNode("id").text;
-						stype = xitem.SelectSingleNode("typ").text;
-						//int curItem = tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4);
-						int curItem=0;
-						if (stype =="Org")
-						{
-							curItem=tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4);
-							tv_org.SetItemChild1(wid,curItem,1);
-						}
-						else
-							{
-							curItem=tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,21,21);
-						}
-						//OnSubTree(sguid,curItem);
-					}
-				}
-				return 1;
+				xitem= list.item(i);
+				sName = xitem.SelectSingleNode(L"@name").text();
+				sguid = xitem.SelectSingleNode(L"@id").text();
+				int curItem = tv_org.InsertChildItemEx(wid,hItem,sName,xitem,15,4);
+				tv_org.SetItemChild1(wid,curItem,1);
+				//OnSubTree(sguid,curItem);
 			}
-				
-			int OnCreateTree(string id,int parentitem)
-			{
-				//while (tv_1.GetRootItem()>0)
-				//	tv_1.DeleteItem(tv_1.GetRootItem());				
-				int wid = tv_org.GetId();
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				x.LoadXml("<item><id>"+id+"</id><no/><name>凤凰集团</name><typ>Org</typ></item>");
-				//msxml::IXMLDOMDocument root = x.GetXmlDoc();
-				//msxml::IXMLDOMElement RDoc = x.GetXmlDoc().documentElement;
-				//msxml::IXMLDOMElement ele = RDoc.SelectSingleNode("//Org");
-				msxml::IXMLDOMElement ele = x.GetXmlDoc().SelectSingleNode("//item");
-				int hItem = treeview__::InsertChildItemEx(wid,0,"凤凰集团",ele,15,4);
-				treeview__::SetItemChild1(wid,hItem,1);
-				return 1;
-				
-				/*xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("sguid",id);
-				if(url::post("/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1)
-				{
-					trace(x.GetXml());
-					return -1;	
-				}
-				//trace(x.GetXml());
-				var list=x.GetXmlDoc().selectNodes("//item");
-				int i=0,s=list.length;
-				msxml::IXMLDOMElement xitem;
-				string sName; 
-				string sguid;
-				if (s >0)
-				{
-					for (i=0;i<s;i++)
-					{
-						xitem= list.item(i);
-						sName = xitem.SelectSingleNode("@name").text;
-						sguid = xitem.SelectSingleNode("@id").text;
-						int curItem = tv_org.InsertChildItemEx(wid,hItem,sName,xitem,15,4);
-						tv_org.SetItemChild1(wid,curItem,1);
-						//OnSubTree(sguid,curItem);
-					}
-				}
-				return 1;*/
-			}
-				
-			int OnTreeExpanding(ref TNotifyEvent evt,int p)	
-			{
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int sitem = nmtv.itemNew.hItem;
-					
-				int hCursor = xutil__::SetCursorWait();
-				//string id = treeview__::GetItemData(tv_org.GetId(), sitem);
-				msxml::IXMLDOMElement ele = treeview__::GetItemData(tv_org.GetId(),sitem);
-				string id = ele.SelectSingleNode("id").text;
-				OnSubTree(id, sitem);
-				xutil__::RestoreCursor(hCursor);
-				return 1;
-			}
-			
-			int OnTreeSelChanged(ref TXCommandEvent evt,int p)
-			{
-				int wid = tv_org.GetId();
-				int hitem=treeview__::GetSelectedItem(wid);
-				msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem);
-				if (ele)
-				{
-					string ls_orgid = ele.SelectSingleNode("id").text;
-					is_orgid = ls_orgid;
-					OnRetrieve(ls_orgid);
-				}
-				return 1;
-			}			
-			//命令发布函数
-			int OnCmdDispatch(string comdid)
-			{
-				if (comdid=="cb_import")
-					OnOK();
-				else if (comdid=="cb_close")
-					CloseWindow();
-				return 0;
-			}
-			
-			//命令处理事件
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			
-			int OnAttachEvent()
-			{
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				//获取焦点事件,用于重置工具条
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				//获得树的选择事件
-				AttachEvent("tv_org", "TVN_SELCHANGED",OnTreeSelChanged);
-				AttachEvent("tv_org", "TVN_ITEMEXPANDING",OnTreeExpanding);				
-			}
-			
-			int OnInitial()
-			{
-				SetAgent();
-				OnAttachEvent();		
-				return 1;
-			}
-			
-			int onload()
-			{			
-				tv_org = new treeview__ ;
-				tv_org.setNativePointer(this.GetControl("tv_org"));
-				dw_list =  new xdwgrid__;
-				dw_list.setNativePointer(this.GetControl("dw_list"));						
-				dw_list.openUrl("系统用户.vface/template/SysUser/EmpSelect");		
-				dw_list.SetSelectionMode(3); //3
-				dw_list.SetReadOnly(true);
+		}
+		return 1;*/
+	}
 
-				OnInitial();
-				OnCreateTree("00000000-0000-0000-0000-000000000000", 0);
-				int wid = tv_org.GetId();
-				int root = treeview__::GetRootItem(wid);		
-				treeview__::ExpandItem(wid,root);				
-				OnRetrieve("00000000-0000-0000-0000-000000000000");
-				return 1;
-			}
-		]
+	int OnTreeExpanding(TEvent* evt, LPARAM p)
+	{
 		
-	]
-]
\ No newline at end of file
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM sitem = nmtv.itemNew.hItem;
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+		//xstring id = tv_org.GetItemData(tv_org.GetId(), sitem);
+		KXMLDOMElement ele = tv_org.GetItemData(tv_org.GetId(), sitem);
+		xstring id = ele.selectSingleNode(L"id").text();
+		OnSubTree(id, sitem);
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
+
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		//int wid = tv_org.GetId();
+		int hitem = tv_org.GetSelectedItem();
+		KXMLDOMElement ele = tv_org.GetItemData(hitem);
+		if (ele)
+		{
+			xstring ls_orgid = ele.selectSingleNode(L"id").text();
+			is_orgid = ls_orgid;
+			OnRetrieve(ls_orgid);
+		}
+		return 1;
+	}
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"cb_import")
+			OnOK();
+		else if (comdid == L"cb_close")
+			CloseWindow();
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&UserImport::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&UserImport::OnSetFocus);
+		//获得树的选择事件
+		AttachEvent(L"tv_org", L"TVN_SELCHANGED", (FEvent)&UserImport::OnTreeSelChanged);
+		AttachEvent(L"tv_org", L"TVN_ITEMEXPANDING", (FEvent)&UserImport::OnTreeExpanding);
+		return 1;
+	}
+
+	int OnInitial()
+	{
+		SetAgent();
+		OnAttachEvent();
+		return 1;
+	}
+
+	int onload()
+	{
+		tv_org = new treeview;
+		tv_org.setNativePointer(GetControl(L"tv_org"));
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"系统用户.vface/template/SysUser/EmpSelect");
+		dw_list.SetSelectionMode(3); //3
+		dw_list.SetReadOnly(true);
+
+		OnInitial();
+		OnCreateTree(L"00000000-0000-0000-0000-000000000000", 0);
+		//int wid = tv_org.GetId();
+		int root = tv_org.GetRootItem();
+		tv_org.ExpandItem(root);
+		OnRetrieve(L"00000000-0000-0000-0000-000000000000");
+		return 1;
+	}
+};
\ No newline at end of file

--
Gitblit v1.9.3