From 59014e96b8ead79f8e885c54ae02f3facec15f8d Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期五, 28 六月 2024 14:48:05 +0800
Subject: [PATCH] add print and workflow

---
 jrj/project/printview/Template.Print.Dialog.cpp  |  595 ++++++++++++++++
 jrj/project/workflow/workflow.chkdlg_vd.cpp      |   76 ++
 jrj/project/printview/Template.Print.ViewEx.cpp  | 1217 ++++++++++++++++++++++++++++++++
 jrj/project/workflow/workflow.actionlog_vd.cpp   |   70 +
 jrj/ext-jrj/ext-jrj.vcxproj                      |   14 
 jrj/project/printview/Maint.Template.PrintEx.cpp |  107 ++
 jrj/project/workflow/workflow.actionlog.cpp      |   66 +
 jrj/project/workflow/workflow.chkdlg.cpp         |   68 +
 8 files changed, 2,211 insertions(+), 2 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index 49ca2cc..1dba532 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -151,8 +151,8 @@
       <OptimizeReferences>true</OptimizeReferences>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <EnableUAC>false</EnableUAC>
-      <AdditionalLibraryDirectories>D:\xclient64r</AdditionalLibraryDirectories>
-      <AdditionalDependencies>xarch.shape.lib;xarch.base.lib;xarch.util.lib;xarch.network.lib;xarch.xframe.lib;xarch.xcontrol.lib;xoffice.xcell.lib;xoffice.xgrid.lib;xoffice.xreport.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>D:\xclient64r\sdk\lib</AdditionalLibraryDirectories>
+      <AdditionalDependencies>xarch.shape.lib;xarch.base.lib;xarch.util.lib;xarch.network.lib;xarch.xframe.lib;xarch.xcontrol.lib;xoffice.xcell.lib;xoffice.xgrid.lib;xoffice.xreport.lib;shlwapi.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
       <Command>copy $(OutDirFullPath)ext-jrj.dll D:\xclient64r\ext\ext-jrj.dll</Command>
@@ -250,20 +250,25 @@
     </ClCompile>
     <ClCompile Include="..\project\business\HR\AdministrativeDepartment.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\HR\AdministrativeDepartmentFolder.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\HR\BlankExcelTemplate.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\HR\GraduationSchool.cpp" />
     <ClCompile Include="..\project\business\HR\GraduationSchoolWin.vx.cpp" />
     <ClCompile Include="..\project\business\HR\ManpowerFile.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\HR\ManpowerFileWindow.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Product.list.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
@@ -287,18 +292,23 @@
     </ClCompile>
     <ClCompile Include="..\project\business\SO\delivery.base.maint.so.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\SO\maint.Document.SO3.v3.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\SO\paymentterm.base.maint.so.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\SO\Product.Select.SO.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\SO\select.item.so.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\Supplier.maint.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
