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

---
 /dev/null                                                         |  513 -----------------
 jrj/project/business/SystemSettings/Organization.cpp              |  187 ++++++
 jrj/project/business/SystemSettings/Buglist.Developer.hxsoft.cpp  |  332 +++++++++++
 jrj/project/business/SystemSettings/ProcessManagement.cpp         |  184 ++++++
 jrj/project/business/SystemSettings/OrganizationBase.cpp          |  189 ++++++
 jrj/project/business/SystemSettings/BugMaint.Developer.hxsoft.cpp |  369 ++++++++++++
 jrj/ext-jrj/ext-jrj.vcxproj                                       |   11 
 7 files changed, 1,266 insertions(+), 519 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index 580b054..77dc281 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -826,9 +826,10 @@
     <ClCompile Include="..\project\business\SystemSettings\BindComputer.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
-    <ClCompile Include="..\project\business\SystemSettings\Buglist.Developer.hxsoft_A.cpp">
+    <ClCompile Include="..\project\business\SystemSettings\Buglist.Developer.hxsoft.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\BugMaint.Developer.hxsoft.cpp" />
     <ClCompile Include="..\project\business\SystemSettings\Data.config.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
@@ -844,9 +845,6 @@
     <ClCompile Include="..\project\business\SystemSettings\FlowTermSelect.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
-    <ClCompile Include="..\project\business\SystemSettings\GroupManagerList_A.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
-    </ClCompile>
     <ClCompile Include="..\project\business\SystemSettings\level.Customer.v3.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
@@ -856,10 +854,11 @@
     <ClCompile Include="..\project\business\SystemSettings\maint.Level.Customer3.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