diff --git a/jrj/project/printview/Maint.Template.PrintEx.cpp b/jrj/project/printview/Maint.Template.PrintEx.cpp
new file mode 100644
index 0000000..7ec0627
--- /dev/null
+++ b/jrj/project/printview/Maint.Template.PrintEx.cpp
@@ -0,0 +1,107 @@
+class MaintTemplatePrintWin :  public xframe
+	{
+		xcell cell;
+		xnode	m_agentNode;	//Agent Condition
+		string args;
+
+		int SetAgent()
+		{
+			string xfNodeAgentArea  = "agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNodeContent (anode,m_agentNode);
+			}
+			else
+			{
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					m_agentNode =  SetAgentNodeContent (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(ref TEvent evt,int param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		int SendCtrlCmd(xcontrol xc, string cmd)
+		{
+			win32::SendMessage(xc.GetId(),0x401,cmd,0);
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if(comdid.left(3) == "IK_")
+			{
+				string cmd = comdid.mid(3, comdid.length());
+				SendCtrlCmd(GetControl("cell"),cmd);
+				return 1;
+			}
+			else if(comdid=="xmFileOpen")
+			{
+				cell.OpenFile();
+				cell.Redraw();
+				return 1;
+			}
+			else if(comdid=="xmFileSave")
+			{
+				cell.SaveFile();
+				return 1;
+			}
+			else if(comdid=="xmFileSaveAs")
+			{
+				cell.SaveFileAs();
+				return 1;
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt,int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND",OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent("WM_SETFOCUS",OnSetFocus);
+		}
+		
+		int onload()
+		{
+			cell = GetControl("cell");
+			SetAgent();			
+		
+			OnAttachEvent();	
+			
+			if(GetParam())
+			{
+				args = GetParam();
+				cell.openUrl("/sale/data/SysPrintTemplate/getdevxsl",args);
+			}
+			else
+				args ="";
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/printview/Template.Print.Dialog.cpp b/jrj/project/printview/Template.Print.Dialog.cpp
new file mode 100644
index 0000000..a243a8b
--- /dev/null
+++ b/jrj/project/printview/Template.Print.Dialog.cpp
@@ -0,0 +1,595 @@
+class TemplatePrintDialog : public responsewin
+{
+		xaserverarg arg_param;
+		string m_EntityName;
+		string m_EntityID;
+		string m_EntityNo;
+		string m_Dir;
+		string m_filePath;
+		string strNode;
+		xdwgrid  dw_list;
+		xdwgrid  dw_doclist;
+		xole ole_1;
+		bool bupdate;
+
+		int OnHtml()
+		{
+			string s1="<catalog>"+
+			 "   <book id='bk101'>"+
+			 "     <author>Gambardella, Matthew</author>"+
+			 "     <title>XML Developer's Guide</title>"+
+			 "     <genre>Computer</genre>"+
+			 "     <price>44.95</price>"+
+			 "     <publish_date>2000-10-01</publish_date>"+
+			 "     <description>An in-depth look at creating applications "+
+			 "     with XML.</description>"+
+			 "  </book>"+
+			 "  <book id='bk102'>"+
+			 "     <author>Ralls, Kim</author>"+
+			 "     <title>Midnight Rain</title>"+
+			 "     <genre>Fantasy</genre>"+
+			 "     <price>5.95</price>"+
+			 "     <publish_date>2000-12-16</publish_date>"+
+			 "     <description>A former architect battles corporate zombies, "+
+			 "     an evil sorceress, and her own childhood to become queen "+
+			 "     of the world.</description>"+
+			 "  </book>"+
+			 "  </catalog>";
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			x.LoadXml(s1);
+//trace(x.GetXml());
+
+			//string s2="<?xml version='1.0'?>"+
+			string s2=
+			"<xsl:stylesheet version='1.0'"+
+			"                xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >"+
+			"<xsl:output method='xml' indent='yes'/>"+
+			"<xsl:template match='catalog'>"+
+			"<HTML>"+
+			" <HEAD>"+
+			"   <TITLE>Books catalog - listing for Books.xml</TITLE>"+
+			" </HEAD>"+
+			" <BODY><FONT FACE='Verdana'>"+
+			" <H3>My Books Catalog</H3>"+
+			" <TABLE CELLPADDING='5' CELLSPACING='2'>"+
+			"   <xsl:for-each select='book'>"+
+			"   <TR>"+
+			"      <TD ALIGN='LEFT'><FONT SIZE='2'><B>ID:</B>&#160;&#160;<xsl:value-of select='@id'/><BR/>"+
+			"      <B>Author:</B>&#160;&#160;<xsl:value-of select='author'/><BR/>"+
+			"      <B>Title:</B>&#160;&#160;<xsl:value-of select='title'/><BR/>"+
+			"      <B>Genre:</B>&#160;&#160;<xsl:value-of select='genre'/><BR/>"+
+			"      <B>Price:</B>&#160;&#160;<xsl:value-of select='price'/><BR/>"+
+			"      <B>Published on:</B>&#160;&#160;<xsl:value-of select='publish_date'/><BR/>"+
+			"      <B>Description:</B>&#160;&#160;<xsl:value-of select='description'/></FONT></TD>"+
+			"   </TR>"+
+			"   </xsl:for-each>"+
+			"</TABLE>"+
+			"</FONT>"+
+			"</BODY>"+
+			"</HTML>"+
+			"</xsl:template>"+
+			"</xsl:stylesheet>" ;
+			xml xsl = new xml;
+			xsl.setNativePointer(xml::CreateInstance());
+			xsl.LoadXml(s2);
+//trace(xsl.GetXml());
+
+			string strHtml = x.GetXmlDoc().transformNode(xsl.GetXmlDoc());
+			//strHtml = str.mid(21,99999);
+			ole_1.LoadHtml(strHtml);
+			//html_1.SetContent(strHtml);
+			//alert(strHtml);
+
+			return 0;
+		}
+		
+		int OnRetrieve()
+		{
+			string username = publiccode::GetUser().name;
+			if(username != "admin" && m_Dir != username )
+			{
+				bupdate = false;
+			}else
+			{
+				bupdate = true;
+			}
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg("Entity",m_EntityName);			
+			arg.AddArg("Dir",m_Dir);
+			dw_list.Reset();
+			if (url::get("/sale/data/SysPrintTemplate/listDialog",arg.GetString(),x) != 1)
+			{
+				trace(x.GetXmlDoc().text);
+				return -1;
+			}else	
+			{
+				string s = x.GetXml();
+				dw_list.Retrieve(x);
+			}
+			dw_list.Redraw();
+			//dw_list.SetReadOnly(true);
+			if (dw_list.GetRowCount()>0)
+				dw_list.SelectRow(1,true);
+			return 1;
+		}
+		
+		int OnNewTempl()
+		{
+			OpenWindow("dev:xpage[Maint.Template.Print.vx]");
+			return 1;
+		}
+				
+		int OnMaintTempl()
+		{
+			int row =  dw_list.GetRow();
+			if(row<0 || row>dw_list.GetRowCount()) 
+			{
+				alert("请选择要维护的模板!");
+				return 1;
+			}
+			else
+			{
+				msxml::IXMLDOMElement ele = dw_list.GetRowElement(row);	
+				string sguid = ele.selectSingleNode("ID").text;
+				string sTemplName = ele.selectSingleNode("TemplName").text;
+				//string sFile = m_filePath + sguid+".xsl";	
+				string sFile = m_filePath + ele.selectSingleNode("urlPath").text;
+				arg_param.AddArg("xsl",sFile); 
+				arg_param.AddArg("return","cancel");
+				
+				OpenWindow("dev:xpage[Maint.Template.Print.vx]",cast(arg_param.GetString() as int));
+				CloseWindow();
+			
+			}			
+			return 1;
+		}
+				
+		int OnAddDir()
+		{
+			return 0;
+		}
+		int OnAddTempl()
+		{
+			if (m_Dir=="")
+			{
+				alert("请选择模板目录!");
+				return 0;
+			}
+			string sguid = publiccode::GetGuid();
+			string sname= sguid +".xsl";
+			string suri= "rpttemplate"+"\\"+m_EntityName; //rpttemplate\SO
+			//suri = "supplier00";
+			string ret = xaserver::UploadFile(suri, sname, this.GetHWND(),"",false);
+			if (ret == "-1")
+			{
+				alert("上传的文件没选择!");
+				return 1;
+			}
+			else
+			{
+				xml x=new xml;
+				x.setNativePointer(xml::CreateInstance());				
+				xaserverarg args = new xaserverarg;
+				args.setNativePointer(args.CreateInstance());		
+				args.AddArg("sID",sguid);			
+				args.AddArg("sEntity",m_EntityName);			
+				args.AddArg("sDir",m_Dir);
+				args.AddArg("urlPath", sname);
+				//alert(m_Dir);
+				while(ret.find("\\",0)>=0)
+					ret = ret.mid(ret.find("\\",0) + 1,9999);
+				
+				args.AddArg("sTemplName",ret);			
+				//trace(args.GetString());
+				if (url::get("/sale/data/SysPrintTemplate/Save",args.GetString(),x) != 1)
+				{
+					trace("error:"+x.GetXml());
+					alert("保存出错了!");
+					return 1;
+				}						
+				else
+				{	
+					alert("上传模板成功!");
+					OnRetrieve();
+				}				
+			}
+			return 1;
+		}
+				
+		int OnDelTempl()
+		{
+				
+			int row =  dw_list.GetRow();
+			if(row<0 || row>dw_list.GetRowCount()) 
+			{
+				alert("请选择要删除的模板!");
+				return 0;
+			}
+			else
+			{
+				if (win32::MessageBox(GetHWND(),"确定要删除选中的模板?","提示",1) == 2)  
+					return 0;					
+				msxml::IXMLDOMElement ele = dw_list.GetRowElement(row);			
+				string sguid = ele.selectSingleNode("ID").text;
+				xml x=new xml;
+				x.setNativePointer(xml::CreateInstance());				
+				xaserverarg args = new xaserverarg;
+				args.setNativePointer(args.CreateInstance());		
+				args.AddArg("sID",sguid);		
+				if (url::get("/sale/data/SysPrintTemplate/Delete",args.GetString(),x) != 1)
+				{
+					trace("error:"+x.GetXml());
+					alert("删除出错了!");
+					return 0;
+				}						
+				else
+				{	
+					alert("删除成功!");
+					OnRetrieve();
+				}
+			}
+				
+			return 0;
+		}
+		
+		int OnDocListDoubleClicked(ref TNotifyEvent evt,int p)
+		{
+			int  hCursor = xutil::SetCursorWait();
+			OnOpenDocument();
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}	
+				
+		int OnDoubleClicked(ref TNotifyEvent evt,int p)
+		{
+			int  hCursor = xutil::SetCursorWait();
+			OnOk();
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}	
+
+		int OnOpenDocument()
+		{
+			if(dw_doclist.GetRowCount() < 1) return 1;
+			string documentid = dw_doclist.GetRowElement(dw_doclist.GetRow()).getAttribute("guid");
+			//string billid = dw_docList
+			arg_param.AddArg("DocumentID",documentid);
+			arg_param.AddArg("return","ok");
+			arg_param.AddArg("action","open");
+			CloseWindow();
+			return 1;
+		}
+				
+		int OnOk()
+		{
+			int row =  dw_list.GetRow();
+			if(row<0 || row>dw_list.GetRowCount()) 
+			{
+				alert("请选择要打印的模板!");
+				return 1;
+			}
+			else
+			{
+				msxml::IXMLDOMElement ele = dw_list.GetRowElement(row);	
+				trace("\r\n---------------");
+				trace(ele.xml);
+			
+				string sguid = ele.selectSingleNode("ID").text;
+				string pre = "";
+				if(ele.selectSingleNode("TemplPre")) pre = ele.selectSingleNode("TemplPre").text;
+				string sTemplName = ele.selectSingleNode("TemplName").text;
+				//string sFile = m_filePath + sguid+".xsl";	
+				trace(sTemplName);
+				string sFile = m_filePath + ele.selectSingleNode("urlPath").text;
+				arg_param.AddArg("xsl",sFile); 
+				arg_param.AddArg("return","ok");
+				arg_param.AddArg("template-name",sTemplName);
+				arg_param.AddArg("template-guid",sguid);
+				arg_param.AddArg("template-pre",pre);
+				arg_param.AddArg("action","new");
+				trace(arg_param.GetString());
+				CloseWindow();
+				/*xaserver::CreateDirectory("C:/Temp");
+				int openRet = xaserver::DownLoadFile(GetServerUrl(),m_filePath+file,sTemplName,"C:/Temp/"+sTemplName);
+				if(openRet < 0)
+				{
+					alert("文件打开失败!");
+					return 0;
+				}
+				
+				int GENERIC_READ = 0x80000000;
+				int GENERIC_WRITE = 0x40000000;
+				int FILE_SHARE_READ = 0x00000001;
+				int FILE_SHARE_WRITE = 0x00000002;
+				int OPEN_EXISTING = 3;
+				int FILE_ATTRIBUTE_ARCHIVE =0x00000020;
+				int hFile = xwin::CreateFile("C:/Temp/"+sTemplName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
+				if (hFile >0)
+				{
+					//int GMEM_MOVEABLE=0x0002;
+					//int GMEM_ZEROINIT=0x0040;
+					//int MEMSIZE;
+					//int hMemory = GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,MEMSIZE);
+					//int pMemory = GlobalLock(hMemory);
+					//int SizeReadWrite;
+					//xwin::ReadFile(hFile,pMemory,MEMSIZE - 1,SizeReadWrite,0);
+					int filesize = xwin::GetFileSize(hFile,0); 
+				trace("filesize = %d",filesize);
+					string buffer = "".space(filesize+1);
+					int readsize = new int;
+					xwin::ReadFile(hFile,buffer,filesize,readsize,0); 
+					trace(buffer);
+					xwin::CloseHandle(hFile);
+					//GlobalUnlock(pMemory);
+					//GlobalFree(hMemory);
+				}	*/			
+				/*openRet = xwin::ShellExecute(0,"open","C:/Temp/"+sTemplName,"","",5);	
+				if(openRet < 32)
+				{
+					alert("文件打开失败2!");
+					return 0;
+				}*/			
+			}			
+			return 0;
+		}
+
+		int OnSave()
+		{
+			dw_list.AcceptText();
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			dw_list.DwUpdateAllToEx(x.GetXmlDoc());
+			
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(xaserverarg::CreateInstance());
+			arg.AddArg("content",x.GetXml());
+			
+			if (url::get("/sale/data/SysPrintTemplate/updateinfo",arg.GetString(),x) != 1)
+			{
+				trace("error:"+x.GetXml());
+				alert("保存出错了!");
+				return 1;
+			}						
+			else
+			{	
+				dw_list.ResetUpdateStatus();
+				alert("保存成功!");
+			}				
+
+			return 1;
+		}
+		
+		int PreOnCmdDispatch(string comdid)
+		{
+			//返回0——不在执行以下代码;返回其他——执行以下代码。
+			if(comdid.left(8) == "xmPanel:"){
+				string no = comdid.mid(8, 99);
+				//int id = no.toInt();
+
+				xml x = new xml;
+				x.setNativePointer(xml::CreateInstance());
+				x.LoadXml(strNode);
+				msxml::IXMLDOMDocument doc= x.GetXmlDoc();
+				msxml::IXMLDOMElement e = doc.documentElement;
+				string slable =e.selectSingleNode("//xtoolbutton[@name='"+comdid+"']/@caption").text;
+				m_Dir = slable;
+				OnRetrieve();
+			
+				return 1;
+			}
+			if (comdid=="xmAddDir") return OnAddDir();
+			if (comdid=="xmAddTempl" && bupdate) return OnAddTempl();
+			if (comdid=="xmDelTempl" && bupdate) return OnDelTempl();
+			if (comdid=="xmMaintTempl" && bupdate) return OnMaintTempl();
+			if (comdid=="xmNewTempl" && bupdate) return OnNewTempl();
+			if (comdid=="xmHtml") return OnHtml();
+			if (comdid=="xmOk") return OnOk();
+			if (comdid=="xmSave") return OnSave();
+			if(comdid=="xmOpen") return OnOpenDocument();
+			else if (comdid=="xmCancel") 
+			{
+				arg_param.AddArg("return","cancel");
+				CloseWindow();
+				return 1;
+			}
+			return 0;
+		}
+			
+		
+		int PostOnAttachEvent()
+		{
+			//AttachEvent("dw_list","DWV_ROWFOCUSCHANGED",OnRowChanged);	
+			//AttachEvent("dw_list","DWV_CLICKED",OnClicked);	
+			//AttachEvent("dw_list","DWV_RCLICKED",OnRClicked);	
+			//AttachEvent("dw_list","DWV_ITEMCHANGED",OnItemChanged);	
+			//AttachEvent("dw_list","DWV_CHILDCONTENT",OnChildContent);	
+			AttachEvent("dw_doclist","DWV_DOUBLECLICKED",OnDocListDoubleClicked);	
+			AttachEvent("dw_list","DWV_DOUBLECLICKED",OnDoubleClicked);	
+			return 1;	
+		}
+
+		int SetAgent()
+		{	
+			PUser puser = new PUser;
+			puser =  publiccode::GetUser();
+			string susername = puser.name;
+			if (susername !="admin")
+			{
+				string xfNodeAgentArea  = "DirButton";
+				xnode anode = GetAgentNode(xfNodeAgentArea);
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				string tools="<vbox name='DirButton' height='48' />";
+				SetAgentNodeContent(anode, tools);
+			}
+			return 1;
+		}
+		
+		int CreateDir()
+		{
+			PUser puser = new PUser;
+			puser =  publiccode::GetUser();
+			string susername = puser.name;
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg("EntityName",m_EntityName,""); 
+			arg.AddArg("EntityID",m_EntityID,""); 
+			arg.AddArg("susername",susername,""); //
+			if (url::get("/sale/data/SysPrintTemplate/Dir",arg.GetString(),x) != 1)
+			{
+				trace(x.GetXmlDoc().text);
+				return -1;
+			}else	
+			{
+				string s = x.GetXml();
+			}
+			msxml::IXMLDOMNodeList  nlist = x.GetXmlDoc().selectNodes("//Entity");
+			int i;
+			int nlen = nlist.length;
+			string toolStr = "<vbox name='Dir'>";
+			string deptName= publiccode::GetUser().deptname;
+			if(deptName=="跟单部" && m_EntityName=="GDN3"){
+				for(i=2;	i<nlen;	i++)
+				{
+					msxml::IXMLDOMElement e1 = nlist.item(i);
+					string sDir1 = e1.selectSingleNode("@Dir").text;
+					string str1 = "<xtoolbutton image='15' caption='"+sDir1+"' height='24' name='xmPanel:"+i.toString()+"' style='background-color:none #ceecce none #ffffff'/>";
+			
+					toolStr += str1;
+					if (i==2) 
+						m_Dir = sDir1;
+				}
+			}else if(deptName.find("业务")>=0 && m_EntityName=="GDN3"  )
+			{
+				for(i=1;	i<2;	i++)
+				{
+					msxml::IXMLDOMElement e2 = nlist.item(i);
+					string sDir2 = e2.selectSingleNode("@Dir").text;
+					string str2 = "<xtoolbutton image='15' caption='"+sDir2+"' height='24' name='xmPanel:"+i.toString()+"' style='background-color:none #ceecce none #ffffff'/>";
+					
+					toolStr += str2;
+					if (i==1) 
+						m_Dir = sDir2;
+				}
+				for(i=4;	i<nlen;	i++)
+				{
+					msxml::IXMLDOMElement e3 = nlist.item(i);
+					string sDir3 = e3.selectSingleNode("@Dir").text;
+					string str3 = "<xtoolbutton image='15' caption='"+sDir3+"' height='24' name='xmPanel:"+i.toString()+"' style='background-color:none #ceecce none #ffffff'/>";
+					
+					toolStr += str3;
+				}
+			}else{
+				for(i=0;	i<nlen;	i++)
+				{
+					msxml::IXMLDOMElement e = nlist.item(i);
+					string sDir = e.selectSingleNode("@Dir").text;
+					string str = "<xtoolbutton image='15' caption='"+sDir+"' height='24' name='xmPanel:"+i.toString()+"' style='background-color:none #ceecce none #ffffff'/>";
+					
+					toolStr += str;
+					if (i==0) 
+						m_Dir = sDir;
+				}
+			}	
+				
+			toolStr += "</vbox>";
+			strNode = toolStr;
+			//trace(toolStr);
+			xnode anode = GetAgentNode("Dir");
+			xwin::SetAgentNodeContent(anode,toolStr) ;
+			
+			OnRetrieve();
+			return 1;
+		}
+			
+		int OnInit()
+		{ 		
+			SetAgent();
+			dw_list = this.GetControl("dw_list");
+			dw_list.openUrl("/sale/view/view.base/template/PrintView/listDialog");
+			dw_list.SetReadOnly(true);
+			dw_list.SetSelectionMode(4);
+			dw_list.SetColumnState("ID",false);
+
+			dw_doclist = GetControl("dw_doclist");
+			dw_doclist.openUrl("/sale/view/GDN/template/doclist");
+
+			string sUrl = GetServerUrl();
+			sUrl = sUrl.mid(0, sUrl.length() - 19);
+			m_filePath = "/business/rpttemplate";
+			arg_param = new xaserverarg;
+			if (GetParam())
+			{
+				int p = GetParam();
+				arg_param.setNativePointer(p);
+				m_EntityName = arg_param.GetArgString("EntityName");
+				m_EntityID = arg_param.GetArgString("EntityID");
+				m_EntityNo = arg_param.GetArgString("EntityNo");
+			
+				xaserverarg arg = new xaserverarg;
+				arg.setNativePointer(xaserverarg::CreateInstance());
+				arg.AddArg("EntityName", m_EntityName);
+				arg.AddArg("EntityID", m_EntityID);
+				arg.AddArg("EntityNo", m_EntityNo);
+				xml x =new xml;
+				x.setNativePointer(xml::CreateInstance());
+				if(url::get("/sale/data/DocumentList3/bill/doclist", arg.GetString(),x)!=1)
+				{
+					string error = x.GetXmlDoc().text;
+					trace(error);
+				}else
+				{
+					dw_doclist.Retrieve(x);
+					dw_doclist.SetReadOnly(true);
+				}
+			}
+			else
+			{
+				arg_param.setNativePointer(arg_param.CreateInstance());	
+				m_EntityName = "SO";
+				m_EntityID ="00000000-0000-0000-0000-000000000000";
+			}
+
+			m_Dir = "";
+			m_filePath = m_filePath + "/" + m_EntityName+"/";
+			//trace(m_filePath);
+			
+			CreateDir();
+			
+			return 1;
+		}
+
+	int onload()
+	{
+		responsewin::onload();
+		
+		/*if (GetParam())
+		{
+			string action = arg_param.GetArgString("action");
+			if(action=="open" || (action=="" && dw_doclist.GetRowCount() > 0))
+				SwitchLayer("sheet2","frame");
+		}
+		*/
+
+		return 1;
+	}
+	
+	int onloaded()
+	{
+		//responsewin::onload();
+		
+		/*if (GetParam())
+		{
+			string action = arg_param.GetArgString("action");
+			if(action=="open" || (action=="" && dw_doclist.GetRowCount() > 0))
+				SwitchLayer("sheet2","frame");
+		}
+		*/
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/printview/Template.Print.ViewEx.cpp b/jrj/project/printview/Template.Print.ViewEx.cpp
new file mode 100644
index 0000000..da0560a
--- /dev/null
+++ b/jrj/project/printview/Template.Print.ViewEx.cpp
@@ -0,0 +1,1217 @@
+namespace _excel for ole "Excel.Application,{00020813-0000-0000-C000-000000000046}";
+namespace _mshtml for ole "MSHtml,{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}";
+
+class cexcel : public xnative native from "XControl.dll"
+{
+	void Release(int t) alias "?Release@CExcelApplication@@QAEXPAV1@@Z";
+	static int CreateInstance() alias "?CreateInstance@CExcelApplication@@SAPAV1@XZ";
+	void put_Visible(bool t) alias "?put_Visible@CExcelApplication@@QAEXH@Z";
+	bool get_Visible() alias "?get_Visible@CExcelApplication@@QAEHXZ";
+	void OpenDocument(const string filename) alias "?OpenDocument@CExcelApplication@@QAEXQA_W@Z";
+	void TransShape() alias "?TransShape@CExcelApplication@@QAEXXZ";
+	void SaveToFile(string filename) alias "?SaveToFile@CExcelApplication@@QAEXQA_W@Z";
+	void Quit() alias "?Quit@CExcelApplication@@QAEXXZ";
+};
+
+struct MYOPENFILENAMEW
+{
+   unsigned int	lStructSize;
+   unsigned int   hwndOwner;
+   unsigned int   hInstance;
+   string		     	lpstrFilter;
+   
+   string       		lpstrCustomFilter;
+   unsigned int   nMaxCustFilter;
+   unsigned int        nFilterIndex;
+   string       			 lpstrFile;
+   
+   unsigned int        nMaxFile;
+   string       			 lpstrFileTitle;
+   unsigned int        nMaxFileTitle;
+   string      lpstrInitialDir;
+   
+   string      			lpstrTitle;
+   unsigned int       Flags;
+   unsigned short   nFileOffset;
+   unsigned short   nFileExtension;
+   string      lpstrDefExt;
+   
+   unsigned int   lCustData;
+   unsigned int 	lpfnHook;
+   string      lpTemplateName;
+   
+	//_WIN32_WINNT >= 0x0500
+   unsigned int		 pvReserved;
+   unsigned int        dwReserved;
+   unsigned int        FlagsEx;
+	// (_WIN32_WINNT >= 0x0500)
+};
+	
+class TemplatePrintViewEx : public frame
+{	
+	xole ole_print;
+	xcell cell;
+	string m_EntityName;
+	string m_EntityID;
+	string m_EntityNo;
+	string m_strHtml;
+	string m_spath;
+	bool updated;
+
+	string   htmlStr;
+	cexcel   excel;
+	bool 	   editing;
+
+	string  billName ;
+	string  billID ;
+	string  billPre;
+
+	string  m_DocumentID;
+	xml	  m_dataset;
+	//bool showgrid;
+	bool PaperPrint;
+
+	static stdcall int GetModuleFileName(int hModule ,string lpFileName ,int nSize ) native from "kernel32.dll" alias "GetModuleFileNameW";
+	static stdcall int PathRemoveFileSpec(string lpFileName ) native from "shlwapi.dll" alias "PathRemoveFileSpecW";
+	static stdcall int DeleteFile(string lpFileName) native from "kernel32.dll" alias "DeleteFileW";	
+	static stdcall bool GetSaveFileName(ref MYOPENFILENAMEW)native from "comdlg32.dll" alias "GetSaveFileNameW"; 
+
+	string GetModulePath()
+	{
+		string str ="";
+		str = str.space(255);
+		GetModuleFileName(0,str,250);
+		PathRemoveFileSpec(str);
+		return str;
+	}
+	string GetModuleTmpPath()
+	{
+		string str ="";
+		str = str.space(255);
+		GetModuleFileName(0,str,250);
+		PathRemoveFileSpec(str);
+		string tmp = str + "\\Temp";
+		xaserver::CreateDirectory(tmp);
+		return tmp;
+	}
+	
+	string GetSaveFileName(string initFileName, string filter, string ext)
+	{
+		char[]  szFileName = new char[255] ;
+		char[]  szPath =  new char[255];
+		szFileName[0] = 0;
+		szPath[0] = 0;
+		
+		if(initFileName !="")
+		{
+			int len = initFileName.length();
+			char[] tmp = initFileName;
+			for(int i=0; i<len+1;i++)
+			{
+				//szFileName[i] = tmp[i];
+				szPath[i] = tmp[i];
+			}
+		}
+		
+		int	 nFilterIndex = 1;
+		ref MYOPENFILENAMEW ofn = new MYOPENFILENAMEW;
+
+		ofn.lStructSize = 88;//sizeof(ofn);
+		ofn.hwndOwner = 0;
+		ofn.hInstance = 0;
+		ofn.lpstrFilter = filter;
+			//"JPEG 文件(*.jpg)\0*.jpg;*.jpeg;*.png;*.gif;*.bmp\0全部文件(*.*)\0*.*\0";
+		ofn.lpstrCustomFilter = 0;
+		ofn.nMaxCustFilter = 0;
+		ofn.nFilterIndex = nFilterIndex;
+		ofn.lpstrFile = szPath;
+		ofn.nMaxFile = 255;
+		ofn.lpstrFileTitle = szFileName;
+		ofn.nMaxFileTitle = 255;
+		ofn.lpstrTitle = "请指定文件名";
+		ofn.lpstrDefExt = ext; 
+			//"jpg";
+		ofn.lpstrInitialDir = 0;
+		ofn.Flags = 0x00000010/*OFN_SHOWHELP*/ | 0x00001000/*OFN_FILEMUSTEXIST*/;
+		ofn.lCustData = 0;
+		ofn.lpfnHook = 0;
+		ofn.lpTemplateName = 0;
+
+		//debugbreak();
+		if(GetSaveFileName(ofn))
+		{
+			delete ofn;
+			return szPath;
+		}
+		else
+		{
+			return "";
+		}
+	}
+			
+	int OnExport()
+	{
+		string pre = billPre;
+		if(pre=="")
+		{
+			pre = m_EntityName;
+			if(m_EntityName=="SaleOrder") pre="PI";
+			if(m_EntityName=="GDN3")pre="INV";
+		}
+		string file1 =  GetSaveFileName(pre+m_EntityNo+".xlsx",
+			"Excel1文件(*.xlsx)\0*.xlsx;*.xls\0Excel97文件(*.xls)\0*.xls\0PDF文件(*.pdf)\0*.pdf\0",
+			"xlsx");
+		if(file1 =="") return 1;
+		
+		if(win32::PathFileExists(file1))
+		{
+			int res = win32::MessageBox(this.GetHWND(), "文件已经存在,是否覆盖?","提示",4);
+			if(res != 6) return 1;
+		}
+		
+		trace("\r\n link excel");
+		excel = new cexcel;
+		int hexcel = cexcel::CreateInstance();
+		excel.setNativePointer(hexcel);
+		if(hexcel == 0)
+		{
+			alert("不能连接Excel");
+			return 1;
+		}
+
+		string gid =  publiccode::GetGuid();
+		string filename= pre+m_EntityNo+"_.htm";
+		xutil::SaveToFile(GetModuleTmpPath() + "\\"+ filename, htmlStr,"","","");
+		trace("\r\n excel to open");
+		excel .OpenDocument(GetModuleTmpPath() + "\\"+ filename);
+		trace("\r\n trans shape");
+		//excel .put_Visible(true);
+		excel.TransShape();
+		trace("\r\n save to tmp excel file");
+		if(file1.find(".xls"))
+		{
+			if(win32::PathFileExists(GetModuleTmpPath() + "\\"+ pre+m_EntityNo+"_.xls"))
+				DeleteFile(GetModuleTmpPath() + "\\"+ pre+m_EntityNo+"_.xls");
+			excel.SaveToFile(GetModuleTmpPath() + "\\"+ pre+m_EntityNo+"_.xls");
+			//alert(GetModuleTmpPath() + "\\"+ pre+m_EntityNo+"_.xls");
+		}
+		else 
+		{
+			if(win32::PathFileExists(GetModuleTmpPath() + "\\"+ pre+m_EntityNo+"_.xlsx"))
+				DeleteFile(GetModuleTmpPath() + "\\"+ pre+m_EntityNo+"_.xlsx");
+			excel.SaveToFile(GetModuleTmpPath() + "\\"+ pre+m_EntityNo+"_.xlsx");
+		}
+		
+		trace("\r\n save to excel file");
+		if(win32::PathFileExists(file1)) //GetModuleTmpPath() + "\\"+ pre+m_EntityNo+"_.xlsx"))
+			DeleteFile(file1);
+		excel.SaveToFile(file1);
+		
+		excel.Quit();
+		excel.Release(excel.ptr_native_);
+		return 1;
+	}
+	
+	int OntoExcel() //转为Excel
+	{
+		excel = new cexcel;
+		excel.setNativePointer(cexcel::CreateInstance());
+		
+		string gid =  publiccode::GetGuid();
+		string pre = m_EntityName;
+		if(m_EntityName=="SaleOrder") pre="PI";
+		if(m_EntityName=="GDN3")pre="INV";
+		string filename= pre+m_EntityNo+".htm";
+		string filenameex= pre+m_EntityNo+".xlsx";
+		xutil::SaveToFile(GetModuleTmpPath() + "\\"+ filename, htmlStr,"","","");
+		excel .OpenDocument(GetModuleTmpPath() + "\\"+ filename);
+		//excel.put_Visible(true);
+		excel.TransShape();
+		if(win32::PathFileExists(GetModuleTmpPath() + "\\"+ filenameex))
+			DeleteFile(GetModuleTmpPath() + "\\"+ filenameex);
+		excel.SaveToFile(GetModuleTmpPath() + "\\"+ filenameex);
+		excel.put_Visible(true);
+
+		excel.Release(excel.ptr_native_);
+		return 1;
+	}
+
+	string getfilePath()
+	{
+		string path=GetModulePath()+"\\resource\\image";		
+		string filename="contract.jpg";
+		filename="sign.png";
+		filename="jrj_maersk.png";
+		filename="HomeDecorSign.png";
+		xaserver::DownLoadFile(GetServerUrl(),"/business/rpttemplate/"+filename,"",path+"\\"+filename);
+		filename="HomeDecorLogo.jpg";
+		xaserver::DownLoadFile(GetServerUrl(),"/business/rpttemplate/"+filename,"",path+"\\"+filename);
+		return path;
+	}
+	
+	string replaceInnerElement(string html)
+	{
+		string str = html;
+		if(str.find("[$element:")<0) return str;
+		
+		int len = 0;
+		int pos = 0;
+		int pos1 = 0;
+		string pre="";
+		string left="";
+		string right="";
+		string tag="";
+		
+		len = "[$element:".length();
+		while(true)
+		{
+			pos = str.find("[$element:");
+			if(pos < 0) break;
+			left = str.left(pos);
+			right = str.mid(pos+ len,999999);
+			
+			pos1 = right.find("]");
+			if(pos1>=0)
+			{
+				tag = right.left(pos1);
+				if(tag.right(1)=="$") tag=tag.left(tag.length() - 1);
+				pre = pre + left + "<" + tag +">";
+				str = right.mid(pos1+ 1,999999);
+			}else
+			{
+				pre = pre + left+"<";
+				str = right;
+			}
+		}
+		
+		str = pre + str;
+		pre = "";
+		len = "[/$element:".length();
+		while(true)
+		{
+			pos = str.find("[/$element:");
+			if(pos < 0) break;
+			left = str.left(pos);
+			right = str.mid(pos+ len,999999);
+			pos1 = right.find("]");
+			if(pos1>=0)
+			{
+				tag = right.left(pos1);
+				if(tag.right(1)=="$") tag=tag.left(tag.length() - 1);
+				pre = pre + left + "</" + tag +">";
+				str = right.mid(pos1+ 1,999999);
+			}else
+			{
+				pre = pre + left+"</";
+				str = right;
+			}
+		}
+		str  = pre + str;
+		return str;
+	}
+
+	string adjustXsl(string str,string localPath)
+	{
+		//if(str.find("%")>=0)  str = str.replace("%","");
+		if(str.find("[$path]/rpttemplate")>=0) str = str.replace("[$path]/rpttemplate",localPath);
+		str = replaceInnerElement(str);
+		return str;
+	}
+	
+	string DownLoadSKUNoPic(string SKUNo,string CustomerID="",string CustomerItemNo="")
+	{
+		
+		if(SKUNo.length()>20) return DownLoadPaperPic(SKUNo);
+		
+		xml x = new xml;
+		x.setNativePointer(xml::CreateInstance());
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg("SKUNo",SKUNo);
+		
+		string src ="/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
+		if(CustomerID !="")
+		{
+			arg.AddArg("CustomerID",CustomerID);
+			arg.AddArg("CustomerItemNo",CustomerItemNo);
+			src ="/sale/data/ProductLibrary3/pref/picture/customer/imagelistSKUNo";
+		}
+		//trace("SKUNo="+SKUNo);//要有展示图片查询条件内必定要skuno
+		if(url::get(src,arg.GetString(),x)!=1)
+		{
+			trace("error for download skuno pic!");
+			return "";
+		}
+		
+		string spath = "";
+		string path =GetModuleTmpPath();
+		string ext = "jpg";
+		if(x.GetXmlDoc().selectSingleNode("//FileExt[1]"))
+		{
+			ext = x.GetXmlDoc().selectSingleNode("//FileExt[1]").text;
+		}else if(CustomerID !="")
+		{
+			src ="/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
+			if(url::get(src,arg.GetString(),x)!=1)
+			{
+				trace("error for download skuno pic!");
+				return "";
+			}
+			if(x.GetXmlDoc().selectSingleNode("//FileExt[1]"))
+				ext = x.GetXmlDoc().selectSingleNode("//FileExt[1]").text;
+		}
+			
+		string filename = SKUNo + "." + ext;
+		if(x.GetXmlDoc().selectSingleNode("//PicPath[1]"))
+			spath = x.GetXmlDoc().selectSingleNode("//PicPath[1]").text;
+		if(spath != "")
+		{
+			 xaserver::DownLoadFile(GetServerUrl(),spath,"",path+"/"+filename);
+		}
+		return "file://"+ path+"/"+filename;
+	}
+		
+	string DownLoadSKUNoPic(string SKUNo,string CustomerID="",string CustomerItemNo="")
+	{
+		
+		if(SKUNo.length()>20) return DownLoadPaperPic(SKUNo);
+		
+		xml x = new xml;
+		x.setNativePointer(xml::CreateInstance());
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg("SKUNo",SKUNo);
+		
+		string src ="/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
+		if(CustomerID !="")
+		{
+			arg.AddArg("CustomerID",CustomerID);
+			arg.AddArg("CustomerItemNo",CustomerItemNo);
+			src ="/sale/data/ProductLibrary3/pref/picture/customer/imagelistSKUNo";
+		}
+		//trace("SKUNo="+SKUNo);//要有展示图片查询条件内必定要skuno
+		if(url::get(src,arg.GetString(),x)!=1)
+		{
+			trace("error for download skuno pic!");
+			return "";
+		}
+		
+		string spath = "";
+		string path =GetModuleTmpPath();
+		string ext = "jpg";
+		if(x.GetXmlDoc().selectSingleNode("//FileExt[1]"))
+		{
+			ext = x.GetXmlDoc().selectSingleNode("//FileExt[1]").text;
+		}else if(CustomerID !="")
+		{
+			src ="/sale/data/ProductLibrary3/pref/picture/imagelistSKUNo";
+			if(url::get(src,arg.GetString(),x)!=1)
+			{
+				trace("error for download skuno pic!");
+				return "";
+			}
+			if(x.GetXmlDoc().selectSingleNode("//FileExt[1]"))
+				ext = x.GetXmlDoc().selectSingleNode("//FileExt[1]").text;
+		}
+			
+		string filename = SKUNo + "." + ext;
+		if(x.GetXmlDoc().selectSingleNode("//PicPath[1]"))
+			spath = x.GetXmlDoc().selectSingleNode("//PicPath[1]").text;
+		if(spath != "")
+		{
+			 xaserver::DownLoadFile(GetServerUrl(),spath,"",path+"/"+filename);
+		}
+		return "file://"+ path+"/"+filename;
+	}
+		
+	string GetImageUrl(string id)
+	{
+		xml xp=new xml;
+		xp.setNativePointer(xml::CreateInstance());
+		xaserverarg arg_pic=new xaserverarg;
+		arg_pic.setNativePointer(arg_pic.CreateInstance());	
+		arg_pic.AddArg("id",id);
+		
+		string res = "/sale/data/productlibrary3/image/url";
+		if(url::get(res,arg_pic.GetString(),xp)!=1)
+		{
+			xp.GetXml();
+			return 1;
+		}else
+		{
+			string path = xp.GetXmlDoc().text;
+			if(path !="") return path;
+		}
+		
+		return "/business/products/chanpin/"+id.left(2)+"/"+ id+".jpg";
+	}
+	
+	string DownLoadPaperPic(string guid)
+	{
+		
+		string path =GetModuleTmpPath();
+		string ext = "jpg";
+		string filename = guid + "." + ext;
+		string spath = GetImageUrl(guid);
+		//alert(spath);
+		xaserver::DownLoadFile(GetServerUrl(),spath,"",path+"/"+filename);
+		return "file://"+ path+"/"+filename;
+	}
+			
+	string DownLoadPaperPic1(string guid)
+	{
+		string path =GetModuleTmpPath();
+		string ext = "jpg";
+		string filename = guid + "." + ext;
+		string str = guid.mid(0,2);
+		string spath = "/business/products/chanpin/"+str+"/"+guid+".jpg";
+		xaserver::DownLoadFile(GetServerUrl(),spath,"",path+"/"+filename);
+		return "file://"+ path+"/"+filename;
+	}
+	
+	string DownLoadUrlPic(string src)
+	{
+		string guid =  publiccode::GetGuid();
+		string path =GetModuleTmpPath();
+		string ext = "jpg";
+		string filename = guid + "." + ext;
+		string spath = src;
+		xaserver::DownLoadFile(GetServerUrl(),spath,"",path+"/"+filename);
+		return "file://"+ path+"/"+filename;
+	}
+	
+	int OnHtml(xaserverarg arg)
+	{
+		int hCursor = xutil::SetCursorWait();
+
+		string sEntityName = arg.GetArgString("EntityName");
+		string sEntityID = arg.GetArgString("EntityID");
+		string dataUrl = arg.GetArgString("DataUrl");
+		if(dataUrl=="") 
+			dataUrl = "/sale/data/"+sEntityName+"/print/dataset";
+		else if(dataUrl.left(1)!="/") 
+			dataUrl = "/sale/data/"+sEntityName+ "/"+ dataUrl;
+		if(!m_dataset)
+		{
+			xml x0 = new xml;
+			x0.setNativePointer(xml::CreateInstance());
+			if (url::get(dataUrl,arg.GetString(),x0) != 1)
+			{
+				alert("数据集出错了!");
+				return 0;
+			}
+			trace(x0.GetXml());
+			m_dataset = x0;
+		}
+			
+		string sPath;
+		sPath = getfilePath();
+		arg.AddArg("sPath",sPath);
+		m_spath = sPath;
+		
+		xml xsl = new xml;
+		xsl.setNativePointer(xml::CreateInstance());
+		if (url::get("/sale/data/SysPrintTemplate/getxsl",arg.GetString(),xsl) != 1)
+		{
+			alert("数据模板错误!");
+			return 0;
+		}
+		
+		string xslStr = xsl.GetXml();
+		
+		xslStr = adjustXsl(xslStr,sPath);
+		xsl.LoadXml(xslStr);
+		
+		//trace(m_dataset.GetXml());
+		trace("\r\n--------\r\n"+xslStr);
+		
+		m_strHtml = m_dataset.GetXmlDoc().transformNode(xsl.GetXmlDoc());
+		string aspace = m_strHtml.replace("[空]","&nbsp;",0);
+		aspace = aspace.replace("[line]","<br/>",0);
+		string scontent = aspace.replace("<?xml version=\"1.0\"?>","",0);
+		
+		string head ="";
+		string tail = scontent;
+
+		int pos = tail.find("src=\"item-picture:");
+		while(pos > 0)
+		{
+			int spos = pos+"src=\"item-picture:".length();
+			int pos1 = tail.find("\"",spos+1);
+			string skuno = tail.mid(spos,pos1 - spos ).trim();
+			string CustomerID="";
+			string CustomerItemNo="";
+			if(skuno.find(",")>0)
+			{
+				CustomerID = skuno.left(skuno.find(",")).trim();
+				skuno = skuno.mid(skuno.find(",")+1,256).trim();
+			}
+			if(skuno.find(",")>0)
+			{
+				CustomerItemNo = skuno.left(skuno.find(",")).trim();
+				skuno = skuno.mid(skuno.find(",")+1,256).trim();
+			}
+			string src =  DownLoadSKUNoPic(skuno,CustomerID,CustomerItemNo);
+			head += tail.left(pos) + "src=\"" + src;
+			tail = tail.mid(pos1,999999999);
+			pos = tail.find("src=\"item-picture:");
+		}
+		scontent = head + tail;
+		
+		head ="";
+		tail = scontent;
+		int position = tail.find("src=\"paper-picture:");
+		while(position > 0)
+		{
+			int sposition = position+"src=\"paper-picture:".length();
+			int position1 = tail.find("\"",sposition+1);
+			string guid = tail.mid(sposition,position1 - sposition ).trim();
+			string src2 =  DownLoadPaperPic(guid);
+			head += tail.left(position) + "src=\"" + src2;
+			tail = tail.mid(position1,999999999);
+			position = tail.find("src=\"paper-picture:");
+		}
+		scontent = head + tail;
+		
+		head ="";
+		tail = scontent;
+		position = tail.find("src=\"src-picture:");
+		while(position > 0)
+		{
+			sposition = position+"src=\"src-picture:".length();
+			position1 = tail.find("\"",sposition+1);
+			guid = tail.mid(sposition,position1 - sposition ).trim();
+			src2 =  DownLoadUrlPic(guid);
+			head += tail.left(position) + "src=\"" + src2;
+			tail = tail.mid(position1,999999999);
+			position = tail.find("src=\"src-picture:");
+		}
+		scontent = head + tail;
+		
+		scontent = adjustXsl(scontent,sPath);
+		htmlStr = scontent;	
+		ole_print.LoadHtml(scontent);	
+		
+		xml x1 = new xml;
+		x1.setNativePointer(xml ::CreateInstance());
+		//string xcontent = m_strHtml.replace("&nbsp;","[空]",0);
+		string xcontent = m_strHtml.replace("[空]"," ",0);
+		int pos0 = xcontent.find("<xml");
+		int pos2 = xcontent.find("</xml>");
+		if(pos0>=0)
+		{
+			string str = xcontent.left(pos0)+ xcontent.mid(pos2+6,9999999);
+			xcontent = str;
+		}
+		x1.LoadXml(xcontent);
+		if(x1.GetXmlDoc())
+		{
+			/*if(!showgrid)
+			{
+				SendCtrlCmd(cell,"xmFormatShowGrid");
+				showgrid = true;
+			}*/
+			cell.LoadTemplate(x1.GetXmlDoc());
+			cell.Redraw();
+		}
+
+		xutil::RestoreCursor(hCursor);
+		updateHtml();
+		return 1;
+	}
+		
+	int updateHtml()
+	{
+		_mshtml::IHTMLDocument3 doc = ole_print.GetHtmlDocument();
+		_mshtml::IHTMLElementCollection rows = doc.getElementsByTagName("tr");
+		_mshtml::IHTMLElementCollection rows2 = doc.getElementsByTagName("td");
+		int len = rows.length;
+		int len2 = rows2.length;
+		for(int i=0; i < len - 1;i++)
+		{
+			_mshtml::IHTMLElement e = rows.item(i,i);
+			e.style.setAttribute("height",e.offsetHeight,0);
+			e.Release();
+		}
+		for( i=0; i < len2 - 1;i++)
+		{
+			_mshtml::IHTMLElement e2 = rows2.item(i,i);
+			e2.style.setAttribute("width",e.offsetWidth,0);
+			e2.Release();
+		}
+		rows.Release();
+		doc.release();
+		htmlStr = doc.documentElement.outerHtml;
+		return 1;
+	}
+	
+	int OnOpenDocument()
+	{
+		if(GetParam())
+		{
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(GetParam());
+			int p = arg.ptr_native_;
+			arg.AddArg("action","open");
+			arg.AddArg("DocumentID","");
+			arg.AddArg("ok","");
+			openUrl("/sale/view/view.dlg/xpage/Template/PrintDialog", p);
+			string ret = arg.GetArgString("return");
+			string action = arg.GetArgString("action");
+			if (ret =="ok") 
+			{
+				if(action =="open")
+				{
+					m_DocumentID = arg.GetArgString("DocumentID");
+					xml x = new xml;
+					x.setNativePointer(xml::CreateInstance());	
+					string prestr = m_DocumentID.mid(0,2);
+					prestr = prestr.upper();
+					xaserver::LoadUrl(GetServerUrl(),"/business/data/bill/"+prestr+"/"+ m_DocumentID+".jpg","",x);
+					if(x.GetXml()!="")
+					{
+						if(x.GetXmlDoc())
+						{
+							/*if(!showgrid)
+							{
+								SendCtrlCmd(cell,"xmFormatShowGrid");
+								showgrid = true;
+							}*/
+							cell.LoadTemplate(x.GetXmlDoc());
+							cell.Redraw();
+						}
+						ole_print.LoadHtml(x.GetXml());
+					}else
+					{
+						ole_print.LoadHtml("<html><body>未找到对应的文档</body></html>");
+						//cell.LoadHtml("<html><body>未找到对应的文档</body></html>");
+					}
+				}
+				else
+				{
+					string templateName = arg.GetArgString("template-name");
+					win32::SetWindowText(GetHWND(),templateName);
+					billName = templateName;
+					billPre = arg.GetArgString("template-pre");
+					billID = arg.GetArgString("template-guid");
+					m_EntityID  = arg.GetArgString("EntityID");
+					m_EntityNo = arg.GetArgString("EntityNo");
+					m_EntityName  = arg.GetArgString("EntityName");
+					m_DocumentID = "";
+				
+					OnHtml(arg);
+
+				}
+			}
+		}
+		return 1;
+	}
+		
+	int OnPrintDialog()
+	{		
+		if(GetParam())
+		{
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(GetParam());
+			int p = arg.ptr_native_;
+			arg.AddArg("ok","");
+			openUrl("/sale/view/view.dlg/xpage/Template/PrintDialog", p);
+			string ret = arg.GetArgString("return");
+			string action = arg.GetArgString("action");
+			if (ret =="ok") 
+			{
+				updated = false;
+				if(action =="open")
+				{
+					m_DocumentID = arg.GetArgString("DocumentID");
+					xml x = new xml;
+					x.setNativePointer(xml::CreateInstance());	
+					string prestr = m_DocumentID.mid(0,2);
+					prestr = prestr.upper();
+					xaserver::LoadUrl(GetServerUrl(),"/business/data/bill/"+prestr+"/"+ m_DocumentID+".jpg","",x);
+					if(x.GetXml()!="")
+					{
+						
+						string content = "";
+						if(x.GetXmlDoc().documentElement.tagName=="Bill")
+						{
+							content = x.GetXmlDoc().documentElement.text;
+							content = content.replace("[空]","&nbsp",0);
+							ole_print.LoadHtml(content);
+						}else
+						{
+							if(x.GetXmlDoc())
+							{
+								/*if(!showgrid)
+								{
+									SendCtrlCmd(cell,"xmFormatShowGrid");
+									showgrid = true;
+								}*/
+								xml x1 = new xml;
+								x1.setNativePointer(xml::CreateInstance());	
+								string content1 = x.GetXml();
+								content1 = content1.replace("[空]"," ",0);
+								//trace(content1);
+								x1.LoadXml(content1);
+								cell.LoadTemplate(x1.GetXmlDoc());
+								cell.Redraw();
+							}
+							content = x.GetXml();
+							content = content.replace("[空]","&nbsp",0);
+							ole_print.LoadHtml(content);
+						}
+					}else
+					{
+						ole_print.LoadHtml("<html><body>未找到对应的文档</body></html>");
+						//cell.LoadHtml("<html><body>未找到对应的文档</body></html>");
+					}
+				}
+				else
+				{
+					string templateName = arg.GetArgString("template-name");
+					win32::SetWindowText(GetHWND(),templateName);
+					billName = templateName;
+					billPre = arg.GetArgString("template-pre");
+					billID = arg.GetArgString("template-guid");
+					m_EntityID  = arg.GetArgString("EntityID");
+					m_EntityNo = arg.GetArgString("EntityNo");
+					m_EntityName  = arg.GetArgString("EntityName");
+					m_DocumentID = "";
+					OnHtml(arg);
+				}
+			}
+		}
+		return 1;
+	}
+			
+	int SetAgent()
+	{	
+		string xfNodeAgentArea  = "agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		msxml::IXMLDOMElement xframeElement =  GetElement();
+		msxml::IXMLDOMNode agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+
+		msxml::IXMLDOMNodeList nlist;
+		int  index;
+		int  nlen;
+		msxml::IXMLDOMElement ele;
+		string tools="<hbox class=''>";
+		if(agent)
+		{
+			nlist = agent.SelectNodes(".//xtoolbutton");
+			nlen = nlist.length;
+			for(index=0;index<nlen;index++)
+			{
+				ele  =  nlist.item(index);
+				string name = ele.selectSingleNode("@name").text;
+				string label  =  ele.selectSingleNode("@caption").text;
+				string image;
+				string src = "";
+				if(ele.selectSingleNode("@image"))
+					image = ele.selectSingleNode("@image").text;
+				else
+					image = "0 22";
+				
+				if(ele.selectSingleNode("@src"))
+					src = ele.selectSingleNode("@src").text;
+				
+				int strLen = label.length();
+				int width = 60 + (strLen - 2) * 10;
+				string tool;
+				if (src != "")
+					tool = "<xtoolbutton src='"+src+"'  caption='"+label+"' name='"+name+"' height='28'  class1='action'/>";
+				else
+					tool = "<xtoolbutton image='"+image+"'  caption='"+label+"' name='"+name+"' height='28'  class1='action'/>";
+				tools += tool;
+			}
+		}
+		tools +="</hbox>";
+		SetAgentNodeContent(anode, tools);
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(ref TNotifyEvent evt,int p)
+	{
+		//重置工具条
+		SetAgent();
+		return 1;
+	}	
+	
+	int OnEdit()
+	{
+		editing = !editing;
+		if(editing)
+		{
+			SwitchLayer("cellview","viewclient");
+		}else
+		{
+			htmlStr = cell.GetHtml();
+			//string content = htmlStr;
+			htmlStr = htmlStr.replace("[空]","&nbsp;",0);
+			htmlStr = htmlStr.replace("[line]","<br/>",0);
+			ole_print.LoadHtml(htmlStr);	
+			SwitchLayer("oleview","viewclient");
+		}		
+		return 1;
+	}
+	
+	int OnSaveAs() //另存为...
+	{
+		ole_print.ExecWB(4,2);
+		return 1;
+	}
+	int OnPrint() //打印
+	{
+		ole_print.ExecWB(6, 0);
+		return 1;
+	}
+	int PrintPaper() //打印
+	{
+		//ole_print.GetHtmlDocument();
+		//return 1;
+		_mshtml::IHTMLDocument3 doc = ole_print.GetHtmlDocument();
+		_mshtml::IHTMLElementCollection rows = doc.getElementsByTagName("tr");
+		
+		int len = rows.length;
+		for(int i=0; i < len - 1;i++)
+		{
+			//oleobject v = rows.item(i,i);
+			_mshtml::IHTMLElement e = rows.item(i,i);
+			_mshtml::IHTMLElement2 e1 = e;
+			//e.setAttribute("height",e1.clientHeight,0);
+			e.setAttribute("height",300,0);
+			e.Release();
+			e1.Release();
+		}
+		rows.Release();
+		doc.Release();
+		/*
+		if(PaperPrint == false)
+		{
+			ole_print.GetHtmlDocument().body.style.visibility="hidden";
+			PaperPrint = true;
+		}
+		else
+		{
+			ole_print.GetHtmlDocument().body.style.visibility="visible";
+			PaperPrint = false;
+		}
+		*/
+		return 1;
+	}
+	int OnPrintPreview() //打印预览
+	{
+		ole_print.ExecWB(7, 0);
+		return 1;
+	}
+	int OnPageSetup() //页面设置
+	{
+		ole_print.ExecWB(8, 0);
+		return 1;
+	}
+	int OnPortrait() //纵向
+	{
+		alert("Portrait");
+		return 1;
+	}
+	int OnLandscape() //横向
+	{
+		return 1;
+	}
+	int OnPageProperty() //查看页面属性
+	{
+		ole_print.ExecWB(10, 1);
+		return 1;
+	}
+	int OnCustom() //自定义:? 25-400%
+	{
+		return 1;
+	}
+	
+	int OnAddToDocument()
+	{
+		string content = htmlStr;
+		if(editing)content = cell.GetHtml();
+		string guid = publiccode::GetGuid();
+		
+		string prestr = guid.mid(0,2);
+		prestr = prestr.upper();
+		
+		
+		content = content.replace("gb2312","utf-16",0);
+		content = content.replace("&nbsp","[空]",0);
+		content = content.replace("&","",0);
+		
+		xml x0 = new xml;
+		x0.setNativePointer(xml::CreateInstance());
+		x0.LoadXml("<Bill/>");
+		x0.GetXmlDoc().documentElement.text = content;
+		content = x0.GetXml();
+
+		int ret= xaserver::UploadData("bill"+prestr, guid+".jpg", content);
+		if(ret < 0) trace("error upload");
+		
+		string ls_xml ="<DocumentList guid='"+guid+"' update.modify='1' update.new='1'>";
+		ls_xml += "<EntityName>"+ m_EntityName + "</EntityName>";
+		ls_xml += "<EntityID>"+ m_EntityID + "</EntityID>";
+		ls_xml += "<EntityNo>"+ m_EntityNo + "</EntityNo>";
+		ls_xml += "<BillID>"+ billID + "</BillID>";
+		ls_xml += "<BillName>"+ billName + "</BillName>";
+		ls_xml += "</DocumentList>";
+		
+		xml x = new xml;
+		x.setNativePointer(xml::CreateInstance());
+		x.LoadXml(ls_xml); 
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(xaserverarg::CreateInstance());
+		arg.AddArg("content",x.GetXml());
+		
+		if(url::get("/sale/data/DocumentList3/bill/update", arg.GetString(),x)!=1)
+		{
+			string error = x.GetXmlDoc().text;
+			alert("err:"+error);
+			return 1;
+		}
+		string str = x.GetXmlDoc().documentElement.getAttribute("text");
+		if(str == "true")
+		{
+			alert("保存成功!"); 
+			updated = false;
+		}else 
+		{
+			alert("保存失败!");
+		}
+	
+		return 1;
+	}
+	
+	int SendCtrlCmd(xcontrol xc, string cmd)
+	{
+		win32::SendMessage(xc.GetId(),0x401,cmd,0);
+		return 1;
+	}
+	
+	int OnRefreshData()
+	{
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(GetParam());
+		string templateName = arg.GetArgString("template-name");
+		win32::SetWindowText(GetHWND(),templateName);
+		OnHtml(arg);
+		billName = templateName;
+		billPre = arg.GetArgString("template-pre");
+		billID = arg.GetArgString("template-guid");
+		m_EntityID  = arg.GetArgString("EntityID");
+		m_EntityNo = arg.GetArgString("EntityNo");
+		m_EntityName  = arg.GetArgString("EntityName");
+		m_DocumentID = "";
+		return 1;
+	}
+		
+	int OnCmdDispatch(string comdid)
+	{
+		if(comdid=="xmSort")
+		{
+			OpenWindow("dev:xpage[DataSort.dialog.vx]",cast(m_dataset as int));
+			return 1;
+		}
+		if(comdid=="print:PrintImmediate") 
+		{
+			updated = true;
+			return OnPrint();
+		}
+		if(comdid=="print:PrintPaper") {
+			updated = true;
+			return PrintPaper();
+		}
+		if(comdid=="print:PrintPreview") {
+			updated = true;
+			return OnPrintPreview();
+		}
+		if(comdid=="print:Portrait") {
+			updated = true;
+			return OnPortrait();
+		}
+		if(comdid=="print:Landscape") {
+			updated = true;
+			return OnLandscape();
+		}
+		if(comdid=="print:PageSetup") {
+			updated = true;
+			return OnPageSetup();
+		}
+		if(comdid=="print:Custom") {
+			updated = true;
+			return OnCustom();
+		}
+		if(comdid=="print:PrintDialog") 
+		{	
+			if(updated)
+			{
+				int res = win32::MessageBox(this.GetHWND(), "单据已制作,是否保存?","提示",4);
+				if(res == 6)OnCmdDispatch("print:AddToDocumentList");
+			}
+			if(GetParam())
+			{
+				xaserverarg arg1 = new xaserverarg;
+				arg1.setNativePointer(GetParam());		
+				arg1.AddArg("action","new");
+				OnPrintDialog();
+				arg1.AddArg("action","");
+			}
+			return 1;
+		}
+		if(comdid.find("print:toExcel",0)>=0) {
+			updated = true;
+			return OntoExcel();
+		}
+		if(comdid.find("print:Export",0)>=0) {
+			updated = true;
+			return OnExport();
+		}
+		if(comdid.find("print:SaveAs",0)>=0) return OnSaveAs();
+		if(comdid.find("print:Edit",0)>=0) {
+			updated = true;
+			return OnEdit();
+		}
+		if(comdid.find("action:Close",0)>=0) return CloseWindow();
+		if(comdid=="print:OpenDocument") return OnOpenDocument();
+		if(comdid=="print:AddToDocumentList") return OnAddToDocument();
+		if(comdid.find("action:",0)>=0) return ProcessFlowAction(comdid, 1);
+		
+		if(comdid.left(3) == "xmSort")
+		{
+			//string str = 
+			return 1;
+		}
+		
+		if(comdid.left(3) == "IK_")
+		{
+			string cmd = comdid.mid(3, comdid.length());
+			SendCtrlCmd(cell,cmd);
+			return 1;
+		}
+		if(comdid=="print:MaintTemplate")
+		{
+			OpenWindow("dev:xpage[Maint.Template.Print.vx]");
+			return 1;
+		}
+		if(comdid == "print:RefreshData"){			
+			return OnRefreshData();
+		}
+		
+		if(comdid == "xxx") 
+		{
+			ole_print.ExecWB(27,0);
+			return 1;
+				alert("xxx");
+					xml x1 = new xml;
+			x1.setNativePointer(xml::CreateInstance());
+			xaserver::ExecXQuery(GetServerUrl(), "[xsl.getdevobj.xq]","<args/>",x1);
+		}
+		
+		if(comdid == "xxx") 
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());		
+			arg.AddArg("strHtml",m_strHtml);
+			if (url::get("/sale/data/SysPrintTemplate/WebBrowser",arg.GetString(),x) != 1)
+			{
+				alert("数据集出错了!");
+				return 0;
+			}
+			string strHtml = x.GetXml();
+			ole_print.LoadHtml(strHtml);		
+		}
+		return 0;
+	}
+
+	int OnXCommand(ref TXCommandEvent evt,int p)
+	{
+		return OnCmdDispatch(evt.pStrID);
+	}
+		
+	int OnAttachEvent()
+	{
+		AttachEvent("WM_XCOMMAND",OnXCommand);
+		AttachEvent("WM_SETFOCUS",OnSetFocus);
+		//AttachEvent("WM_CLOSE",OnCloseOwnerWindow);
+		
+		return 0;
+	}
+	
+	int getURLParam()
+	{		
+		return 1;
+	}
+	
+	virtual int BeforeCloseWindow()
+	{
+		if(!updated) return 1;
+		
+		int MB_YESNOCANCEL = 3;
+		int IDYES = 6;
+		int IDNO = 7;
+		int IDCANCEL  = 2;
+		int re = win32::MessageBox(this.GetHWND(), "单据已制作,是否保存?","提示:",MB_YESNOCANCEL);
+		if(re==IDCANCEL) return -1;
+		if(re==IDNO) return 1;
+		OnCmdDispatch("print:AddToDocumentList");
+		return -1;
+	}
+			
+	int onload()
+	{
+		OnAttachEvent();
+		AttachCloseWindow();
+		ole_print = GetControl("ole_print");		
+		cell = GetControl("xcell");
+		
+		//showgrid = false;
+		editing = false;
+		SetAgent();
+		
+		m_dataset = 0;
+		billName = "";
+		billID = "";
+		billPre = "";
+		m_DocumentID = "";
+		PaperPrint = false;
+		
+		return 1;
+	}
+	
+	int onloaded()
+	{
+		updated = false;
+		if(GetParam())
+		{
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(GetParam());
+			string templateName = arg.GetArgString("template-name");
+			if(templateName =="")
+			{
+				OnPrintDialog();
+			}
+				
+			else
+			{
+				win32::SetWindowText(GetHWND(),templateName);
+				OnHtml(arg);
+				billName = templateName;
+				billPre = arg.GetArgString("template-pre");
+				billID = arg.GetArgString("template-guid");
+				m_EntityID  = arg.GetArgString("EntityID");
+				m_EntityNo = arg.GetArgString("EntityNo");
+				m_EntityName  = arg.GetArgString("EntityName");
+				m_DocumentID = "";
+			}
+		}else
+			OnPrintDialog();
+		return 1;
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/workflow/workflow.actionlog.cpp b/jrj/project/workflow/workflow.actionlog.cpp
new file mode 100644
index 0000000..b8dc383
--- /dev/null
+++ b/jrj/project/workflow/workflow.actionlog.cpp
@@ -0,0 +1,66 @@
+class workflow_actionlog : public win__
+		{
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				CloseWindow();
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int param)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+			}
+			
+			
+			int onload()
+			{	
+				OnAttachEvent();
+				
+				xdwgrid__ dw_loglist = new xdwgrid__;
+				dw_loglist.setNativePointer(GetControl("dw_loglist"));
+				dw_loglist.openUrl("/sale/view/workflow.view/template/chkdlg/loglist");
+				
+				if(this.GetParam())
+				{
+					xaserverarg__ argx = new xaserverarg__;
+					argx.setNativePointer(argx.CreateInstance());		
+					xaserverarg__ arg = this.GetParam();
+					argx.AddArg("EntityID",arg.GetArgString("EntityID"));
+					xml__ x = new xml__;
+					x.setNativePointer(xml__ ::CreateInstance());
+					url::get("/sale/data/workflow.core/workflow/chk/loglist", argx.GetString(), x);
+					dw_loglist.Retrieve(x);
+					dw_loglist.SetReadOnly(true);
+				
+					xflowchart__ dw_chart = new xflowchart__;
+					dw_chart.setNativePointer(GetControl("dw_logchart"));					
+					xml__ xc = new xml__;
+					xc.setNativePointer(xml__ ::CreateInstance());
+					url::get("/sale/data/workflow.core/workflow/chk/logchart", argx.GetString(), xc);
+					msxml::IXMLDOMElement e = xc.GetXmlDoc().documentElement;
+					dw_chart.LoadEx(e);
+				
+					/*
+					string xbox = "<vbox><ximage  name='pic'  transparent='1' src='/business/flow/"+arg.GetArgString("EntityName")+".jpg'/></vbox>";
+					xnode__ anode = new xnode__;
+					anode.setNativePointer(GetAgentNode("flowimage"));			
+					SetAgentNodeContent (anode,xbox);*/
+					
+					imageview__ im = new imageview__;
+					im.setNativePointer(GetControl("image"));
+					//alert(arg.GetArgString("EntityName"));
+					im.AddImages("/business/flow/"+arg.GetArgString("EntityName")+".jpg");
+				}
+				
+				return 1;
+			}
+
+		}
\ No newline at end of file
diff --git a/jrj/project/workflow/workflow.actionlog_vd.cpp b/jrj/project/workflow/workflow.actionlog_vd.cpp
new file mode 100644
index 0000000..8636365
--- /dev/null
+++ b/jrj/project/workflow/workflow.actionlog_vd.cpp
@@ -0,0 +1,70 @@
+class workflow_actionlog_vd : public win__
+		{
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				CloseWindow();
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int param)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+			}
+			
+			
+			int onload()
+			{
+				OnAttachEvent();
+				
+				
+				xdwgrid__ dw_loglist = new xdwgrid__;
+				dw_loglist.setNativePointer(GetControl("dw_loglist"));
+				dw_loglist.openUrl("/sale/view/workflow.view/template/chkdlg/loglist");
+				if(this.GetParam())
+				{
+
+				
+					int iArgs = GetParam();
+					xaserverarg__ argx = new xaserverarg__;
+					argx.setNativePointer(iArgs);						
+				
+					argx.AddArg("EntityID",argx.GetArgString("EntityID"));
+				
+					xml__ x = new xml__;
+					x.setNativePointer(xml__ ::CreateInstance());
+					url::get("/sale/data/workflow.core/workflow/chk/loglist", argx.GetString(), x);
+					dw_loglist.Retrieve(x);
+					dw_loglist.SetReadOnly(true);
+				
+					xflowchart__ dw_chart = new xflowchart__;
+					dw_chart.setNativePointer(GetControl("dw_logchart"));					
+					xml__ xc = new xml__;
+					xc.setNativePointer(xml__ ::CreateInstance());
+					url::get("/sale/data/workflow.core/workflow/chk/logchart", argx.GetString(), xc);
+					msxml::IXMLDOMElement e = xc.GetXmlDoc().documentElement;
+					dw_chart.LoadEx(e);
+				
+					/*
+					string xbox = "<vbox><ximage  name='pic'  transparent='1' src='/business/flow/"+arg.GetArgString("EntityName")+".jpg'/></vbox>";
+					xnode__ anode = new xnode__;
+					anode.setNativePointer(GetAgentNode("flowimage"));			
+					SetAgentNodeContent (anode,xbox);*/
+					
+					imageview__ im = new imageview__;
+					im.setNativePointer(GetControl("image"));
+					trace(argx.GetArgString("EntityName"));
+					im.AddImages("/business/flow/"+argx.GetArgString("EntityName")+".jpg");
+				}
+				
+				return 1;
+			}
+
+		}
\ No newline at end of file
diff --git a/jrj/project/workflow/workflow.chkdlg.cpp b/jrj/project/workflow/workflow.chkdlg.cpp
new file mode 100644
index 0000000..5b60cd1
--- /dev/null
+++ b/jrj/project/workflow/workflow.chkdlg.cpp
@@ -0,0 +1,68 @@
+class workflow_chkdlg : public win__
+		{
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				if(this.GetParam())
+				{
+					if(comdid=="xmOK")
+					{
+						control__ xc = new control__;
+						xc.setNativePointer(GetControl("content"));
+						string str = ""+xc.GetText();
+						//trace(str);
+						xaserverarg__ arg = this.GetParam();
+						arg.AddArg("content",str);
+					}
+					arg.AddArg("comdid",comdid);
+				}
+				CloseWindow();
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int param)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+			}
+			
+			
+			int onload()
+			{
+				OnAttachEvent();
+				xaserverarg__ arg;
+				if(this.GetParam())
+				{
+					arg = this.GetParam();
+					control__ xc = new control__;
+					xc.setNativePointer(GetControl("content"));
+					xc.SetText(""+arg.GetArgString("content"));
+				}
+				
+				xdwgrid__ dw_loglist = new xdwgrid__;
+				dw_loglist.setNativePointer(GetControl("dw_loglist"));
+				dw_loglist.openUrl("/sale/view/workflow.view/template/chkdlg/loglist");
+				
+				if(this.GetParam())
+				{
+					xaserverarg__ argx = new xaserverarg__;
+					argx.setNativePointer(argx.CreateInstance());		
+					arg = this.GetParam();
+					argx.AddArg("EntityID",arg.GetArgString("EntityID"));
+					xml__ x = new xml__;
+					x.setNativePointer(xml__ ::CreateInstance());
+					url::get("/sale/data/workflow.core/workflow/chk/loglist", argx.GetString(), x);
+					dw_loglist.Retrieve(x);
+					dw_loglist.SetReadOnly(true);
+				}
+				
+				return 1;
+			}
+
+		}
\ No newline at end of file
diff --git a/jrj/project/workflow/workflow.chkdlg_vd.cpp b/jrj/project/workflow/workflow.chkdlg_vd.cpp
new file mode 100644
index 0000000..c6d51e8
--- /dev/null
+++ b/jrj/project/workflow/workflow.chkdlg_vd.cpp
@@ -0,0 +1,76 @@
+class workflow_chkdlg_vd : public win__
+		{
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				if(this.GetParam())
+				{
+					if(comdid=="xmOK")
+					{
+						control__ xc = new control__;
+						xc.setNativePointer(GetControl("content"));
+						string str = ""+xc.GetText();
+						//trace(str);
+						int iArgs = GetParam();
+						xaserverarg__ arg = new xaserverarg__;
+						arg.setNativePointer(iArgs);						
+						arg.AddArg("content",str);
+					}
+					arg.AddArg("comdid",comdid);
+				}
+				CloseWindow();
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int param)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+			}
+			
+			
+			int onload()
+			{
+				//alert("新的");
+				OnAttachEvent();
+				xaserverarg__ arg;
+				if(this.GetParam())
+				{
+					int iArgsx = this.GetParam();
+					arg = new xaserverarg__;				
+					arg.setNativePointer(iArgsx);
+					//trace(iArgsx);
+					control__ xc = new control__;
+					xc.setNativePointer(GetControl("content"));
+					xc.SetText(""+arg.GetArgString("content"));
+				}
+				
+				xdwgrid__ dw_loglist = new xdwgrid__;
+				dw_loglist.setNativePointer(GetControl("dw_loglist"));
+				dw_loglist.openUrl("/sale/view/workflow.view/template/chkdlg/loglist");
+				
+				if(this.GetParam())
+				{
+
+					int iArgs = GetParam();
+					xaserverarg__ argx = new xaserverarg__;
+					argx.setNativePointer(iArgs);					
+				
+					argx.AddArg("EntityID",arg.GetArgString("EntityID"));
+					xml__ x = new xml__;
+					x.setNativePointer(xml__ ::CreateInstance());
+					url::get("/sale/data/workflow.core/workflow/chk/loglist", argx.GetString(), x);
+					dw_loglist.Retrieve(x);
+					dw_loglist.SetReadOnly(true);
+				}
+				
+				return 1;
+			}
+
+		}
\ No newline at end of file

--
Gitblit v1.9.3