-    <ClCompile Include="..\project\business\SystemSettings\Organization_A.cpp">
+    <ClCompile Include="..\project\business\SystemSettings\Organization.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
-    <ClCompile Include="..\project\business\SystemSettings\ProcessManagement_A.cpp">
+    <ClCompile Include="..\project\business\SystemSettings\OrganizationBase.cpp" />
+    <ClCompile Include="..\project\business\SystemSettings\ProcessManagement.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\SystemSettings\Resource.select.data.config.cpp">
diff --git a/jrj/project/business/SystemSettings/BugMaint.Developer.hxsoft.cpp b/jrj/project/business/SystemSettings/BugMaint.Developer.hxsoft.cpp
new file mode 100644
index 0000000..ec10349
--- /dev/null
+++ b/jrj/project/business/SystemSettings/BugMaint.Developer.hxsoft.cpp
@@ -0,0 +1,369 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) BugMaintWin :  public xframe
+	{
+	public:
+		xdwtable dw_base;
+		xnode	m_agentNode;	//Agent Condition
+
+		xstring m_EntityID;
+		xstring m_EntityType;
+		xstring m_EntityConnect;
+		xstring m_ConnectID;
+
+		xcontrol m_Edit;
+		htmlctrl m_Html;
+		xcombobox m_cb;
+	public:
+		BugMaintWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static BugMaintWin* CreateInstance(void* implPtr, void* hWnd)
+		{
+			BugMaintWin* pWin = new BugMaintWin(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)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			//SetAgent();
+			return 1;
+		}
+
+		int OnSave()
+		{
+			xaserverarg arg ;
+				
+			
+			xml xbase ;
+			
+			dw_base.AcceptText();
+			dw_base.DwUpdateAllTo(xbase);
+			
+			arg.AddArg(L"content",xbase.xml());
+			
+			if(getUrl(L"/workflow/action/BugList/bill.update",arg.GetString(),xbase) == 1)
+			{
+				dw_base.ResetUpdateStatus();
+				alert(L"保存成功!");
+				m_EntityID = dw_base.GetGuid(1);
+			
+				return 1;
+			}
+			else
+			{
+				alert(L"添加失败!");
+				return -1;
+			}
+			return 1;
+		}
+				
+		int AppendItem(xml x,KXMLDOMElement r,xstring name, xstring value)
+		{
+			KXMLDOMElement e = x.createElement(name);
+			e.text() = value;
+			r.appendChild(e);
+			return 1;
+		}
+
+		int Init()
+		{
+			if(m_EntityID == L"") return -1;
+				
+			xml x ;
+			
+			xaserverarg arg ;
+				
+			arg.AddArg(L"EntityID",m_EntityID);
+			arg.AddArg(L"EntityType",m_EntityType);
+			arg.AddArg(L"EntityConnect",m_EntityConnect);
+			if(xurl::get(L"/sale/data/Commentary/entity/notelist",arg.GetString(),x) == 1)
+			{
+				m_Html.SetContent(x.xml());
+				m_Html.Redraw();
+			}
+			return 1;
+		}
+
+		int showAtt()
+		{
+			xnode anode =GetAgentNode(L"att");
+			int s = m_cb.GetCount();
+			xml x ;
+			
+			x.loadXML(L"<vbox/>");
+			KXMLDOMElement ele = x.documentElement();
+			int i=0;
+			for(i=0; i<s; i++)
+			{
+				xstring tmp = m_cb.GetLBText(i);
+				KXMLDOMElement e = x.createElement(L"hbox");
+				e.setAttribute(L"height", L"20");
+				KXMLDOMElement l = x.createElement(L"xlabel");
+				l.setAttribute(L"caption", L""+tmp);
+				KXMLDOMElement b = x.createElement(L"xtoolbutton");
+				b.setAttribute(L"width", L"18");
+				b.setAttribute(L"name", L"att_"+i.toString());
+				b.setAttribute(L"image", L"1,5");
+				e.appendChild(l);
+				e.appendChild(b);
+				ele.appendChild(e);
+				KXMLDOMElement g = x.createElement(L"xlabel");
+				g.setAttribute(L"height", L"2");
+				g.setAttribute(L"style", L"background-color:#000000");
+				ele.appendChild(g);
+			}
+			SetAgentNode (anode,ele.xml());
+			anode.SetWidthHeight(-1, i * 20 + 1);
+			return 1;
+		}
+			
+		int addAtt()
+		{
+			xstring guid = publiccode::GetGuid();
+			xstring str = guid.left(2);
+			xstring ret = xaserver::UploadFile(L"attachment"+str, guid+L".jpg".GetHWND(),L"",false);
+			int nIndex = m_cb.AddItem(ret, guid+L".jpg");
+			showAtt();
+			return 1;
+		}
+
+		int delAtt(xstring no)
+		{
+			int nIndex = no.toInt();
+			m_cb.DeleteItem(nIndex);
+			showAtt();
+			return 1;
+		}
+		
+		KXMLDOMElement getAtt()
+		{
+			int s = m_cb.GetCount();
+			xml x ;
+			
+			x.loadXML(L"<Attachment/>");
+			KXMLDOMElement ele = x.documentElement();
+			int i=0;
+			for(i=0; i<s; i++)
+			{
+				xstring tmp = m_cb.GetLBText( i);
+				xstring tmp2 = m_cb.GetItemData(i);
+				KXMLDOMElement e = x.createElement(L"item");
+				e.setAttribute(L"name", L""+tmp);
+				e.setAttribute(L"file", L""+tmp2);
+				ele.appendChild(e);
+			}
+			return ele;
+		}
+
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmOK")
+			{
+			
+				if(m_EntityID == L"") return 1;
+				
+			  //trace(L"id:"+m_EntityID);
+			
+				xml x ;
+				
+				xaserverarg arg ;
+					
+				xstring value = m_Edit.GetText();
+				if(value == L"")
+				{
+					alert(L"请填写批注!");
+					return 1;
+				}
+			
+				x.loadXML(L"<Commentary update.new='1' update.modify='1'/>");
+				KXMLDOMElement ele = x.documentElement();
+				AppendItem(x, ele, L"CommentaryID",  publiccode::GetGuid());
+				AppendItem(x, ele, L"EntityID", m_EntityID);
+				AppendItem(x, ele, L"EntityType", m_EntityType);
+				AppendItem(x, ele, L"Remark", value);
+				AppendItem(x, ele, L"ParentConnect", m_EntityConnect);
+				AppendItem(x, ele, L"ParentCommentaryID", m_ConnectID);
+				AppendItem(x, ele, L"CreatorID", xaserver::GetUserId());
+				ele.appendChild(getAtt());
+
+				arg.AddArg(L"content", L"<root>"+(xstring)ele.xml()+L"</root>");
+				
+				if(getUrl(L"/workflow/action/Commentary/bill.update",arg.GetString(),x) == 1)
+				{
+					m_Edit.SetText(L"");
+					m_cb.ResetContent();
+					Init();
+					showAtt();
+					return 1;
+				}
+				else
+				{
+					alert(L"添加失败!");
+					return -1;
+				}
+			}
+			else if(comdid==L"xmAtt")
+			{
+				addAtt();
+			}
+			else if(comdid.left(4)==L"att_")
+			{
+				delAtt(comdid.right(comdid.length() - 4));
+			}
+			else if(comdid==L"xmClose")
+			{
+				CloseWindow();
+				return 1;
+			}
+			else if(comdid==L"xmSave")
+			{
+				return  OnSave();
+			}
+			return 0;
+		}
+		
+		int OnHtmlClick(TEvent* evt, int p)
+		{
+			ref  HTMLNMHDR p = evt.pnmh;
+			const xstring d = m_Html.GetData(p.object);	
+			if(d == L"") return -1;
+			xstring file = d.mid(0, d.find(L"|##@@|",0));
+			xstring name = d.mid(d.find(L"|##@@|",0)+6, d.length());
+			
+			
+			xaserver::CreateDirectory(L"C:/Temp");
+			xstring str = file.left(2);
+			xstring ext = L"";
+			if(name.find(L".")>=0) ext = name.mid(name.find(L"."),name.length());
+			xstring sfile = file.left(file.length() - 4);
+			//trace(L"--"+ext +L" " + L"/business/attachment/"+str+L"/"+ file);
+			//int openRet = xaserver::DownLoadFile(GetServerUrl(),L"/business/attachment/"+str+L"/"+ file,name,L"C:/Temp/"+name);
+			int openRet = xaserver::DownLoadFile(GetServerUrl(),L"/business/attachment/"+str+L"/"+ file,L"",L"C:/Temp/"+sfile+ext);
+			if(openRet < 0)
+			{
+				alert(L"文件打开失败1!");
+				return -1;
+			}
+			//openRet = ShellExecute(0,L"open",L"C:/Temp/"+name,L"",L"",5);	
+			openRet = ShellExecute(0,L"open",L"C:/Temp/"+sfile+ext,L"",L"",5);	
+			if(openRet < 32)
+			{
+				alert(L"文件打开失败2!");
+				return -1;
+			}
+			
+			return -1;
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&BugMaintWin::OnXCommand);
+			AttachEvent(L"note",L"HTC_OBJECTCLICKED", (FEvent)&BugMaintWin::OnHtmlClick);
+			return 1;
+		}
+		
+		/*
+		int  OnRetrieve()
+		{
+			xml x ;
+			
+			xaserverarg arg ;
+				
+			arg.AddArg(L"xxx",L"xxx");
+			if (getUrl(L"",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				//dw_list.Retrieve(x);
+				//dw_list.Redraw();
+			}
+			return 1;
+		}
+		*/
+		
+		int onload()
+		{
+			SetArg();
+			dw_base = GetControl(L"dw_base");
+			dw_base.openUrl(L"/sale/view/Developer/bug/maint");
+			dw_base.SetColHeaderHeight(0);
+			dw_base.SetRowSelectorWidth(0);
+			dw_base.SetHScrollState(false);
+			dw_base.SetVScrollState(false);
+		
+			OnAttachEvent();	
+			
+			m_Edit = GetControl(L"Txt");
+			
+			m_Html = GetControl(L"note");
+			
+			m_cb = GetControl(L"attlist");
+			
+			m_EntityID = L"";
+			
+			m_EntityType = L"BugList";
+			m_EntityConnect = L"";
+			m_ConnectID = L"";
+			
+			xstring Reciever = publiccode::GetUser().name;
+			dw_base.SetItemString(1,L"Reciever",Reciever);
+			
+			if(GetWinParam())
+			{
+				xaserverarg arg=GetArg() ;
+				
+				m_EntityID = arg.GetArgString(L"EntityID");
+				m_EntityType = arg.GetArgString(L"m_EntityType");
+				m_EntityConnect = arg.GetArgString(L"m_EntityConnect");
+			}
+			Init();
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			//SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Buglist.Developer.hxsoft.cpp b/jrj/project/business/SystemSettings/Buglist.Developer.hxsoft.cpp
new file mode 100644
index 0000000..5ce192c
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Buglist.Developer.hxsoft.cpp
@@ -0,0 +1,332 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) BugListWin : public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+
+		xstring m_EntityID;
+		xstring m_EntityType;
+
+		htmlctrl m_Html;
+		xcontrol m_Edit;
+		xcombobox m_cb;
+	public:
+		BugListWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static BugListWin* CreateInstance(void* implPtr, void* hWnd)
+		{
+			BugListWin* pWin = new BugListWin(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)
+				{
+					xstring s = agent.xml();
+					m_agentNode = SetAgentNode(anode, s);
+				}
+			}
+			return 1;
+		}
+
+		int OnRowChanged(TEvent* evt, int p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			int row = hdr.row;
+
+			m_EntityID = dw_list.GetGuid(row);
+			RetrieveNote(row);
+
+			return 1;
+		}
+
+		static stdcall int GetModuleFileName(int hModule, xstring lpFileName, int nSize) native from "kernel32.dll" alias "GetModuleFileNameW";
+		static stdcall int PathRemoveFileSpec(xstring lpFileName) native from "shlwapi.dll" alias "PathRemoveFileSpecW";
+
+		xstring GetModulePath()
+		{
+			xstring str = L"";
+			str = str.space(255);
+			GetModuleFileName(0, str, 250);
+			PathRemoveFileSpec(str);
+			return str;
+		}
+
+		xstring GetModuleTmpPath()
+		{
+			xstring str = L"";
+			str = str.space(255);
+			GetModuleFileName(0, str, 250);
+			PathRemoveFileSpec(str);
+			xstring tmp = str + L"\\Temp";
+			xaserver::CreateDirectory(tmp);
+			return tmp;
+		}
+
+		int RetrieveNote(int row)
+		{
+			if (row == 0)	row = dw_list.GetRow();
+			if (row < 1) return 1;
+
+			xstring EntityID = dw_list.GetGuid(row);
+			xml x ;
+		
+			xaserverarg arg ;
+			
+			arg.AddArg(L"EntityID", EntityID);
+			if (xurl::get(L"/sale/data/Commentary/entity/notelist", arg.GetString(), x) == 1)
+			{
+				m_Html.SetContent(x.xml());
+				m_Html.Redraw();
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if (comdid == L"xmAdd")
+			{
+				OpenWindow(L"dev:xpage[BugMaint.Developer.hxsoft.vx]", 0);
+				return 1;
+			}
+			else if (comdid == L"xmRetrieve")
+			{
+				OnRetrieve();
+				return 1;
+			}
+			else if (comdid == L"xmAtt")
+			{
+				addAtt();
+			}
+			else if (comdid == L"xmMsg")
+			{
+				OnAddItem();
+				return 1;
+			}
+			else if (comdid == L"xmDelete")
+			{
+				OnDelete();
+				return 1;
+			}
+			return 0;
+		}
+
+		int OnDelete()
+		{
+			int row = dw_list.GetRow();
+			if (row < 1)
+				return 1;
+			KXMLDOMElement ele = dw_list.GetRowElement(row);
+			xstring BugListID = ele.selectSingleNode(L"BugListID").text();
+			xml x ;
+			
+			xaserverarg arg ;
+			
+			arg.AddArg(L"BugListID", BugListID);
+			if (getUrl(L"/sale/data/BugList/delete/buglist", arg.GetString(), x) != 1)
+			{
+				xstring error = x.text();
+				alert(L"err:" + error);
+				return 1;
+			}
+			alert(x.text());
+			OnRetrieve();
+			return 1;
+		}
+
+		int addAtt()
+		{
+			xstring guid = publiccode::GetGuid();
+			xstring str = guid.left(2);
+			xstring ret = xaserver::UploadFile(L"attachment" + str, guid + L".jpg", GetHWND(), L"", false);
+			OnAddItem(ret, guid + L".jpg");
+			return 1;
+		}
+
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&BugListWin::OnXCommand);
+			//获取焦点事件,用于重置工具条/sale/data/buglist/list/buglist"
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&BugListWin::OnSetFocus);
+			AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&BugListWin::OnRowChanged);//绑定行更改触发事件OnRowChanged
+			AttachEvent(L"note", L"HTC_OBJECTCLICKED", (FEvent)&BugListWin::OnHtmlClick);
+			return 1;
+		}
+
+		int OnHtmlClick(TEvent* evt, int p)
+		{
+			ref  HTMLNMHDR p = evt.pnmh;
+			const xstring d = m_Html.GetData(p.object);
+			if (d == L"") return -1;
+			xstring file = d.mid(0, d.find(L"|##@@|", 0));
+			xstring name = d.mid(d.find(L"|##@@|", 0) + 6, d.length());
+
+			xstring str = file.left(2);
+			xstring ext = L"";
+			if (name.find(L".") >= 0) ext = name.mid(name.find(L"."), name.length());
+			xstring sfile = file.left(file.length() - 4);
+			int openRet = xaserver::DownLoadFile(GetServerUrl(), L"/business/attachment/" + str + L"/" + file, L"", GetModuleTmpPath() + L"\\" + sfile + ext);
+			if (openRet < 0)
+			{
+				alert(L"文件打开失败1!");
+				return -1;
+			}
+			openRet = ShellExecute(0, L"open", GetModuleTmpPath() + L"\\" + sfile + ext, L"", L"", 5);
+			if (openRet < 32)
+			{
+				alert(L"文件打开失败2!");
+				return -1;
+			}
+
+			return -1;
+		}
+
+		int AppendItem(xml x, KXMLDOMElement r, xstring name, xstring value)
+		{
+			KXMLDOMElement e = x.createElement(name);
+			e.text() = value;
+			r.appendChild(e);
+			return 1;
+		}
+
+		KXMLDOMElement getAtt(xstring source = L"", xstring file = L"")
+		{
+			xml x ;
+			
+			x.loadXML(L"<Attachment/>");
+			KXMLDOMElement ele = x.documentElement();
+			KXMLDOMElement e = x.createElement(L"item");
+			e.setAttribute(L"name", source);
+			e.setAttribute(L"file", file);
+			ele.appendChild(e);
+
+			return ele;
+		}
+
+		int OnAddItem(xstring source = L"", xstring file = L"")
+		{
+
+			xml x ;
+			
+			xaserverarg arg ;
+			
+			xstring value = m_Edit.GetText();
+			if (value == L"")
+			{
+				if (source == L"")
+				{
+					alert(L"请填写批注!");
+					return 1;
+				}
+			}
+
+			x.loadXML(L"<Commentary update.new='1' update.modify='1'/>");
+			KXMLDOMElement ele = x.documentElement();
+			AppendItem(x, ele, L"CommentaryID", publiccode::GetGuid());
+			AppendItem(x, ele, L"EntityID", m_EntityID);
+			AppendItem(x, ele, L"EntityType", m_EntityType);
+			AppendItem(x, ele, L"Remark", value);
+			//AppendItem(x, ele, L"ParentConnect", m_EntityConnect);
+			//AppendItem(x, ele, L"ParentCommentaryID", m_ConnectID);
+			AppendItem(x, ele, L"CreatorID", xaserver::GetUserId());
+			ele.appendChild(getAtt(source, file));
+
+			arg.AddArg(L"content", L"<root>" + (xstring)ele.xml() + L"</root>");
+
+			if (getUrl(L"/workflow/action/Commentary/bill.update", arg.GetString(), x) == 1)
+			{
+				m_Edit.SetText(L"");
+				RetrieveNote(0);
+				return 1;
+			}
+			else
+			{
+				alert(L"添加失败!");
+				return -1;
+			}
+		}
+
+		int  OnRetrieve()
+		{
+			xml x ;
+			
+			xaserverarg arg ;
+			
+			if (getUrl(L"/sale/data/BugList/list/buglist", arg.GetString(), x) != 1)
+			{
+				trace(x.text());
+				return -1;
+			}
+			else
+			{
+				dw_list.Retrieve(x);
+				dw_list.SetReadOnly(true);
+				dw_list.Redraw();
+				RetrieveNote(0);
+			}
+
+			return 1;
+		}
+
+
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/Developer/bug/list");
+
+			m_Html = GetControl(L"note");
+			m_Edit = GetControl(L"Txt");
+
+			m_EntityID = L"";
+			m_EntityType = L"BugList";
+
+			dw_list.SetColumnState(L"BugListID", false);
+			OnRetrieve();
+			OnAttachEvent();
+
+			return 1;
+		}
+
+		int onloaded()
+		{
+			SetAgent();
+
+			return 1;
+		}
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Buglist.Developer.hxsoft_A.cpp b/jrj/project/business/SystemSettings/Buglist.Developer.hxsoft_A.cpp
deleted file mode 100644
index ca9b3d6..0000000
--- a/jrj/project/business/SystemSettings/Buglist.Developer.hxsoft_A.cpp
+++ /dev/null
@@ -1,1576 +0,0 @@
-#include <wobject/xstring.hpp>
-#include <wobject/xdouble.hpp>
-#include <xcontrol/xtreeview.hpp>
-#include <xcontrol/xdwgrid.hpp>
-#include <xcontrol/ximageview.hpp>
-
-#include "vbusiness/vframe/maint.vframe.vbusiness.hpp"
-#include "viewobject/view.base.hpp"
-#include "viewobject/saleorder.view.hpp"
-#include "viewobject/quote.view.hpp"
-#include "viewobject/shoppingcart.view.hpp"
-#include "viewobject/productLibrary.view.hpp"
-#include "xcontrol/xcheckbox.hpp"
-#include "xcontrol/xshtml.hpp"
-
-class __declspec(dllexport) ProductLibrary4Win : public xframe
-{
-public:
-	//产品库产品列表
-	xdwgrid	dw_list;
-	//购物车产品列表
-	xdwgrid	dwc_list;
-
-	//产品缓存对象
-	//xdataset g_xdoc_product;
-	//xdataset g_xdoc_shoppingcart;
-
-	xcombobox  cbx_goodscar;
-	//是否多选
-
-	xnode	m_agentNode;	//Agent Condition
-	xtreeview tv_folder;
-	xstring 	agentFor;
-	KXMLDOMElement imageElement;
-	xstring m_customer;
-
-public:
-	ProductLibrary4Win(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
-public:
-	static ProductLibrary4Win* CreateInstance(void* implPtr, void* hWnd)
-	{
-		ProductLibrary4Win* pWin = new ProductLibrary4Win(implPtr, (HWND)hWnd);
-		return pWin;
-	}
-public:
-	int FillGoodsCarList()
-	{
-		xcombobox xc = GetControl(L"frame:cbx_goodscar");
-		if (!xc) return 0;
-		xml  x = ShoppingCartView::GetRoleList();
-		if (!x) return 0;
-		xc.SetText(L"==选择购物车==L");
-
-		KXMLDOMNodeList nlist = x.selectNodes(L"//item");
-		int len = nlist.length();
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			xstring name = e.getAttribute(L"name");
-			xc.AddItem( name);
-		}
-		return 1;
-	}
-
-	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"[@for='" + agentFor + L"']/*");
-			if (agent)
-			{
-				bstring s = agent.xml();
-				m_agentNode = SetAgentNode(anode, s);
-				//FillGoodsCarList();
-			}
-		}
-		return 1;
-	}
-
-	//焦点激活处理函数
-	int OnSetFocus(TEvent * evt, int param)
-	{
-		//重置工具条
-		SetAgent();
-		return 1;
-	}
-
-	KXMLDOMElement OnGetCarListRowElement(int row = 0)
-	{
-		if (row < 1) row = dwc_list.GetRow();
-		if (row < 1 || row > dwc_list.GetRowCount()) return KXMLDOMElement();
-		KXMLDOMElement e = dw_list.GetRowElement(row);
-		return e;
-	}
-
-	int OnShowImage(xstring skuid)
-	{
-		ximageview im = GetControl(L"im1");
-		//im.RemoveImage();
-		im.Reset();
-
-		xml xp ;
-		xaserverarg arg_pic;
-		arg_pic.AddArg(L"SKUID", skuid);
-		if (xurl::get(L"/sale/data/ProductLibrary3/pref/picture/imagelistSKU", arg_pic.GetString(), xp) != 1)
-		{
-			trace(xstring(L"xxx")+xp.xml());
-		}
-		else
-		{
-			//trace(skuid+L" "+xp.GetXml());
-			imageElement = xp.documentElement();
-			KXMLDOMNodeList  nlistp = xp.selectNodes(L"ImageList/image");
-			int lenp = nlistp.length();
-			for (int ip = 0; ip < lenp; ip++)
-			{
-				KXMLDOMElement xitem = nlistp.item(ip);
-				xstring picname = xitem.selectSingleNode(L"PicPath").text();
-				xstring goodno = xitem.selectSingleNode(L"GoodsNo").text();
-				if (picname == L"/business/products/Thumbs//")
-					picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg";
-				im.AddImages(picname, (LPTSTR)L"");
-			}
-			im.Redraw();
-			//win32::SendMessage(im.GetId(),0x000f,0,1);
-			//win32::InvalidateRect(im.GetId(),cast(0 as ref xrect),true);
-		}
-		return 1;
-	}
-
-	int OnShowImage(xstring skuid, xstring customerItemNo)
-	{
-		ximageview im = GetControl(L"im1");
-		//im.RemoveImage();
-		im.Reset();
-
-		xml xp ;
-		xaserverarg arg_pic ;
-		arg_pic.AddArg(L"SKUID", skuid);
-		arg_pic.AddArg(L"CustomerID", m_customer);
-		arg_pic.AddArg(L"CustomerItemNo", customerItemNo);
-
-		if (xurl::get(L"/sale/data/ProductLibrary3/pref/picture/customer/imagelistSKU", arg_pic.GetString(), xp) != 1)
-		{
-			trace(L"error:" + xstring(xp.xml(),true));
-		}
-		else
-		{
-			imageElement = xp.documentElement();
-			KXMLDOMNodeList  nlistp = xp.selectNodes(L"ImageList/image");
-			int lenp = nlistp.length();
-			for (int ip = 0; ip < lenp; ip++)
-			{
-				KXMLDOMElement xitem = nlistp.item(ip);
-				bstring picname = xitem.selectSingleNode(L"PicPath").text();
-				bstring goodno = xitem.selectSingleNode(L"GoodsNo").text();
-				if (picname == L"/business/products/Thumbs//")
-					picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg";
-				im.AddImages(picname, L"");
-			}
-			im.Redraw();
-		}
-		return 1;
-	}
-
-	int OnRowChanged(TEvent * evt, int p)
-	{
-		DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
-		int row = hdr.row;
-
-		xshtml xs = GetControl(L"html_detail");
-		xstring html = makeHtml(row);
-		xs.SetContent(html);
-		xs.Redraw();
-
-		xstring id = dw_list.GetGuid(row);
-		OnShowImage(id);
-		trace(id);
-		return 1;
-	}
-
-	int OnGoodsCarRowChanged(TEvent * evt, int p)
-	{
-		DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
-		int row = hdr.row;
-
-		xshtml xs = GetControl(L"html_detail");
-		xstring html = makeGoodscarHtml(row);
-		xs.SetContent(html);
-		xs.Redraw();
-		if (m_customer)
-		{
-			xstring id = dw_list.GetItemString(row, L"SKUID");
-			xstring customerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
-			OnShowImage(id, customerItemNo);
-		}
-
-		return 1;
-	}
-
-	int DeleteRow(int row)
-	{
-		int IDOK = 1;
-		int MB_OKCANCEL = 1;
-		int MB_ICONQUESTION = 32;
-		if (MessageBoxW(GetHWND(), L"确认删除指定的项,删除后将不能恢复?", L"提示", MB_OKCANCEL | MB_ICONQUESTION) != IDOK) return 1;
-		xstring id = dw_list.GetGuid(row);
-
-		if (ProductLibraryView::DeleteItem(id) == 1)	dw_list.DeleteRow(0);
-		return 1;
-	}
-
-	int SetSelectState(xdwgrid dw_obj, int state)
-	{
-		if (state == 1)
-		{
-			dw_obj.SetSelectionMode(3);
-		}
-		else if (state == -1)
-		{
-			dw_obj.SelectRow(0, false);
-			dw_obj.SetSelectionMode(0);
-		}
-		return 1;
-	}
-	int OnCkbCLick(TEvent * evt, int p)
-	{
-		xcheckbox cbx_1 = GetControl(L"frame:cbx1");
-		int state = cbx_1.GetCheck();
-		return SetSelectState(dw_list, state);
-	}
-
-	int OnCkbCLick2(TEvent * evt, int p)
-	{
-		xcheckbox cbx_2 = GetControl(L"frame:cbx2");
-		int state = cbx_2.GetCheck();
-		return SetSelectState(dwc_list, state);
-	}
-
-	xml  GetGoodsPropList(xstring guid)
-	{
-		xml x;
-		xaserverarg arg;
-		arg.AddArg(L"guid", guid);
-		if (xurl::get(L"/sale/data/SO/goods/goodsprop/list", arg.GetString(), x) != 1)
-		{
-			bstring error = x.text();
-			alert(error);
-		}
-		return x;
-	}
-
-	xml  GetGoodsPropListEx(xstring guid)
-	{
-		xml x;
-		xstring fields = L"<data>";
-		//fields +=L"<field name='HighestPrice' label='最高价'/>";
-		//fields +=L"<field name='LowestPrice' label='最低价'/>";
-
-		//fields +=L"<field name='BulkPrice' label='散货价'/>";
-		//fields +=L"<field name='CardPrice' label='纸卡价'/>";
-		//fields +=L"<field name='BuyPrice' label='采购价'/>";
-		//fields +=L"<field name='SupplierID' label='货源'/>";
-
-		fields += L"<field name='Packing' label='包装方式'/>";
-		fields += L"<field name='PackingRate' label='每箱数量'/>";
-		fields += L"<field name='VolumeDesc' label='包装尺码'/>";
-		fields += L"<field name='GWPerPkg' label='毛重'/>";
-		fields += L"<field name='NWPerPkg' label='净重'/>";
-		//fields +=L"<field name='DeveloperID' label='开发人员'/>";
-		fields += L"<field name='AttributeValue_1' label='产品属性'/>";
-		//fields +=L"<field name='Remark' label='备注'/>";
-
-		fields += L"</data>";
-		x.loadXML(fields);
-
-		return x;
-	}
-
-	xstring makeHtml(int row)
-	{
-		xstring id = dw_list.GetItemString(row, L"@guid");
-		xml x = GetGoodsPropList(id);
-		xml x1 = GetGoodsPropListEx(id);
-
-		xstring html = L"<html><style> .text{ font-weight:400} .label { font-weight:400;}</style><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'>";
-		html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >编号:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"SKUNo") +
-			L"</span> <span style='font-weight:700;width:50;font-size:10pt' >类项:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"RefNo") +
-			L"</span></div>";
-		html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >公司型号:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"GoodsNo") +
-			L"</span></div>";
-		html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >品名:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CName") +
-			L"</span></div>";
-		if (dw_list.GetItemString(row, L"CSpec") != L"")
-			html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >规格:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CSpec") +
-				L"</span></div>";
-
-		KXMLDOMNodeList fieldsEx = x1.selectNodes(L"data/field");
-		xstring ls_detail = L"";
-		xstring ls_item = L"";
-		xstring name;
-		xstring label;
-		int len = fieldsEx.length();
-		int i = 0;
-
-		for (i = 0; i < len; true)
-		{
-			int cnt = 0;
-			ls_item = L"";
-			while (cnt < 2)
-			{
-				name = fieldsEx.item(i).selectSingleNode(L"@name").text();
-				label = fieldsEx.item(i).selectSingleNode(L"@label").text();
-				ls_item += L"<td>" + label + L"</td>" + L"<td style='text-align:center'>" + dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
-				cnt++;
-				i++;
-				if (i == len)break;
-			}
-			ls_detail += L"<tr>" + ls_item + L"</tr>";
-		}
-		html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" +
-			+ L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>"
-			+ ls_detail
-			+ L"</table>"
-			+ L"</div>";
-
-		xstring ls_star = L"";
-		KXMLDOMNodeList fields = x.selectNodes(L"data/field");
-		len = fields.length();
-
-		ls_detail = L"";
-		if (len > 0)
-			html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >技术要求:</span></div>";
-		for (i = 0; i < len; true)
-		{
-			ls_item = L"";
-
-			int count = 0;
-			while (count < 2)
-			{
-				name = fields.item(i).selectSingleNode(L"@name").text();
-				label = fields.item(i).selectSingleNode(L"@label").text();
-				if (name == L"QualityTerm" || name == L"PackTerm" || label == L"质量" || label == L"包装质量" || label == L"技术要求")
-				{
-					i++;
-					if (i >= len)count = 2;
-					continue;
-				}
-				else if (dw_list.GetItemString( row, (LPCTSTR)name) == L"")
-				{
-					KXMLDOMNodeList options = fields.item(i).selectNodes(L"item");
-					int tlen = options.length();
-					xstring terms = L"";
-					for (int k = 0; k < tlen; k++)
-					{
-						if (xstring(options.item(k).text()))
-						{
-							if (k > 0) terms += L", L";
-							terms += (xstring)L"[" + options.item(k).text() + L"]";
-						}
-					}
-					ls_star += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >" + label + L"*:</span><span  style='width:90;font-size:10pt'>" + terms + L"</span></div>";
-				}
-				else
-				{
-					ls_item = L"<td>" + label + L"</td>" + L"<td>" + dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
-					count++;
-				}
-				i++;
-				if (i >= len)count = 2;
-			}
-			ls_item = L"<tr>" + ls_item + L"</tr>";
-			ls_detail += ls_item;
-		}
-
-		html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" +
-			+L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>"
-			+ ls_detail
-			+ L"</table>"
-			+ L"</div>";
-		if (dw_list.GetItemString(row, L"QualityTerm") != L"")
-		{
-			html += L"<div style='height:12px'/>";
-			html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >质量:</span></div>";
-			html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt'  >" + dw_list.GetItemString(row, L"QualityTerm") + L"</span></div>";
-		}
-
-		if (dw_list.GetItemString(row, L"PackTerm") != L"")
-		{
-			html += L"<div style='height:12px'/>";
-			html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >包装质量:</span></div>";
-			html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString(row, L"PackTerm") + L"</span></div>";
-		}
-
-		if (dw_list.GetItemString( row, L"Remark") != L"")
-		{
-			//html +=  L"<div style='height:12px'/>";
-			html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >备注:</span></div>";
-			html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString( row, L"Remark") + L"</span></div>";
-		}
-
-		html += L"<div style='height:24px'/>";
-
-		//星标项
-		html += ls_star;
-
-		//显示图片	
-		/*
-		if (id != L"")
-		{
-			xml xp=new xml;
-			xp.setNativePointer(xml::CreateInstance());
-			xaserverarg arg_pic=new xaserverarg;
-			arg_pic.setNativePointer(arg_pic.CreateInstance());
-			arg_pic.AddArg(L"SKUID",id);
-			if(url::get(L"/sale/data/ProductLibrary3/pref/picture/imagelistSKU",arg_pic.GetString(),xp)!=1)
-			{
-				trace(L"xxx",xp.GetXml());
-			}else {
-				html +=  L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >图片:</span>"	;
-				KXMLDOMElement ep=  xp.selectSingleNode(L"ImageList");
-				if (ep)
-				{
-					if (ep.SelectNodes(L"image")){
-						KXMLDOMNodeList  nlistp = ep.SelectNodes(L"image");
-						int ip=0;
-						int lenp = nlistp.length;
-						for(ip=0;ip<lenp;ip++)
-						{
-							KXMLDOMElement xitemp = nlistp.item(ip);
-							xstring filename = xitemp.selectSingleNode(L"PicPath").text;
-							//trace(filename);
-							html +=  L"<control visible='layer' controlclass='ximage'  data='' src='http://192.168.7.241:7001" +  filename +L"'/>";
-						}
-					}
-				}
-				html +=  L"</div>";
-			}
-		}else {
-			xstring picname = L"1FA9E331-F95C-4E51-B80C-73FB9B911D8D.jpg";//dw_list.GetItemString(row,L"ImgName"); //ItemID+L".jpg";
-			xstring str = picname.mid(0,2);
-			str = str.upper();
-			xstring serversrc =L"http://192.168.7.241:1001/business/products/chanpin/"+str+L"/"+picname;
-			html +=  L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >图片:</span>";
-			html +=  L"<control visible='layer' controlclass='ximage'  data='' src='"+ serversrc +L"'/></div>";
-		}
-		*/
-		html += L"</body></html>";
-		//trace(html);
-		return html;
-	}
-
-	xstring makeGoodscarHtml(int row)
-	{
-		xstring No = dwc_list.GetItemString(row, L"RefNo");//获取属性值id					
-		xml x = GetGoodsPropList(No);
-
-		xstring html = L"<html><style> .text{ font-weight:400} .label { font-weight:400;}</style><body style='margin:2;background-color1:#ccdccc none #f0f0f0 none'>";
-		html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >编号:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"No") +
-			L"</span></div>";
-		html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >品名:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"CName") +
-			L"</span></div>";
-		html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >规格:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"CSpec") +
-			L"</span></div>";
-
-		KXMLDOMNodeList fields = x.selectNodes(L"data/field");
-		int len = fields.length();
-		html += (xstring)L"<table>" +
-			L"<colgroup span='1' width='80'/>" +
-			L"<colgroup span='1' width='120'/>" +
-			L"<colgroup span='1' width='420'/>";
-		html += L"<tr>";
-		html += L"<td style='text-align:center'>编号</td><td style='text-align:center'>项目</td><td style='text-align:center'>内容</td>";
-		html += L"</tr>";
-		for (int i = 0; i < len; i++)
-		{
-			xstring name = fields.item(i).selectSingleNode(L"@name").text();
-			xstring label = fields.item(i).selectSingleNode(L"@label").text();
-			html += L"<tr>";
-			if (i == 0)
-				html += L"<td rowspan='" + xstring(len) + L"'>" + No + L"</td><td >" + label + L"</td><td >" + L"</td>";
-			else
-				html += L"<td >" + label + L"</td><td >" +dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
-			html += L"</tr>";
-		}
-
-		html += L"<tr>";
-		html += L"<td rowspan='3'>" +dw_list.GetItemString( row, L"PackCode") + L"</td><td >包装方式</td><td >" +
-			dw_list.GetItemString(row, L"CPack") + L"</td>";
-		html += L"</tr>";
-		html += L"<tr height='48'>";
-		html += L"<td >包装要求</td><td >" +dw_list.GetItemString( row, L"PackQualityTerm") + L"</td>";
-		html += L"</tr>";
-		html += L"<tr>";
-		html += L"<td >侧唛</td><td ></td>";
-		html += L"</tr>";
-
-		html += L"<tr height='72'>";
-		html += L"<td>" +dw_list.GetItemString( row, L"QualityCode") + L"</td><td >质量要求</td><td >" +
-			dw_list.GetItemString(row, L"QualityTerm") + L"</td>";
-		html += L"</tr>";
-
-		html += L"</table>";
-
-		html += L"</body></html>";
-		return html;
-
-	}
-
-	int CarGoodsDelete()
-	{
-		return 1;
-	}
-
-	xstring Up(xstring name) {
-		xstring str = name.mid(0, 2);
-		str = str.toUpper();
-		return xaserver::UploadFile(L"product" + str, name + L".jpg", GetHWND(), L"", false);
-	}
-
-	int OnAddImage() {
-		if (m_customer != L"") return OnAddImageEx();
-		int row = dw_list.GetNextSelectRow(1);
-		if (row < 1) row = dw_list.GetRow();
-		if (row < 1 || row > dw_list.GetRowCount()) return 0;
-
-		KXMLDOMElement e = dw_list.GetRowElement(row);
-		xstring skuid = dw_list.GetItemString( row, L"@guid");
-		xstring SKUNo = dw_list.GetItemString( row, L"SKUNo");
-		xstring id = ViewObject::GetGuid();
-		xstring ret1 = Up(id);
-		if (ret1 == L"-1") return -1;
-		if (ret1 == L"0")
-		{
-			alert(L"上传图片失败");
-			return -1;
-		}
-		xstring originfile = ret1;
-		xstring ext = originfile.right(7);
-		if (ext.find(L".") >= 0)
-			ext = ext.mid(ext.find(L".") + 1, 9999);
-		else
-			ext = L"jpg";
-
-		// 图片名加入数据库
-		xml x ;
-		x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
-			L"<ProductPictureID>" + id + L"</ProductPictureID>" +
-			L"<OriginFile>" + originfile + L"</OriginFile>" +
-			L"<FileExt>" + ext + L"</FileExt>" +
-			L"<SKUID>" + skuid + L"</SKUID>" +
-			L"<Name>[" + SKUNo.trim() + L"]</Name>" +
-			L"<FileName>" + id + L".jpg</FileName>" +
-			L"</Item>"
-		);
-
-		xaserverarg arg;
-		arg.AddArg(L"content", x.xml());
-		if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
-		{
-			alert(x.text());
-			return -1;
-		}
-		dw_list.SetItemString(row, L"pic", L"*");
-		dw_list.Redraw();
-		//刷新一下界面,显示图片
-		OnShowImage(skuid);
-		return 1;
-	}
-
-	int OnAddImageEx() {
-		int row = dwc_list.GetNextSelectRow(1);
-		if (row < 1) row = dwc_list.GetRow();
-		if (row < 1 || row > dwc_list.GetRowCount()) return 0;
-
-		KXMLDOMElement e = dw_list.GetRowElement( row);
-		xstring skuid =dw_list.GetItemString( row, L"SKUID");
-		xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
-		xstring CustomerID = m_customer;
-		xstring CustomerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
-		xstring id = ViewObject::GetGuid();
-		xstring ret1 = Up(id);
-		if (ret1 == L"-1") return -1;
-		if (ret1 == L"0")
-		{
-			alert(L"上传图片失败");
-			return -1;
-		}
-		xstring originfile = ret1;
-		xstring ext = originfile.right(7);
-		if (ext.find(L".") >= 0)
-			ext = ext.mid(ext.find(L".") + 1, 9999);
-		else
-			ext = L"jpg";
-
-		// 图片名加入数据库
-		xml x;
-		x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
-			L"<ProductPictureID>" + id + L"</ProductPictureID>" +
-			L"<OriginFile>" + originfile + L"</OriginFile>" +
-			L"<FileExt>" + ext + L"</FileExt>" +
-			L"<SKUID>" + skuid + L"</SKUID>" +
-			L"<CustomerItemNo>" + CustomerItemNo + L"</CustomerItemNo>" +
-			L"<CustomerID>" + CustomerID + L"</CustomerID>" +
-			L"<Name>[" + SKUNo.trim() + L"]</Name>" +
-			L"<FileName>" + id + L".jpg</FileName>" +
-			L"</Item>"
-		);
-
-		xaserverarg arg;
-		arg.AddArg(L"content", x.xml());
-		if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
-		{
-			alert(x.text());
-			return -1;
-		}
-		dwc_list.SetItemString(row, L"pic", L"*");
-		dwc_list.Redraw();
-		//刷新一下界面,显示图片
-		OnShowImage(skuid, CustomerItemNo);
-		return 1;
-	}
-
-	int OnDeleteImageEx()
-	{
-		int row = dwc_list.GetNextSelectRow(1);
-		if (row < 1) row = dwc_list.GetRow();
-		if (row < 1 || row > dwc_list.GetRowCount()) return 0;
-
-		ximageview im = GetControl(L"im1");
-		int index = im.GetSelectIndex();
-		int count = im.GetImageCount();
-
-		if (count < 1) return 1;
-
-		KXMLDOMNodeList images = imageElement.selectNodes(L"image");
-		int length = images.length();
-		if (length < index) return 1;
-
-		int MB_OKCANCEL = 0x00000001;
-		int IDOK = 1;
-		if (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
-
-		xstring id = images.item(index).selectSingleNode(L"@guid").text();
-
-		xml x ;
-		xaserverarg arg;
-		arg.setNativePointer(arg.CreateInstance());
-		xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
-		arg.AddArg(L"content", str);
-		if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
-		{
-			alert(x.text());
-			return -1;
-		}
-		if (count == 1)
-		{
-			dwc_list.SetItemString(row, L"pic", L"");
-			dwc_list.Redraw();
-		}
-
-		xstring skuid =dw_list.GetItemString( row, L"SKUID");
-		xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
-		xstring CustomerID = m_customer;
-		xstring CustomerItemNo =dw_list.GetItemString( row, L"CustomerItemNo");
-		OnShowImage(skuid, CustomerItemNo);
-
-		return 1;
-	}
-
-	int OnDeleteImage() {
-		if (m_customer != L"") return OnDeleteImageEx();
-
-		int row = dw_list.GetNextSelectRow(1);
-		if (row < 1) row = dw_list.GetRow();
-		if (row < 1 || row > dw_list.GetRowCount()) return 0;
-
-		ximageview im = GetControl(L"im1");
-		int index = im.GetSelectIndex();
-		int count = im.GetImageCount();
-
-		if (count < 1) return 1;
-
-		KXMLDOMNodeList images = imageElement.selectNodes(L"image");
-		int length = images.length();
-		if (length < index) return 1;
-
-		int MB_OKCANCEL = 0x00000001;
-		int IDOK = 1;
-		if (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
-
-		xstring id = images.item(index).selectSingleNode(L"@guid").text();
-
-		xml x;
-		xaserverarg arg;
-		xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
-		arg.AddArg(L"content", str);
-		if (xurl::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
-		{
-			alert(x.text());
-			return -1;
-		}
-		if (count == 1)
-		{
-			dw_list.SetItemString(row, L"pic", L"");
-			dw_list.Redraw();
-		}
-
-		KXMLDOMElement e1 = dw_list.GetRowElement(row);
-		xstring skuid = e1.getAttribute(L"guid");
-		OnShowImage(skuid);
-
-		return 1;
-	}
-	int OnPreviewImage()
-	{
-		int row = dw_list.GetNextSelectRow(1);
-		if (row < 1) row = dw_list.GetRow();
-		if (row < 1 || row > dw_list.GetRowCount()) return 0;
-		KXMLDOMElement e = dw_list.GetRowElement(row);
-		//KXMLDOMElement e = dw_list.GetRowElement(row);
-		//alert(e.xml);
-		xstring id = dw_list.GetItemString( row, L"@guid");
-		//alert(id);
-
-		HTREEITEM hItem = tv_folder.GetSelectedItem();
-		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
-		xstring categoryid = e1.selectSingleNode(L"@guid").text();
-		//alert(categoryid);
-		xaserverarg* arg = new xaserverarg;
-		arg->AddArg(L"SKUID", id);
-		arg->AddArg(L"CategoryID", categoryid);
-
-		OpenWindow(L"dev:xpage[PictureView.Product3.vx]", (LPARAM)arg);
-
-		return 1;
-	}
-
-	int ItemMaint()
-	{
-		HTREEITEM hItem = tv_folder.GetSelectedItem();
-		KXMLDOMElement e = tv_folder.GetItemData(hItem);
-		//xstring no = e.getAttribute(L"no");
-		//if(no==L"") return 1;
-		xstring guid = e.getAttribute(L"guid");
-		if (guid == L"") return 1;
-
-		/*
-		if(no==L"NP0000FS" || no==L"UP0000FS")
-		{
-			OpenWindow(L"dev:xpage[PackSchemaMaint.goodslib.vx]");
-		}else
-		{
-			int pr = g_xdoc_product;
-			OpenWindow(L"dev:xpage[ProductLibraryItemMaint.vx]",pr);
-		}
-		*/
-		//KXMLDOMElement ele = g_xdoc_product.getRowElement(L"data/Item", 1);
-		//alert(ele.xml);
-#ifdef shouldfinished
-		int pr = g_xdoc_product;
-		OpenWindow(L"dev:xpage[ProductLibraryItemMaint3.vx]", pr);
-#endif
-		return 1;
-	}
-
-	int ItemAdd()
-	{
-		HTREEITEM hItem = tv_folder.GetSelectedItem();
-		HTREEITEM hTopItem = LookupTopFolder(hItem);
-		xstring name = tv_folder.GetItemLabel(hTopItem);
-
-		KXMLDOMElement e = tv_folder.GetItemData(hItem);
-		//alert(e.xml);
-		/*xstring no = e.getAttribute(L"no");
-		if(no==L"") return 1;
-		if(no==L"NP0000FS" || no==L"UP0000FS")
-		{
-			OpenWindow(L"dev:xpage[PackSchemaMaint.goodslib.vx]");
-		}else
-		{
-			int p = no;
-			OpenWindow(L"dev:xpage[SO.autolist.goodslib.add.vx]",p);
-		}*/
-		xstring guid = e.getAttribute(L"guid");
-		if (guid == L"") return 1;
-		xaserverarg arg;
-		arg.setNativePointer(arg.CreateInstance());
-		arg.AddArg(L"guid", e.getAttribute(L"guid"));
-		if (name == L"个人产品")
-			arg.AddArg(L"FolderID", e.getAttribute(L"guid"));
-		else
-			arg.AddArg(L"CategoryID", e.getAttribute(L"guid"));
-		xstring No = e.getAttribute(L"CategoryNo");
-		if (No == L"") No = e.getAttribute(L"no");
-		xstring Name = e.getAttribute(L"CName");
-		if (Name == L"") Name = e.getAttribute(L"cname");
-		arg.AddArg(L"No", No);
-		arg.AddArg(L"CName", Name);
-		OpenWindow(L"dev:xpage[Quick.Input.NewProduct.vx]", (LPARAM)&arg);
-
-		if (arg.GetArgString(L"data.modify") == L"1")RetrieveData();
-
-		return 1;
-	}
-
-	int OnAddFolder()
-	{
-		HTREEITEM hItem = tv_folder.GetSelectedItem();
-		HTREEITEM hTopItem = LookupTopFolder(hItem);
-		xstring name = tv_folder.GetItemLabel(hTopItem);
-		xstring selectname = tv_folder.GetItemLabel(hItem);
-
-		xaserverarg arg;
-		if (hItem != hTopItem)
-		{
-			KXMLDOMElement e = tv_folder.GetItemData(hItem);
-			xstring folder = e.getAttribute(L"guid");
-			if (folder != L"")
-			{
-				arg.AddArg(L"parentCategoryID", folder);
-				OpenWindow(L"dev:xpage[UserFolderMaint.vx]",(LPARAM)&arg);
-				/*if(arg.GetArgString(L"FolderID")!=L"")
-				{
-					int child = tv_folder.GetChildItem(hItem);
-					if(!child)
-					{
-						ExpandItem(hItem);
-					}
-					else
-					{
-						KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
-						KXMLDOMElement e2 = e1.cloneNode(0);
-						e2.
-					}
-				}*/
-			}
-		}
-
-		return 1;
-	}
-
-	int OnMaintFolder()
-	{
-		HTREEITEM hItem = tv_folder.GetSelectedItem();
-		HTREEITEM hTopItem = LookupTopFolder(hItem);
-		xstring name = tv_folder.GetItemLabel(hTopItem);
-		xstring selectname = tv_folder.GetItemLabel(hItem);
-
-		xaserverarg arg;
-		if (name == L"个人库" && selectname == L"新产品" && tv_folder.GetParentItem(hItem) == hTopItem) return 1;
-		if (hItem != hTopItem)
-		{
-			KXMLDOMElement e = tv_folder.GetItemData(hItem);
-			xstring folder = e.getAttribute(L"guid");
-			if (folder != L"")
-			{
-				arg.AddArg(L"CategoryID", folder);
-				OpenWindow(L"dev:xpage[UserFolderMaint.vx]", (LPARAM)&arg);
-				if (arg.GetArgString(L"label") != L"")
-				{
-					tv_folder.SetItemLabel(hItem, arg.GetArgString(L"label"));
-				}
-			}
-		}
-		return 1;
-	}
-
-	//命令发布函数
-	int OnCmdDispatch(xstring comdid)
-	{
-		int hCursor;
-		xstring name = L"";
-		if (comdid == L"xmRefresh")
-		{
-			return RetrieveData();
-		}
-		else if (comdid == L"xmCarGoodsDelete")
-		{
-			CarGoodsDelete();
-			return 1;
-		}
-		else if (comdid == L"xmAddFolder")
-		{
-			return OnAddFolder();
-		}
-		else if (comdid == L"xmMaintFolder")
-		{
-			return OnMaintFolder();
-		}
-		else if (comdid == L"xmClose")
-		{
-			CloseWindow();
-			return 1;
-		}
-		else if (comdid == L"xmCarGoodsMaint")
-		{
-#ifdef shouldfinish
-			OpenWindow(L"dev:xpage[ShoppingCartProductMaint.vx]", trust(g_xdoc_shoppingcart as int));
-#endif
-			return 1;
-		}
-		else if (comdid == L"xmCarMaint")
-		{
-			OpenWindow(L"dev:xpage[SO.autolist.Shopcar.vx]");
-			return 1;
-		}
-		else if (comdid == L"xmSaleOrder")
-		{
-			int rw = dwc_list.GetNextSelectRow(1);
-			xstring content = L"<data>";
-			while (rw > 0)
-			{
-				KXMLDOMElement xe = OnGetCarListRowElement(rw);
-				content += xe.xml();
-				rw = dwc_list.GetNextSelectRow(rw + 1);
-
-			}
-			content += L"</data>";
-			xaserverarg carg;
-			carg.setNativePointer(carg.CreateInstance());
-			carg.AddArg(L"content", content);
-			OpenWindow(L"dev:xpage[SO.Simulation.Import.vx]", (LPARAM) & carg);
-			return 1;
-		}
-		else if (comdid == L"xmEnquiry")
-		{
-			int rw = dwc_list.GetNextSelectRow(1);
-			xstring content = L"<data>";
-			while (rw > 0)
-			{
-				KXMLDOMElement xe = OnGetCarListRowElement(rw);
-				content += xe.xml();
-				rw = dwc_list.GetNextSelectRow(rw + 1);
-			}
-			content += L"</data>";
-			xaserverarg carg;
-			carg.setNativePointer(carg.CreateInstance());
-			carg.AddArg(L"content", content);
-			OpenWindow(L"dev:xpage[Enquiry.Import.vx]", (LPARAM)&carg);
-			return 1;
-		}
-		else if (comdid == L"xmPurchar")
-		{
-			int rw = dwc_list.GetNextSelectRow(1);
-			xstring content = L"<data>";
-			while (rw > 0)
-			{
-				KXMLDOMElement xe = OnGetCarListRowElement(rw);
-				content += xe.xml();
-				rw = dwc_list.GetNextSelectRow(rw + 1);
-			}
-			content += L"</data>";
-			xaserverarg carg ;
-			carg.AddArg(L"content", content);
-			OpenWindow(L"dev:xpage[PO.Import.vx]", (LPARAM)&carg);
-			return 1;
-		}
-		else if (comdid == L"xmSearch")
-		{
-			RetrieveData();
-			return 1;
-		}
-		else if (comdid == L"xmQuote")
-		{
-			int rw = dwc_list.GetNextSelectRow(1);
-			xstring content = L"<data>";
-			while (rw > 0)
-			{
-				KXMLDOMElement xe = OnGetCarListRowElement(rw);
-				content += xe.xml();
-				rw = dwc_list.GetNextSelectRow(rw + 1);
-			}
-			content += L"</data>";
-			xaserverarg carg;
-			carg.AddArg(L"content", content);
-			OpenWindow(L"dev:xpage[Quote.Import.vx]",  (LPARAM) & carg);
-			return 1;
-		}
-		else if (comdid == L"xmAdd")
-		{
-			return ItemAdd();
-		}
-		else if (comdid == L"xmDelete")
-		{
-			int row = dw_list.GetRow();
-			if (row < 1) return 1;
-			xstring skuid = dw_list.GetItemString( row, L"@guid");
-			xml skuid_x = ViewObject::RetrieveData(L"/sale/data/ProductLibrary3/ProductNumberone", L"SKUID", skuid);
-			xstring  skuidEx = skuid_x.text();
-			int  skuid1 = skuidEx.toInt();
-			if (skuid1)
-			{
-				if (skuid1 > 0)
-				{
-					alert(L"订单已有产品,不允许删除!");
-					return 1;
-				}
-			}
-
-			DeleteRow(row);
-
-			return 1;
-		}
-		else if (comdid == L"xmCarAdd")
-		{
-			HCURSOR hCursor = xutil::SetCursorWait();
-			name = xcontrol(GetControl(L"frame:ed_goodscar")).GetText();
-			if (name != L"")
-			{
-				if (ShoppingCartView::AddCar(name) == 1)
-				{
-					tv_folder.InsertChildItem(LookupTopFolder(tv_folder.GetSelectedItem()),
-						name, 0, 35);
-				}
-			}
-			xutil::RestoreCursor(hCursor);
-			return 1;
-		}
-		else if (comdid == L"xmMaint")
-		{
-			return ItemMaint();
-		}
-		else if (comdid == L"xmAddImage")
-		{
-			return OnAddImage();
-		}
-		else if (comdid == L"xmDeleteImage")
-		{
-			return OnDeleteImage();
-		}
-		else if (comdid == L"xmPreviewImage")
-		{
-			return OnPreviewImage();
-		}
-		else if (comdid == L"xmPropConfigure")
-		{
-#ifdef shouldfinish
-			int r = cast(g_xdoc_product.getData(L"data/Item", L"@guid") as int);
-			OpenWindow(L"dev:xpage[Product.ItemProp.Maint.vx]", r);
-#endif
-			return 1;
-		}
-		else if (comdid == L"xmRertieve")
-		{
-			/*
-			int hItem1 = tv_folder.GetSelectedItem();
-			KXMLDOMElement e2= tv_folder.GetItemData(hItem1);
-			xstring no1 = e2.getAttribute(L"no");
-			xml x2 = vcontrol::RetrieveData(L"/sale/data/SO/goods/usergoods/listex1",L"parent",no1);
-			g_xdoc_product.Retrieve(x2);
-			*/
-			return 1;
-		}
-		else if (comdid == L"xmToCar")
-		{
-			name = xcontrol(GetControl(L"frame:cbx_goodscar")).GetText();
-			if (name == L"==选择购物车==L")
-			{
-				alert(L"请选择购物车");
-				return 1;
-			}
-			int xrow = dw_list.GetNextSelectRow(1);
-			xstring goodsid = L"";
-			xstring html = L"<data>";
-			while (xrow > 0)
-			{
-				KXMLDOMElement e =dw_list.GetRowElement(xrow);
-				goodsid = ProductLibraryView::GetElementString(e, L"@guid");
-				html += L"<item goodid='" + goodsid + L"' id ='" + ProductLibraryView::GetGuid() + L"'/>";
-				xrow = dw_list.GetNextSelectRow(xrow + 1);
-			}
-			html += L"</data>";
-			trace(html);
-			if (ShoppingCartView::GoodsImport(name, html) == 1)
-				alert(L"添加错误!");
-			else
-				alert(L"添加成功");
-			return 1;
-		}
-		return 0;
-	}
-
-	//命令处理事件
-	int OnXCommand(TEvent* evt, int param)
-	{
-		return OnCmdDispatch(evt->xcommand.pStrID);
-	}
-
-	//查找当前树项的顶级目录
-	HTREEITEM LookupTopFolder(HTREEITEM hItem)
-	{
-		HTREEITEM hRoot = tv_folder.GetRootItem();
-		while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
-		return hItem;
-	}
-
-	//插入产品类项的子项
-	int MakeGoodsFolderItem(HTREEITEM hItem, xstring sno)
-	{
-		xml x = ProductLibraryView::GetTreeChildItems3(sno);
-		if (!x) return 0;
-
-		KXMLDOMNodeList nlist = x.selectNodes(L"//Item");
-		int len = nlist.length();
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			xstring name = e.getAttribute(L"CName");
-			xstring no = e.getAttribute(L"CategoryNo");
-			xstring label = no.trim() + L" " + name;
-
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 15);
-			xstring child = e.getAttribute(L"Childs");
-			if (child == L"")
-				tv_folder.SetItemChild(h, 1);
-			else if (child != L"0")
-				tv_folder.SetItemChild(h, 1);
-		}
-		return 1;
-	}
-
-	//插入新产品目录子项
-	int MakeUserGoodsFolderItem(HTREEITEM hItem, xstring sno)
-	{
-		xml x = ProductLibraryView::GetTreeUserChildItems3(sno);
-		if (!x) return 0;
-
-		KXMLDOMNodeList nlist = x.selectNodes(L"//Item");
-		int len = nlist.length();
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			xstring name = e.getAttribute(L"CName");
-			xstring no = e.getAttribute(L"CategoryNo");
-			xstring label = no.trim() + L" " + name;
-
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 15);
-			xstring child = e.getAttribute(L"Childs");
-			if (child == L"")
-				tv_folder.SetItemChild(h, 1);
-			else if (child != L"0")
-				tv_folder.SetItemChild(h, 1);
-		}
-		return 1;
-	}
-
-	//插入购物车项
-	int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
-	{
-		KXMLDOMNodeList nlist = ele.selectNodes(L"item");
-		int len = nlist.length();
-		if (len > 0) tv_folder.SetItemChild(hItem, 1);
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			xstring name = e.getAttribute(L"name");
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
-			ExpandCatChildFolder(h, e, 35);
-		}
-		return 1;
-	}
-	int MakeGoodCarFolderItem(HTREEITEM hItem)
-	{
-		xml x = ShoppingCartView::GetRoleList();
-		if (!x) return 0;
-		KXMLDOMNodeList nlist = x.selectNodes(L"/data/item");
-		int len = nlist.length();
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			xstring name = e.getAttribute(L"name");
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
-			ExpandCatChildFolder(h, e, 35);
-		}
-		return 1;
-	}
-
-	int ExpandItem(HTREEITEM hItem)
-	{
-		HTREEITEM hTopItem = LookupTopFolder(hItem);
-		xstring name = tv_folder.GetItemLabel(hTopItem);
-		HTREEITEM child = tv_folder.GetChildItem(hItem);
-		xstring no = L"";
-		KXMLDOMElement e;
-		if (name == L"公司库" && !child)
-		{
-			no = L"";
-			if (hTopItem != hItem)
-			{
-				e = tv_folder.GetItemData(hItem);
-				no = e.getAttribute(L"categoryid");
-			}
-			else
-			{
-				e = tv_folder.GetItemData(hItem);
-				no = e.getAttribute(L"categoryid");
-			}
-			MakeGoodsFolderItem(hItem, no);
-		}
-		else if (name == L"个人库" && !child)
-		{
-			no = L"";
-			if (hTopItem != hItem)
-			{
-				e = tv_folder.GetItemData(hItem);
-				no = e.getAttribute(L"categoryid");
-				MakeUserGoodsFolderItem(hItem, no);
-			}
-		}
-		else if (name == L"购物车" && !child)
-		{
-			if (hItem == hTopItem)MakeGoodCarFolderItem(hItem);
-		}
-		return 1;
-	}
-
-	//树展开
-	int OnTreeExpanding(TEvent * evt, int p)
-	{
-		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
-		HTREEITEM hItem = nmtv.itemNew.hItem;
-		return ExpandItem(hItem);
-	}
-
-	int ResetAgent(xstring agentAsk)
-	{
-		if (agentFor != agentAsk)
-		{
-			agentFor = agentAsk;
-			m_agentNode = 0;
-			SetAgent();
-		}
-		return 1;
-	}
-
-	HTREEITEM LookupCustomerFolder(HTREEITEM hItem)
-	{
-		while (true)
-		{
-			KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
-			xstring str = e1.getAttribute(L"no");
-			if (str.find(L"Customer:") >= 0) return hItem;
-			hItem = tv_folder.GetParentItem(hItem);
-			if (hItem == 0) break;
-		}
-		return 0;
-	}
-
-	xstring LookupCustomer(HTREEITEM hItem)
-	{
-		hItem = LookupCustomerFolder(hItem);
-		if (hItem == 0) return L"";
-		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
-		xstring str = e1.getAttribute(L"no");
-		return str.mid(xstring(L"Customer:").length(), 9999);
-	}
-
-	int RetrieveData()
-	{
-		ximageview im = GetControl(L"im1");
-		HTREEITEM hItem = tv_folder.GetSelectedItem();
-		HTREEITEM hTopItem = LookupTopFolder(hItem);
-		xstring name = tv_folder.GetItemLabel(hTopItem);
-		xstring selectname = tv_folder.GetItemLabel(hItem);
-
-		xcontrol query = GetControl(L"sl_search");
-		xstring queryString = query.GetText();
-
-		if (hItem == hTopItem)
-		{
-			dw_list.Reset();
-			dw_list.SetReadOnly(true);
-			dw_list.Redraw();
-			dwc_list.Reset();
-			dwc_list.SetReadOnly(true);
-			dwc_list.Redraw();
-
-			im.Reset();
-			im.Redraw();
-
-
-			xshtml xs1 = GetControl(L"html_detail");
-			xs1.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
-
-			if (name != L"公司库") return 1;
-		}
-		//return 1;
-
-		HCURSOR hCursor = xutil::SetCursorWait();
-
-		if (name == L"购物车")
-		{
-			if (selectname != name)
-			{
-				KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
-				xstring str = e1.getAttribute(L"no");
-				alert(str);
-				if (str.find(L"Customer:") == 0 || str.find(L"SO:") == 0)
-				{
-					m_customer = LookupCustomer(hItem);
-					if (str.find(L"Customer:") == 0)
-						dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodscustomerlist");
-					else
-						dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodssolist");
-					dwc_list.Reset();
-					dwc_list.SetReadOnly(true);
-					dw_list.Retrieve(ShoppingCartView::GetGoodsList(str, queryString));
-				}
-				else if (e1.getAttribute(L"categoryid") != L"")
-				{
-					xstring categoryid = e1.getAttribute(L"categoryid");
-					dwc_list.SetDataObject(ProductLibraryView::GetMaintListForm3(categoryid));
-					dwc_list.SetReadOnly(true);
-					dwc_list.Reset();
-					dw_list.Retrieve(ProductLibraryView::GetMaintList3(categoryid, queryString, L""));
-					dwc_list.Redraw();
-				}
-				else
-				{
-					dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
-					dwc_list.SetReadOnly(true);
-					dwc_list.Reset();
-					dw_list.Retrieve(ShoppingCartView::GetGoodsList(selectname, queryString));
-				}
-				//dwc_list.PostRetrieve();
-				dwc_list.Redraw();
-
-				xshtml xs = GetControl(L"html_detail");
-				if (dwc_list.GetRowCount() >= 1)
-				{
-					xs.SetContent(makeGoodscarHtml(1));
-
-					if (m_customer != L"")
-					{
-						xstring skuid =dw_list.GetItemString( 1, L"SKUID");
-						xstring customerItemNo =dw_list.GetItemString( 1, L"CustomerItemNo");
-						OnShowImage(skuid, customerItemNo);
-					}
-				}
-				else
-				{
-					im.Reset();
-					im.Redraw();
-
-					xs = GetControl(L"html_detail");
-					xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
-				}
-				xs.Redraw();
-			}
-		}
-		else
-		{
-
-			if (name == L"个人库" || name == L"公司库")
-			{
-				xstring no = L"N000005";
-				if (name == L"个人库") no = L"U000005";
-
-				if (hItem != hTopItem)
-				{
-					KXMLDOMElement e = tv_folder.GetItemData(hItem);
-					no = e.getAttribute(L"guid");
-				}
-				else
-					return 1;
-
-				/*	dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(no).GetXmlDoc());
-					dw_list = GetControl(L"dw_list");
-					dw_list.Reset();
-					dw_list.SetReadOnly(true);
-				*/
-
-				if (name == L"个人库")
-					dw_list.Retrieve(ProductLibraryView::GetMaintRoleList3(no));
-				else
-				{
-					if (queryString != L"")
-					{
-
-						if (no == L"N000005")
-							dw_list.Retrieve(ProductLibraryView::GetMaintList3(L"", queryString, L""));
-						else
-							dw_list.Retrieve(ProductLibraryView::GetMaintList3(no, queryString, L""));
-					}
-					else
-					{
-						if (no == L"N000005") return 1;
-						dw_list.Retrieve(ProductLibraryView::GetMaintList3(no));
-					}
-				}
-				//dw_list.PostRetrieve();
-				dw_list.Redraw();
-
-				xshtml xs = GetControl(L"html_detail");
-				if (dw_list.GetRowCount() > 0)
-				{
-					xs.SetContent(makeHtml(1));
-					xstring id = dw_list.GetItemString( 1, L"@guid");
-					OnShowImage(id);
-				}
-				else
-				{
-					im.Reset();
-					im.Redraw();
-
-					xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
-				}
-				xs.Redraw();
-			}
-		}
-		xutil::RestoreCursor(hCursor);
-
-		return 1;
-	}
-
-	int OnTreeSelChanged(TEvent * evt, int p)
-	{
-		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
-		HTREEITEM hItem = nmtv.itemNew.hItem;
-		HTREEITEM hTopItem = LookupTopFolder(hItem);
-		xstring name = tv_folder.GetItemLabel(hTopItem);
-		xstring selectname = tv_folder.GetItemLabel(hItem);
-		ximageview im = GetControl(L"im1");
-		m_customer = L"";
-		//alert(name);
-		if (name == L"购物车")
-		{
-			if (agentFor != L"goodscar")SwitchLayer(L"goodscarsheet", L"sheetframe");
-			ResetAgent(L"goodscar");
-		}
-		else
-		{
-			if (agentFor != L"goodslib")SwitchLayer(L"goodslibsheet", L"sheetframe");
-			if (name == L"个人库")
-				ResetAgent(L"userlib");
-			else
-				ResetAgent(L"goodslib");
-		}
-		//RetrieveData();
-		PostMessage(GetHWND(), 0x401, (WPARAM)L"xmRefresh", 0);
-
-		return 1;
-	}
-
-	int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
-	{
-		KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
-		int len = nlist.length();
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement& e = * new KXMLDOMElement(nlist.item(i));
-			xstring name = e.getAttribute(L"cname");
-			xstring sImage = e.getAttribute(L"image");
-			int image = 15;
-			//if(sImage) image = sImage.toInt();
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
-			tv_folder.SetItemChild(h, 1);
-			ExpandChildFolder(h, e);
-		}
-		return 1;
-	}
-
-	int  InitialFolder()
-	{
-		KXMLDOMElement xframeElement = GetElement();
-		KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
-		ExpandChildFolder(0, e);
-		return 1;
-	}
-
-	int OnViewZoomChange(TEvent* evt, int lParam)
-	{
-		ximageview im = GetControl(L"im1");
-		xcombobox xc = GetControl(L"precent");
-		xstring text = xc.GetLBText();
-		int p = text.toInt();
-		if (p == 0) p = 100;
-		im.Preview(p);
-		return 1;
-	}
-
-	int OnAttachEvent()
-	{
-		//绑定工具条点击事件
-		AttachEvent(L"WM_XCOMMAND", (FEvent)&ProductLibrary4Win::OnXCommand);
-		//获取焦点事件,用于重置工具条
-		AttachEvent(L"WM_SETFOCUS", (FEvent)&ProductLibrary4Win::OnSetFocus);
-		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnRowChanged);
-		AttachEvent(L"dwc_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnGoodsCarRowChanged);
-		AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ProductLibrary4Win::OnTreeExpanding);
-		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ProductLibrary4Win::OnTreeSelChanged);
-		AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick);	//checkbox打钩事件
-		AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick2);	//checkbox打钩事件	
-
-		AttachEvent(L"im1", L"IMG_LDBCLICK", (FEvent)&ProductLibrary4Win::OnImgDBClicked);
-		AttachEvent(L"precent", L"CBN_SELCHANGE", (FEvent)&ProductLibrary4Win::OnViewZoomChange);
-
-		return 1;
-	}
-
-	int onload()
-	{
-		agentFor = L"goodslib";
-		m_customer = 0;
-
-		OnAttachEvent();
-
-		tv_folder = GetControl(L"tv_folder");
-		dw_list = GetControl(L"dw_list");
-		dwc_list = GetControl(L"dwc_list");
-
-		InitialFolder();
-
-		dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(L""));
-		dw_list = GetControl(L"dw_list");
-		dw_list.SetReadOnly(true);
-
-		dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
-		dwc_list.SetReadOnly(true);
-
-		tv_folder.ExpandItem(tv_folder.GetRootItem());
-		tv_folder.ItemFocus(tv_folder.GetRootItem());
-
-		if (dw_list.GetRowCount())
-		{
-			xshtml xs = GetControl(L"html_detail");
-			xs.SetContent(makeHtml(1));
-		}
-
-		return 1;
-	}
-
-	int onloaded()
-	{
-		SetAgent();
-
-		return 1;
-	}
-
-	int OnImgDBClicked(TEvent * evt, int pr)
-	{
-		IMGNNMHDR& nmtv = *(IMGNNMHDR*)evt->notify.pnmh;
-		xstring src = nmtv.path;
-		/*if(src.length() > 60)
-			src = src.right(44);
-		else
-			src=src.mid(src.find(L"Thumbs", 0)+6, 50);
-		*/
-		xaserverarg& arg = *new xaserverarg;
-		//arg.AddArg(L"src",L"/business/products/chanpin"+src);	
-		arg.AddArg(L"src", src);
-
-		//win::OpenWindow(L"dev:xpage[BigPicture.vx]",arg);	
-
-		int h = openUrl(L"/sale/view/ProductLibrary/xpage/bigpictureview", &arg);
-		return 1;
-		/*
-		xwin x = new xwin;
-		x.setNativePointer(h);
-		m_winHwnd = x.GetHWND();
-
-		xstring sh = doc.GetXml();
-		int p = cast(sh as int);
-		win32::SendMessage(m_winHwnd, 0x401, p, 0);
-		*/
-		return 1;
-	}
-};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Organization.cpp b/jrj/project/business/SystemSettings/Organization.cpp
new file mode 100644
index 0000000..e3bb401
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Organization.cpp
@@ -0,0 +1,187 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) Organization : public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+
+	public:
+		Organization(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static Organization* CreateInstance(void* implPtr, void* hWnd)
+		{
+			Organization* pWin = new Organization(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)
+				{
+					xstring s = agent.xml();
+					m_agentNode = SetAgentNode(anode, s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			xstring s = publiccode::GetUser().deptname;
+			int hCursor = 0;
+			xstring  userno = publiccode::GetUser().no;
+
+
+			if (comdid == L"xmAdd")
+			{
+				xaserverarg arg ;
+				
+				arg.AddArg(L"HWND", xstring((__int64)GetHWND()));
+				
+				OpenWindow(L"dev:xpage[OrganizationBase.vx]", arg);
+			}
+			else if (comdid == L"xmDelete")
+			{
+				xstring CIDs = dw_list.GetGuid(dw_list.GetRow());
+				int MB_OKCANCEL = 1;
+				int IDOK = 1;
+				int ret = MessageBox(GetHWND(), L"确认删除?", L"提示", MB_OKCANCEL);
+				if (ret == IDOK)
+				{
+					ViewObject::RetrieveData(L"/sale/data/business/delete/Organization", L"EntityID", CIDs);
+					OnRetrieve();
+				}
+			}
+			if (comdid == L"xmEdit")
+			{
+				xaserverarg arg ;
+				
+				xstring ID = dw_list.GetGuid(dw_list.GetRow());
+				arg.AddArg(L"ID", ID);
+				arg.AddArg(L"HWND", xstring((__int64)GetHWND()));
+				
+				OpenWindow(L"dev:xpage[OrganizationBase.vx]", arg);
+			}
+			else if (comdid == L"xmRefresh")
+			{
+				OnRetrieve();
+			}
+			return 0;
+		}
+
+		//触发鼠标离开后tran事件,通过查找某个参数得到对应的列			
+		int OnBaseItemChanged(TEvent* evt, int p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			xstring colname = hdr.colname;
+			xstring value = hdr.data;
+
+			xstring dwname = L"dw_list";
+			if (value != L"")
+			{
+				KXMLDOMNodeList nlist = GetElement().selectNodes(L"//*[@name='" + dwname + L"']/trans[@for='" + colname + L"']");
+				ViewObject::TransData(nlist, dw_list, hdr.row, colname, value);
+			}
+
+			return 1;
+		}
+
+
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+
+		int OnDoubleClicked(TEvent* evt, int p)
+		{
+			HCURSOR hCursor = xutil::SetCursorWait();
+			OnCmdDispatch(L"xmEdit");
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}
+
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&Organization::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&Organization::OnSetFocus);
+			AttachEvent(L"dw_list", L"DWV_ITEMCHANGED", (FEvent)&Organization::OnBaseItemChanged);
+			AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&Organization::OnDoubleClicked);//行双击
+			return 1;
+		}
+
+
+		int  OnRetrieve()
+		{
+			xml x ;
+			
+			xaserverarg arg ;
+			
+			arg.AddArg(L"QueryTxt",xcontrol(GetControl(L"search")).GetText());
+
+			if (getUrl(L"/sale/data/business/OrganizationList", arg.GetString(), x) != 1)
+			{
+				trace(x.text());
+				return -1;
+			}
+			else
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+				dw_list.SetReadOnly(true);
+				dw_list.SetSelectionMode(1);
+			}
+			return 1;
+		}
+
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/Business3/template/OrganizationList");
+
+
+			OnRetrieve();
+
+			OnAttachEvent();
+
+			return 1;
+		}
+
+		int onloaded()
+		{
+			SetAgent();
+
+
+
+			return 1;
+		}
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/OrganizationBase.cpp b/jrj/project/business/SystemSettings/OrganizationBase.cpp
new file mode 100644
index 0000000..a03cf17
--- /dev/null
+++ b/jrj/project/business/SystemSettings/OrganizationBase.cpp
@@ -0,0 +1,189 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) OrganizationBase :  public xframe
+	{
+	public:
+		HWND hObject = 0;
+		xdwtable	dw_base;
+		xnode	m_agentNode;	//Agent Condition
+		bool updated;
+	public:
+		OrganizationBase(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static OrganizationBase* CreateInstance(void* implPtr, void* hWnd)
+		{
+			OrganizationBase* pWin = new OrganizationBase(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			return 1;
+			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)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+				
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			//SetAgent();
+			return 1;
+		}
+		
+				
+		int OnSave()
+		{
+			xml x ;
+			
+			xaserverarg arg ;
+				
+			dw_base.AcceptText();
+			dw_base.DwUpdateAllTo(x);
+			xstring error = L"";
+			arg.AddArg(L"content", x.xml() );
+			if(xurl::get(L"/sale/data/business/Update/Organization", arg.GetString(),x)!=1)
+			{
+				error = x.text();
+				//alert(error);
+			}else
+			{
+				xstring str = x.documentElement().getAttribute(L"text");
+				if(str == L"true")
+				{
+					dw_base.ResetUpdateStatus();
+					alert(L"保存成功!"); 
+					SendMessage(hObject,0x401,(LPARAM)L"xmRefresh",0);
+					CloseWindow();
+				}else 
+				{
+					alert(L"保存失败!");
+				}
+				//alert(str);
+			}
+			return 1;
+		}
+		
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmSave")
+			{
+				OnSave();
+				return 1;
+			}
+			else if(comdid==L"xmClose")
+			{
+				if(updated)
+					SendMessage(hObject,0x401,(LPARAM)L"xmRefresh",0);
+				CloseWindow();
+				return 1;
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnItemChanged(TEvent* evt, int p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			xstring colname=hdr.colname;
+			xstring value = hdr.data;
+			
+			xstring dwname = L"dw_base";
+			return 1;
+		}
+		
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&OrganizationBase::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&OrganizationBase::OnSetFocus);
+			AttachEvent(L"dw_base",L"DWV_ITEMCHANGED", (FEvent)&OrganizationBase::OnItemChanged);
+			return 1;
+			
+		}
+		
+		int  OnRetrieve(xstring ID)
+		{
+			xml x ;
+			
+			xaserverarg arg ;
+				
+			arg.AddArg(L"ID",ID);
+			if (getUrl(L"/sale/data/business/GetOrganizationByID",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_base.Retrieve(x);
+				dw_base.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			SetArg();
+			dw_base = GetControl(L"dw_base");
+			dw_base.openUrl(L"/sale/view/Business3/template/OrganizationMaint");
+			dw_base.SetColHeaderHeight(0);
+			dw_base.SetRowSelectorWidth(0);
+			dw_base.SetHScrollState(false);
+			dw_base.SetVScrollState(false);
+			
+			xstring ID = L"";
+			hObject = 0;
+			if(GetWinParam())
+			{	
+				xaserverarg arg =GetArg() ;
+				
+				ID = arg.GetArgString(L"ID");
+				hObject = (HWND)arg.GetArgString(L"HWND").toInt();
+			}
+			if(ID != L"")
+			{
+				OnRetrieve(ID);
+			}
+			
+			OnAttachEvent();	
+			updated = false;
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			//SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Organization_A.cpp b/jrj/project/business/SystemSettings/Organization_A.cpp
deleted file mode 100644
index 8f92f1c..0000000
--- a/jrj/project/business/SystemSettings/Organization_A.cpp
+++ /dev/null
@@ -1,513 +0,0 @@
-#include <wobject/xstring.hpp>
-#include <xcontrol/xtreeview.hpp>
-#include <xcontrol/xdwgrid.hpp>
-
-#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
-#include "viewobject/view.base.hpp"
-
-class __declspec(dllexport) SO3list : public listwin
-{
-public:
-	string m_sType; //树选中的类型
-	string m_sTypeTxt; //树选中的数据
-	string urlTree;
-	string myDataUrl;
-	string rows;
-	xcombobox ddlb_1;
-	xcombobox cbx_datashow;
-
-	int changeddlb;
-
-	xtreeview tv_folder;
-	xdwgrid dw_goods;
-	xdwgrid dw_source;
-public:
-	SO3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
-public:
-	static SO3list* CreateInstance(void* implPtr, void* hWnd)
-	{
-		SO3list* pWin = new SO3list(implPtr, (HWND)hWnd);
-		return pWin;
-	}
-
-	//process tree
-	//查找当前树项的顶级目录
-	HTREEITEM LookupTopFolder(HTREEITEM hItem)
-	{
-		HTREEITEM hRoot = tv_folder.GetRootItem();
-		while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
-		return hItem;
-	}
-
-	int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
-	{
-		KXMLDOMNodeList nlist = ele.selectNodes(L"item");
-		int len = nlist.length();
-		if (len > 0) tv_folder.SetItemChild(hItem, 1);
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			string name = e.getAttribute(L"name");
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
-			ExpandCatChildFolder(h, e, 35);
-		}
-		return 1;
-	}
-
-	int ExpandFolderItem(HTREEITEM hItem, string no)
-	{
-		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),urlTree, L"no", no, L"rows", rows);
-		if (!x) return 0;
-		KXMLDOMNodeList nlist = x.selectNodes(L"/data/item");
-		int len = nlist.length();
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			string name = e.getAttribute(L"name");
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
-			ExpandCatChildFolder(h, e, 35);
-		}
-		return 1;
-	}
-
-	//树展开
-	int OnTreeExpanding(TEvent* evt, int p)
-	{
-		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
-		HTREEITEM hItem = nmtv.itemNew.hItem;
-		HTREEITEM hTopItem = LookupTopFolder(hItem);
-		string name = tv_folder.GetItemLabel(hTopItem);
-		HTREEITEM child = tv_folder.GetChildItem(hItem);
-
-		KXMLDOMElement e = tv_folder.GetItemData(hItem);
-		if (!child)ExpandFolderItem(hItem, e.getAttribute(L"no"));
-
-		return 1;
-	}
-
-	//展开子文件
-	int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
-	{
-		KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
-		int len = nlist.length();
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			string name = e.getAttribute(L"name");
-			xstring sImage = e.getAttribute(L"image");
-			xstring child = e.getAttribute(L"child");
-			int image = 15;
-			if (sImage) image = sImage.toInt();
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
-			if (child != L"no") tv_folder.SetItemChild(h, 1);
-			//ExpandChildFolder(h, e);
-		}
-		return 1;
-	}
-
-	//初始化文件夹
-	int  InitialFolder()
-	{
-		KXMLDOMElement xframeElement = GetElement();
-		KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
-		if (e)
-			ExpandChildFolder(0, e);
-		return 1;
-	}
-
-	int OnTreeSelChanged(TEvent* evt, LPARAM p)
-	{
-		if (changeddlb) return 1;
-		return OnPreRetrieve();
-	}
-
-	int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg  arg)
-	{
-		if (updateItem == L"del")
-		{
-			int DelRow = dw_list.GetRow();
-			dw_list.DeleteRow(DelRow);
-			return 1;
-		}
-		else if (updateItem == L"setstate")
-		{
-			int row = dw_list.GetRow();
-			if (row < 1) return 1;
-			KXMLDOMElement ele = dw_list.GetRowElement(row);
-			string id = GetEntityIDName(1);
-			string entity = ele.selectSingleNode(id).text();
-			//trace(entity);
-			SetAgent(L"list", entity);
-			if (arg.GetArgString(L"state") != L"")
-				//this.dw_list.SetItemString(row, "ApprovalStatus", arg.GetArgString(L"state"));
-				dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state"));
-			if (arg.GetArgString(L"billstatus") != L"")
-			{
-				xstring billstatus = arg.GetArgString(L"billstatus");
-				xstring statusName = GetBillStatusName(billstatus);
-				dw_list.SetItemString(row, L"ApprovalStatus", billstatus);
-				dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName);
-			}
-
-			dw_list.Redraw();
-		}
-		return 1;
-	}
-
-	bool IsEmptyQueryStr(string queryStr)
-	{
-		if (queryStr == L"") return true;
-		if (queryStr == L"<items join='and'/>") return true;
-		if (queryStr == L"<items join=\"and\"/>") return true;
-		//trace(queryStr);
-		return false;
-	}
-
-	//检索
-	int OnPreRetrieve()
-	{
-		HTREEITEM hItem = tv_folder.GetSelectedItem();
-		if (!hItem) return 1;
-
-		HCURSOR hCursor = xutil::SetCursorWait();
-		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
-		string no = e1.getAttribute(L"no");
-		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt, L"rows", rows);
-		if (x)
-		{
-			dw_list.Retrieve(x);
-			dw_list.Redraw();
-		}
-		else
-		{
-			dw_list.Reset();
-			dw_list.Redraw();
-			dw_goods.Reset();
-			dw_goods.Redraw();
-		}
-		dw_list.SetReadOnly(true);
-		xutil::RestoreCursor(hCursor);
-		return 1;
-		/*
-		xaserverarg arg = new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());
-		arg.AddArg(L"pageindex", m_pageIndex.toString(),""); //第几页
-		arg.AddArg(L"pagenumber", m_pageNumber.toString(),""); //每页数量
-		arg.AddArg(L"QueryTxt", m_QueryTxt,""); //查询条件
-		arg.AddArg(L"sType",m_sType,"");
-		arg.AddArg(L"sTypeTxt",m_sTypeTxt,"");
-		xml x =  ViewObject::MakeXml();
-
-		KXMLDOMElement   n = m_configDoc.selectSingleNode(L"//list/dwview[@type='dwgrid'][1]");
-		if(n)
-		{
-			KXMLDOMElement e = n;
-			if(e.selectSingleNode(L"@dataUrl"))
-			{
-				string dataUrl = e.selectSingleNode(L"@dataUrl").text;
-				if(dataUrl.left(1)!="/") dataUrl = GetEntityName(1)+"/"+dataUrl;
-				getUrl(dataUrl, arg.GetString(), x);
-				KXMLDOMElement ele=x.GetXmlDoc().documentElement;
-				if(dw_pages.ptr_native_)
-				{
-					if(ele.selectSingleNode(L"@TotalPage"))
-					{
-						string s=ele.selectSingleNode(L"@TotalPage").text; //总数量
-						dw_pages.SetMaxPage(s.toInt());
-					}
-				}
-				dw_list.Retrieve(x);
-				dw_list.Redraw();
-				dw_list.SetReadOnly(true);
-			}
-			else
-			{
-				SetEntityData(arg);
-			}
-		}
-		else
-		{
-			SetEntityData(arg);
-		}
-		*/
-	}
-
-	//历史数据
-	int Onhistroydata()
-	{
-		int row = dw_list.GetNextSelectRow(1);
-		if (row > 0)
-		{
-			KXMLDOMElement e = dw_list.GetRowElement(row);
-			xaserverarg& arg = * new xaserverarg;
-			string sCustomerID = e.selectSingleNode(L"CustomerID").text();
-			arg.AddArg(L"CustomerID", sCustomerID, L"");
-			string sCustomerName = e.selectSingleNode(L"CustomerName").text();
-			arg.AddArg(L"CustomerName", sCustomerName, L"");
-			arg.AddArg(L"EntityName", GetEntityName(1), L"");
-			arg.AddArg(L"EntityID", GetEntityID(1), L"");
-			openUrl(L"/sale/view/SO/xpage/histroydata", &arg);
-		}
-		return 1;
-	}
-
-	//xcombobox下拉
-	int OnSelectDdlb(TEvent* evt, LPARAM p)
-	{
-		changeddlb = 1;
-		HWND wid = ddlb_1.GetHWND();
-		int CB_GETCURSEL = 0x0147;
-		int nIndex =SendMessage(wid, CB_GETCURSEL, 0, 0);
-		KXMLDOMElement e = ddlb_1.GetElement();
-		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
-		string no = e2.selectSingleNode(L"@element").text();
-
-		HTREEITEM hItem = tv_folder.GetRootItem();
-		while (tv_folder.GetChildItem(hItem))
-			tv_folder.DeleteItem(tv_folder.GetChildItem(hItem));
-		ExpandFolderItem(hItem, no);
-
-		changeddlb = 0;
-		return 1;
-	}
-
-
-	int OnSelectDataShowDdlb(TEvent* evt, LPARAM p)
-	{
-		HWND wid = cbx_datashow.GetHWND();
-		int CB_GETCURSEL = 0x0147;
-		int nIndex = SendMessage(wid, CB_GETCURSEL, 0, 0);
-		KXMLDOMElement e = cbx_datashow.GetElement();
-		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
-		rows = e2.selectSingleNode(L"@rows").text();
-		OnPreRetrieve();
-
-		return 1;
-	}
-
-	int PreOnCmdDispatch(xstring comdid)
-	{
-		if (comdid == L"action:bill.new")
-		{
-			xstring s = publiccode::GetUser().id;
-			xstring no = publiccode::GetUser().no;
-			if (no != L"00303" && no != L"admin")
-			{
-				KXMLDOMDocument supplier_x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s);
-				if (supplier_x)
-				{
-					if ((xstring)supplier_x.text() != L"业务员")
-					{
-						alert(L"当前角色不是业务员不能新增单子,请重新选择角色");
-						return 0;
-					}
-				}
-			}
-		}
-		if (comdid == L"action:bill.annex")
-		{
-			xstring deptname = publiccode::GetUser().deptname;
-			if (deptname == L"采购部")
-			{
-				return 1;
-			}
-
-			int row = dw_list.GetRow();
-			if (row < 1) return 1;
-			xstring guid = dw_list.GetItemString(row, L"SOID");
-			xaserverarg& arg = * new xaserverarg();
-
-			if (guid.length() <= 0)return 1;
-			
-			arg.AddArg(L"entityid", guid);
-			arg.AddArg(L"Type", L"Y");
-			OpenWindow(L"dev:xpage[maint.Document.SO3.v3.vx]", arg);
-
-			return 0;
-		}
-		if (comdid == L"action:bill.histroydata") return Onhistroydata();
-		else if (comdid == L"action:bill.refresh")
-		{
-			changeddlb = 1;
-			HTREEITEM RItem = tv_folder.GetRootItem();
-			while (tv_folder.GetChildItem(RItem))
-				tv_folder.DeleteItem(tv_folder.GetChildItem(RItem));
-			ExpandFolderItem(RItem, L"Category:Customer");
-			tv_folder.ExpandItem(RItem);
-			tv_folder.ItemFocus(RItem);
-			changeddlb = 0;
-			return OnPreRetrieve();
-		}
-		if (comdid == L"action:bill.saveas")
-		{
-			dw_list.SaveAs(L"");
-			return 1;
-		}
-		if (comdid == L"action:bill.SourceRemark") return OnSourceRemark();
-
-		return 1;
-	}
-
-	int OnSourceRemark()
-	{
-		xstring name = L"外销合同";
-		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
-		KXMLDOMNodeList items = x.selectNodes(L"data/Item");
-		KXMLDOMNode t = items.item(0);
-		xstring Content = L"";
-		if (t.selectSingleNode(L"Content"))
-		{
-			Content = t.selectSingleNode(L"Content").text();
-		}
-		xaserverarg& arg = *new xaserverarg;
-		arg.AddArg(L"value", Content);
-		OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg);
-
-		return 1;
-	}
-
-	int OnRowChanged(TEvent* evt, LPARAM p)
-	{
-		DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
-		int row = hdr.row;
-
-
-		if (row < 1) return 1;
-
-		//fixed one event only one process
-		listwin::OnRowChanged(evt, p);
-
-		HCURSOR 	hCursor = xutil::SetCursorWait();
-
-		xstring SONo = dw_list.GetItemString(row, L"SONo");
-		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/item", L"id", SONo);
-		if (x)
-			dw_goods.Retrieve(x);
-		else
-			dw_goods.Reset();
-		dw_goods.Redraw();
-		dw_goods.SetReadOnly(true);
-
-		x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/itemwithsource", L"id", SONo);
-		if (x)
-			dw_source.Retrieve(x);
-		else
-			dw_source.Reset();
-		dw_source.Redraw();
-		dw_source.SetReadOnly(true);
-
-		xutil::RestoreCursor(hCursor);
-
-		return 1;
-	}
-
-
-	int AttachListon()
-	{
-		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&SO3list::OnTreeSelChanged); //树选择
-		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SO3list::OnRowChanged);//绑定行更改触发事件OnRowChanged
-		//AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&listwin::OnDoubleClicked);
-		AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDdlb);//绑定下拉框更改触发事件OnSelectDdlb
-		AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDataShowDdlb);//绑定选择数据显示下拉列表事件OnSelectDataShowDdlb
-		return 1;
-	}
-
-	int onload()
-	{
-		changeddlb = 0;
-		listwin::onload();
-		ddlb_1 = GetControl(L"cbx_1");
-		cbx_datashow = GetControl(L"cbx_datashow");
-		dw_goods = GetControl(L"dw_goods");
-		dw_goods.openUrl(GetServerUrl(),L"/sale/view/SaleOrder/template/item");
-		dw_source = GetControl(L"dw_source");
-		dw_source.openUrl(GetServerUrl(), L"/sale/view/SaleOrder/template/sourceitem");
-
-		dw_goods.SetColumnState(L"ItemID", false);
-		dw_goods.SetColumnState(L"LineType", false);
-		dw_goods.SetColumnState(L"Brand", false);
-		dw_goods.SetColumnState(L"Assortment", false);
-		dw_goods.SetColumnState(L"ClassifyID", false);
-		dw_goods.SetColumnState(L"UnitFreight", false);
-		//dw_goods.SetColumnState(L"CName",false);//隐藏列
-
-		dw_goods.SetColumnState(L"Brand", false);
-		dw_goods.SetColumnState(L"SKUNo", false);
-		dw_goods.SetColumnState(L"SOLineNo", false);
-		dw_goods.SetColumnState(L"CustomerPONo", false);
-		dw_goods.SetColumnState(L"ScheduleShipDate", false);
-
-		dw_goods.SetColumnState(L"PackTechNote", false);
-		dw_goods.SetColumnState(L"EnquiryPriceListID", false);
-		dw_goods.SetColumnState(L"Submitter", false);
-		dw_goods.SetColumnState(L"POSupplierID", false);
-		dw_goods.SetColumnState(L"QuoteLineID", false);
-
-		dw_list.SetColumnState(L"CreatorID", false);
-		dw_list.SetColumnState(L"SOID", false);
-
-
-		string groupname = publiccode::GetUser().groupname;
-		if (groupname == L"采购小组")
-		{
-			dw_list.SetColumnState(L"USDAmount", false);
-			dw_list.SetColumnState(L"RMBAmount", false);
-
-			dw_goods.SetColumnState(L"UnitPrice", false);
-			dw_goods.SetColumnState(L"Amount", false);
-			dw_goods.SetColumnState(L"UnitCommPrice", false);
-			dw_goods.SetColumnState(L"CommissionRate", false);
-
-			dw_source.SetColumnState(L"UnitPrice", false);
-			dw_source.SetColumnState(L"Amount", false);
-			dw_source.SetColumnState(L"FOBAmount", false);
-			dw_source.SetColumnState(L"BuyUnitPrice", false);
-			dw_source.SetColumnState(L"BuyAmount", false);
-			dw_source.SetColumnState(L"CostRate", false);
-		}
-
-		rows = L"500";
-		myDataUrl = L"/sale/data/SaleOrder/folder/list";
-		urlTree = L"/sale/data/SaleOrder/folder";
-		tv_folder = GetControl(L"tv_folder");
-		tv_folder.SetLineAtRoot(true);
-		InitialFolder();
-
-		return 1;
-	}
-
-	int onloaded()
-	{
-		listwin::onloaded();
-
-		//attach my control event
-		AttachListon();
-
-		dw_list.SetColumnState(L"SOID", false);
-
-		HTREEITEM hItem = tv_folder.GetRootItem();
-		ExpandFolderItem(hItem, L"Category:Customer");
-		tv_folder.ExpandItem(hItem);
-		//tv_folder.ItemFocus(tv_folder.GetChildItem(hItem));
-		tv_folder.ItemFocus(hItem);
-
-
-		return -1;
-	}
-
-	int ProcessUsedArg(xaserverarg arg)
-	{
-		HTREEITEM hItem = tv_folder.GetCaretItem();
-		if (hItem ) return 1;
-		KXMLDOMElement e =  tv_folder.GetItemData(hItem);
-		xstring  no = e.getAttribute(L"no");
-		if (no.find(L"Customer:") >= 0)
-		{
-			arg.AddArg(L"CustomerID", e.getAttribute(L"id"));
-			xstring name = e.getAttribute(L"name");
-			if (name.find(L"(L") >= 0) name = name.left(name.find(L"(L"));
-			arg.AddArg(L"CustomerName", name);
-		}
-		return 1;
-	}
-};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/ProcessManagement.cpp b/jrj/project/business/SystemSettings/ProcessManagement.cpp
new file mode 100644
index 0000000..5239d23
--- /dev/null
+++ b/jrj/project/business/SystemSettings/ProcessManagement.cpp
@@ -0,0 +1,184 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) ProcessManagement : public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+
+	public:
+		ProcessManagement(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static ProcessManagement* CreateInstance(void* implPtr, void* hWnd)
+		{
+			ProcessManagement* pWin = new ProcessManagement(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)
+				{
+					xstring s = agent.xml();
+					m_agentNode = SetAgentNode(anode, s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+
+			if (comdid == L"xmDelete")
+			{
+				int MB_OKCANCEL = 1;
+				int IDOK = 1;
+				int ret = MessageBox(GetHWND(), L"确认删除流程?", L"提示", MB_OKCANCEL);
+				if (ret == IDOK)
+				{
+					int row = dw_list.GetRow();
+					xstring TaskID = dw_list.GetItemString(row, L"TaskID");
+
+
+					xml x = ViewObject::RetrieveData(L"/sale/data/business/DelProcessManagement", L"TaskID", TaskID);
+					xstring status = x.xml();
+					if (status.find(L"ok") == 1)
+					{
+						alert(L"删除成功");
+						dw_list.DeleteRow(row);
+					}
+					else
+					{
+						alert(L"删除失败");
+					}
+
+				}
+				return 1;
+
+			}
+			else if (comdid == L"xmRefresh")
+			{
+				OnRetrieve();
+			}
+			else if (comdid == L"AA")
+			{
+				AA();
+			}
+			return 0;
+		}
+		int AA()
+		{
+
+			//xstring FobUnitPriceEx=dw_cell.GetItemString(row,colFOBPrice);
+			xstring FobUnitPriceEx = L"$123.0";
+			if (FobUnitPriceEx == L"$") FobUnitPriceEx = L"123";
+			//alert(FobUnitPriceEx.find(L"$").toString());
+			if (FobUnitPriceEx.find(L"$") >= 0) FobUnitPriceEx = FobUnitPriceEx.right(FobUnitPriceEx.length() - 1);
+			trace(FobUnitPriceEx);
+		}
+		//触发鼠标离开后tran事件,通过查找某个参数得到对应的列			
+		int OnBaseItemChanged(TEvent* evt, int p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			xstring colname = hdr.colname;
+			xstring value = hdr.data;
+
+			xstring dwname = L"dw_list";
+			if (value != L"")
+			{
+				KXMLDOMNodeList nlist = GetElement().selectNodes(L"//*[@name='" + dwname + L"']/trans[@for='" + colname + L"']");
+				ViewObject::TransData(nlist, dw_list, hdr.row, colname, value);
+			}
+
+			return 1;
+		}
+
+
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+
+
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&ProcessManagement::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&ProcessManagement::OnSetFocus);
+			AttachEvent(L"dw_list", L"DWV_ITEMCHANGED", (FEvent)&ProcessManagement::OnBaseItemChanged);
+			return 1;
+		}
+
+
+		int  OnRetrieve()
+		{
+			xml x ;
+			
+			xaserverarg arg ;
+			
+
+			if (getUrl(L"/sale/data/business/ProcessManagement", arg.GetString(), x) != 1)
+			{
+				trace(x.text());
+				return -1;
+			}
+			else
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+				dw_list.SetReadOnly(true);
+				dw_list.SetSelectionMode(1);
+			}
+			return 1;
+		}
+
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/Business3/template/ProcessManagement");
+			dw_list.SetColumnState(L"TaskID", false);
+
+			OnRetrieve();
+
+			OnAttachEvent();
+
+			return 1;
+		}
+
+		int onloaded()
+		{
+			SetAgent();
+
+
+
+			return 1;
+		}
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/ProcessManagement_A.cpp b/jrj/project/business/SystemSettings/ProcessManagement_A.cpp
deleted file mode 100644
index 8f92f1c..0000000
--- a/jrj/project/business/SystemSettings/ProcessManagement_A.cpp
+++ /dev/null
@@ -1,513 +0,0 @@
-#include <wobject/xstring.hpp>
-#include <xcontrol/xtreeview.hpp>
-#include <xcontrol/xdwgrid.hpp>
-
-#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
-#include "viewobject/view.base.hpp"
-
-class __declspec(dllexport) SO3list : public listwin
-{
-public:
-	string m_sType; //树选中的类型
-	string m_sTypeTxt; //树选中的数据
-	string urlTree;
-	string myDataUrl;
-	string rows;
-	xcombobox ddlb_1;
-	xcombobox cbx_datashow;
-
-	int changeddlb;
-
-	xtreeview tv_folder;
-	xdwgrid dw_goods;
-	xdwgrid dw_source;
-public:
-	SO3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
-public:
-	static SO3list* CreateInstance(void* implPtr, void* hWnd)
-	{
-		SO3list* pWin = new SO3list(implPtr, (HWND)hWnd);
-		return pWin;
-	}
-
-	//process tree
-	//查找当前树项的顶级目录
-	HTREEITEM LookupTopFolder(HTREEITEM hItem)
-	{
-		HTREEITEM hRoot = tv_folder.GetRootItem();
-		while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
-		return hItem;
-	}
-
-	int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
-	{
-		KXMLDOMNodeList nlist = ele.selectNodes(L"item");
-		int len = nlist.length();
-		if (len > 0) tv_folder.SetItemChild(hItem, 1);
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			string name = e.getAttribute(L"name");
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
-			ExpandCatChildFolder(h, e, 35);
-		}
-		return 1;
-	}
-
-	int ExpandFolderItem(HTREEITEM hItem, string no)
-	{
-		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),urlTree, L"no", no, L"rows", rows);
-		if (!x) return 0;
-		KXMLDOMNodeList nlist = x.selectNodes(L"/data/item");
-		int len = nlist.length();
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			string name = e.getAttribute(L"name");
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
-			ExpandCatChildFolder(h, e, 35);
-		}
-		return 1;
-	}
-
-	//树展开
-	int OnTreeExpanding(TEvent* evt, int p)
-	{
-		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
-		HTREEITEM hItem = nmtv.itemNew.hItem;
-		HTREEITEM hTopItem = LookupTopFolder(hItem);
-		string name = tv_folder.GetItemLabel(hTopItem);
-		HTREEITEM child = tv_folder.GetChildItem(hItem);
-
-		KXMLDOMElement e = tv_folder.GetItemData(hItem);
-		if (!child)ExpandFolderItem(hItem, e.getAttribute(L"no"));
-
-		return 1;
-	}
-
-	//展开子文件
-	int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
-	{
-		KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
-		int len = nlist.length();
-		for (int i = 0; i < len; i++)
-		{
-			KXMLDOMElement e = nlist.item(i);
-			string name = e.getAttribute(L"name");
-			xstring sImage = e.getAttribute(L"image");
-			xstring child = e.getAttribute(L"child");
-			int image = 15;
-			if (sImage) image = sImage.toInt();
-			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
-			if (child != L"no") tv_folder.SetItemChild(h, 1);
-			//ExpandChildFolder(h, e);
-		}
-		return 1;
-	}
-
-	//初始化文件夹
-	int  InitialFolder()
-	{
-		KXMLDOMElement xframeElement = GetElement();
-		KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
-		if (e)
-			ExpandChildFolder(0, e);
-		return 1;
-	}
-
-	int OnTreeSelChanged(TEvent* evt, LPARAM p)
-	{
-		if (changeddlb) return 1;
-		return OnPreRetrieve();
-	}
-
-	int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg  arg)
-	{
-		if (updateItem == L"del")
-		{
-			int DelRow = dw_list.GetRow();
-			dw_list.DeleteRow(DelRow);
-			return 1;
-		}
-		else if (updateItem == L"setstate")
-		{
-			int row = dw_list.GetRow();
-			if (row < 1) return 1;
-			KXMLDOMElement ele = dw_list.GetRowElement(row);
-			string id = GetEntityIDName(1);
-			string entity = ele.selectSingleNode(id).text();
-			//trace(entity);
-			SetAgent(L"list", entity);
-			if (arg.GetArgString(L"state") != L"")
-				//this.dw_list.SetItemString(row, "ApprovalStatus", arg.GetArgString(L"state"));
-				dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state"));
-			if (arg.GetArgString(L"billstatus") != L"")
-			{
-				xstring billstatus = arg.GetArgString(L"billstatus");
-				xstring statusName = GetBillStatusName(billstatus);
-				dw_list.SetItemString(row, L"ApprovalStatus", billstatus);
-				dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName);
-			}
-
-			dw_list.Redraw();
-		}
-		return 1;
-	}
-
-	bool IsEmptyQueryStr(string queryStr)
-	{
-		if (queryStr == L"") return true;
-		if (queryStr == L"<items join='and'/>") return true;
-		if (queryStr == L"<items join=\"and\"/>") return true;
-		//trace(queryStr);
-		return false;
-	}
-
-	//检索
-	int OnPreRetrieve()
-	{
-		HTREEITEM hItem = tv_folder.GetSelectedItem();
-		if (!hItem) return 1;
-
-		HCURSOR hCursor = xutil::SetCursorWait();
-		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
-		string no = e1.getAttribute(L"no");
-		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt, L"rows", rows);
-		if (x)
-		{
-			dw_list.Retrieve(x);
-			dw_list.Redraw();
-		}
-		else
-		{
-			dw_list.Reset();
-			dw_list.Redraw();
-			dw_goods.Reset();
-			dw_goods.Redraw();
-		}
-		dw_list.SetReadOnly(true);
-		xutil::RestoreCursor(hCursor);
-		return 1;
-		/*
-		xaserverarg arg = new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());
-		arg.AddArg(L"pageindex", m_pageIndex.toString(),""); //第几页
-		arg.AddArg(L"pagenumber", m_pageNumber.toString(),""); //每页数量
-		arg.AddArg(L"QueryTxt", m_QueryTxt,""); //查询条件
-		arg.AddArg(L"sType",m_sType,"");
-		arg.AddArg(L"sTypeTxt",m_sTypeTxt,"");
-		xml x =  ViewObject::MakeXml();
-
-		KXMLDOMElement   n = m_configDoc.selectSingleNode(L"//list/dwview[@type='dwgrid'][1]");
-		if(n)
-		{
-			KXMLDOMElement e = n;
-			if(e.selectSingleNode(L"@dataUrl"))
-			{
-				string dataUrl = e.selectSingleNode(L"@dataUrl").text;
-				if(dataUrl.left(1)!="/") dataUrl = GetEntityName(1)+"/"+dataUrl;
-				getUrl(dataUrl, arg.GetString(), x);
-				KXMLDOMElement ele=x.GetXmlDoc().documentElement;
-				if(dw_pages.ptr_native_)
-				{
-					if(ele.selectSingleNode(L"@TotalPage"))
-					{
-						string s=ele.selectSingleNode(L"@TotalPage").text; //总数量
-						dw_pages.SetMaxPage(s.toInt());
-					}
-				}
-				dw_list.Retrieve(x);
-				dw_list.Redraw();
-				dw_list.SetReadOnly(true);
-			}
-			else
-			{
-				SetEntityData(arg);
-			}
-		}
-		else
-		{
-			SetEntityData(arg);
-		}
-		*/
-	}
-
-	//历史数据
-	int Onhistroydata()
-	{
-		int row = dw_list.GetNextSelectRow(1);
-		if (row > 0)
-		{
-			KXMLDOMElement e = dw_list.GetRowElement(row);
-			xaserverarg& arg = * new xaserverarg;
-			string sCustomerID = e.selectSingleNode(L"CustomerID").text();
-			arg.AddArg(L"CustomerID", sCustomerID, L"");
-			string sCustomerName = e.selectSingleNode(L"CustomerName").text();
-			arg.AddArg(L"CustomerName", sCustomerName, L"");
-			arg.AddArg(L"EntityName", GetEntityName(1), L"");
-			arg.AddArg(L"EntityID", GetEntityID(1), L"");
-			openUrl(L"/sale/view/SO/xpage/histroydata", &arg);
-		}
-		return 1;
-	}
-
-	//xcombobox下拉
-	int OnSelectDdlb(TEvent* evt, LPARAM p)
-	{
-		changeddlb = 1;
-		HWND wid = ddlb_1.GetHWND();
-		int CB_GETCURSEL = 0x0147;
-		int nIndex =SendMessage(wid, CB_GETCURSEL, 0, 0);
-		KXMLDOMElement e = ddlb_1.GetElement();
-		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
-		string no = e2.selectSingleNode(L"@element").text();
-
-		HTREEITEM hItem = tv_folder.GetRootItem();
-		while (tv_folder.GetChildItem(hItem))
-			tv_folder.DeleteItem(tv_folder.GetChildItem(hItem));
-		ExpandFolderItem(hItem, no);
-
-		changeddlb = 0;
-		return 1;
-	}
-
-
-	int OnSelectDataShowDdlb(TEvent* evt, LPARAM p)
-	{
-		HWND wid = cbx_datashow.GetHWND();
-		int CB_GETCURSEL = 0x0147;
-		int nIndex = SendMessage(wid, CB_GETCURSEL, 0, 0);
-		KXMLDOMElement e = cbx_datashow.GetElement();
-		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
-		rows = e2.selectSingleNode(L"@rows").text();
-		OnPreRetrieve();
-
-		return 1;
-	}
-
-	int PreOnCmdDispatch(xstring comdid)
-	{
-		if (comdid == L"action:bill.new")
-		{
-			xstring s = publiccode::GetUser().id;
-			xstring no = publiccode::GetUser().no;
-			if (no != L"00303" && no != L"admin")
-			{
-				KXMLDOMDocument supplier_x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s);
-				if (supplier_x)
-				{
-					if ((xstring)supplier_x.text() != L"业务员")
-					{
-						alert(L"当前角色不是业务员不能新增单子,请重新选择角色");
-						return 0;
-					}
-				}
-			}
-		}
-		if (comdid == L"action:bill.annex")
-		{
-			xstring deptname = publiccode::GetUser().deptname;
-			if (deptname == L"采购部")
-			{
-				return 1;
-			}
-
-			int row = dw_list.GetRow();
-			if (row < 1) return 1;
-			xstring guid = dw_list.GetItemString(row, L"SOID");
-			xaserverarg& arg = * new xaserverarg();
-
-			if (guid.length() <= 0)return 1;
-			
-			arg.AddArg(L"entityid", guid);
-			arg.AddArg(L"Type", L"Y");
-			OpenWindow(L"dev:xpage[maint.Document.SO3.v3.vx]", arg);
-
-			return 0;
-		}
-		if (comdid == L"action:bill.histroydata") return Onhistroydata();
-		else if (comdid == L"action:bill.refresh")
-		{
-			changeddlb = 1;
-			HTREEITEM RItem = tv_folder.GetRootItem();
-			while (tv_folder.GetChildItem(RItem))
-				tv_folder.DeleteItem(tv_folder.GetChildItem(RItem));
-			ExpandFolderItem(RItem, L"Category:Customer");
-			tv_folder.ExpandItem(RItem);
-			tv_folder.ItemFocus(RItem);
-			changeddlb = 0;
-			return OnPreRetrieve();
-		}
-		if (comdid == L"action:bill.saveas")
-		{
-			dw_list.SaveAs(L"");
-			return 1;
-		}
-		if (comdid == L"action:bill.SourceRemark") return OnSourceRemark();
-
-		return 1;
-	}
-
-	int OnSourceRemark()
-	{
-		xstring name = L"外销合同";
-		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
-		KXMLDOMNodeList items = x.selectNodes(L"data/Item");
-		KXMLDOMNode t = items.item(0);
-		xstring Content = L"";
-		if (t.selectSingleNode(L"Content"))
-		{
-			Content = t.selectSingleNode(L"Content").text();
-		}
-		xaserverarg& arg = *new xaserverarg;
-		arg.AddArg(L"value", Content);
-		OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg);
-
-		return 1;
-	}
-
-	int OnRowChanged(TEvent* evt, LPARAM p)
-	{
-		DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
-		int row = hdr.row;
-
-
-		if (row < 1) return 1;
-
-		//fixed one event only one process
-		listwin::OnRowChanged(evt, p);
-
-		HCURSOR 	hCursor = xutil::SetCursorWait();
-
-		xstring SONo = dw_list.GetItemString(row, L"SONo");
-		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/item", L"id", SONo);
-		if (x)
-			dw_goods.Retrieve(x);
-		else
-			dw_goods.Reset();
-		dw_goods.Redraw();
-		dw_goods.SetReadOnly(true);
-
-		x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/itemwithsource", L"id", SONo);
-		if (x)
-			dw_source.Retrieve(x);
-		else
-			dw_source.Reset();
-		dw_source.Redraw();
-		dw_source.SetReadOnly(true);
-
-		xutil::RestoreCursor(hCursor);
-
-		return 1;
-	}
-
-
-	int AttachListon()
-	{
-		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&SO3list::OnTreeSelChanged); //树选择
-		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SO3list::OnRowChanged);//绑定行更改触发事件OnRowChanged
-		//AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&listwin::OnDoubleClicked);
-		AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDdlb);//绑定下拉框更改触发事件OnSelectDdlb
-		AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDataShowDdlb);//绑定选择数据显示下拉列表事件OnSelectDataShowDdlb
-		return 1;
-	}
-
-	int onload()
-	{
-		changeddlb = 0;
-		listwin::onload();
-		ddlb_1 = GetControl(L"cbx_1");
-		cbx_datashow = GetControl(L"cbx_datashow");
-		dw_goods = GetControl(L"dw_goods");
-		dw_goods.openUrl(GetServerUrl(),L"/sale/view/SaleOrder/template/item");
-		dw_source = GetControl(L"dw_source");
-		dw_source.openUrl(GetServerUrl(), L"/sale/view/SaleOrder/template/sourceitem");
-
-		dw_goods.SetColumnState(L"ItemID", false);
-		dw_goods.SetColumnState(L"LineType", false);
-		dw_goods.SetColumnState(L"Brand", false);
-		dw_goods.SetColumnState(L"Assortment", false);
-		dw_goods.SetColumnState(L"ClassifyID", false);
-		dw_goods.SetColumnState(L"UnitFreight", false);
-		//dw_goods.SetColumnState(L"CName",false);//隐藏列
-
-		dw_goods.SetColumnState(L"Brand", false);
-		dw_goods.SetColumnState(L"SKUNo", false);
-		dw_goods.SetColumnState(L"SOLineNo", false);
-		dw_goods.SetColumnState(L"CustomerPONo", false);
-		dw_goods.SetColumnState(L"ScheduleShipDate", false);
-
-		dw_goods.SetColumnState(L"PackTechNote", false);
-		dw_goods.SetColumnState(L"EnquiryPriceListID", false);
-		dw_goods.SetColumnState(L"Submitter", false);
-		dw_goods.SetColumnState(L"POSupplierID", false);
-		dw_goods.SetColumnState(L"QuoteLineID", false);
-
-		dw_list.SetColumnState(L"CreatorID", false);
-		dw_list.SetColumnState(L"SOID", false);
-
-
-		string groupname = publiccode::GetUser().groupname;
-		if (groupname == L"采购小组")
-		{
-			dw_list.SetColumnState(L"USDAmount", false);
-			dw_list.SetColumnState(L"RMBAmount", false);
-
-			dw_goods.SetColumnState(L"UnitPrice", false);
-			dw_goods.SetColumnState(L"Amount", false);
-			dw_goods.SetColumnState(L"UnitCommPrice", false);
-			dw_goods.SetColumnState(L"CommissionRate", false);
-
-			dw_source.SetColumnState(L"UnitPrice", false);
-			dw_source.SetColumnState(L"Amount", false);
-			dw_source.SetColumnState(L"FOBAmount", false);
-			dw_source.SetColumnState(L"BuyUnitPrice", false);
-			dw_source.SetColumnState(L"BuyAmount", false);
-			dw_source.SetColumnState(L"CostRate", false);
-		}
-
-		rows = L"500";
-		myDataUrl = L"/sale/data/SaleOrder/folder/list";
-		urlTree = L"/sale/data/SaleOrder/folder";
-		tv_folder = GetControl(L"tv_folder");
-		tv_folder.SetLineAtRoot(true);
-		InitialFolder();
-
-		return 1;
-	}
-
-	int onloaded()
-	{
-		listwin::onloaded();
-
-		//attach my control event
-		AttachListon();
-
-		dw_list.SetColumnState(L"SOID", false);
-
-		HTREEITEM hItem = tv_folder.GetRootItem();
-		ExpandFolderItem(hItem, L"Category:Customer");
-		tv_folder.ExpandItem(hItem);
-		//tv_folder.ItemFocus(tv_folder.GetChildItem(hItem));
-		tv_folder.ItemFocus(hItem);
-
-
-		return -1;
-	}
-
-	int ProcessUsedArg(xaserverarg arg)
-	{
-		HTREEITEM hItem = tv_folder.GetCaretItem();
-		if (hItem ) return 1;
-		KXMLDOMElement e =  tv_folder.GetItemData(hItem);
-		xstring  no = e.getAttribute(L"no");
-		if (no.find(L"Customer:") >= 0)
-		{
-			arg.AddArg(L"CustomerID", e.getAttribute(L"id"));
-			xstring name = e.getAttribute(L"name");
-			if (name.find(L"(L") >= 0) name = name.left(name.find(L"(L"));
-			arg.AddArg(L"CustomerName", name);
-		}
-		return 1;
-	}
-};
\ No newline at end of file

--
Gitblit v1.9.3