LiFan
2025-04-29 6c8c9ddaeb2bc6245a374c9354296bcfc2d96c06
jrj/project/business/SystemSettings/Flow3.cpp
@@ -1,12 +1,19 @@
use "xcontrol.vframe.vbusiness.vd"
use "xbase.vframe.vbusiness.vd"
use "base.view.vd"
use "xflowchart.wobject.wface.vd"
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xlayersheet.hpp>
#include <xcontrol/xdatetimepick.hpp>
#include <xcontrol/xflowchart.hpp>
unit trade
[
   class flow :  public xframe
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
   class  __declspec(dllexport) flow :  public xframe
   {
   public:
      xtreeview tv_1;
      xlayersheet   tab_1;
      xdwgrid   dw_flow;
@@ -17,133 +24,138 @@
      xdwgrid   dw_scene;
      xdwgrid   dw_buttonright;
      xdwgrid   dw_datafieldright;
      string    flowid;
      xstring    flowid;
   
      xtreeview tv_folder;
      xnode   m_agentNode;   //Agent Condition
      string GetSheetType(int index)
   public:
      flow(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
   public:
      static flow* CreateInstance(void* implPtr, void* hWnd)
      {
         if (index == 0)  return "flowitem";
         else if (index == 1) return "state";
         else if (index == 2) return "actionrole";
         else if (index == 3) return "button";
         else if (index == 4) return "role";
         else if (index == 5) return "bill";
         else if (index == 6) return "scene";
         else if (index ==7) return "fieldrole";
         else return "unkown";
         flow* pWin = new flow(implPtr, (HWND)hWnd);
         return pWin;
      }
      xstring GetSheetType(int index)
      {
         if (index == 0)  return L"flowitem";
         else if (index == 1) return L"state";
         else if (index == 2) return L"actionrole";
         else if (index == 3) return L"button";
         else if (index == 4) return L"role";
         else if (index == 5) return L"bill";
         else if (index == 6) return L"scene";
         else if (index ==7) return L"fieldrole";
         else return L"unkown";
      }
      xdwgrid GetSheetDwgrid(int index)
      {
         string typ = GetSheetType(index);
         if(typ=="flowitem") return dw_flow;
         if(typ=="actionrole") return dw_buttonright;
         if(typ=="state") return dw_state;
         if(typ=="button") return dw_button;
         if(typ=="role") return dw_role;
         if(typ=="bill") return dw_bill;
         if(typ=="scene") return dw_scene;
         if(typ=="fieldrole") return dw_datafieldright;
         xstring typ = GetSheetType(index);
         if(typ==L"flowitem") return dw_flow;
         if(typ==L"actionrole") return dw_buttonright;
         if(typ==L"state") return dw_state;
         if(typ==L"button") return dw_button;
         if(typ==L"role") return dw_role;
         if(typ==L"bill") return dw_bill;
         if(typ==L"scene") return dw_scene;
         if(typ==L"fieldrole") return dw_datafieldright;
         return 0;
      }
      xdwgrid GetSheetDbmap(int index)
      xstring GetSheetDbmap(int index)
      {
         string typ = GetSheetType(index);
         if(typ=="flowitem") return "flow.dbmap";
         if(typ=="actionrole") return "workflow.actionrole.dbmap";
         if(typ=="state") return "state.dbmap";
         if(typ=="button") return "button.dbmap";
         if(typ=="role") return "role.dbmap";
         if(typ=="bill") return "bill.dbmap";
         if(typ=="scene") return "scene.dbmap";
         if(typ=="fieldrole") return "workflow.datarole.dbmap";
         return 0;
         xstring typ = GetSheetType(index);
         if(typ==L"flowitem") return L"flow.dbmap";
         if(typ==L"actionrole") return L"workflow.actionrole.dbmap";
         if(typ==L"state") return L"state.dbmap";
         if(typ==L"button") return L"button.dbmap";
         if(typ==L"role") return L"role.dbmap";
         if(typ==L"bill") return L"bill.dbmap";
         if(typ==L"scene") return L"scene.dbmap";
         if(typ==L"fieldrole") return L"workflow.datarole.dbmap";
         return L"";
      }
      
      string GetDwname(string typ)
      xstring GetDwname(xstring typ)
      {
         if(typ=="flowitem") return "/sale/view/Flow3/template/flow";
         if(typ=="actionrole") return "/sale/view/Flow3/template/buttonright";
         if(typ=="state") return "/sale/view/Flow3/template/state";
         if(typ=="button") return "/sale/view/Flow3/template/button";
         if(typ=="role") return "/sale/view/Flow3/template/role";
         if(typ=="bill") return "/sale/view/Flow3/template/bill";
         if(typ=="scene") return "/sale/view/Flow3/template/scene";
         if(typ=="fieldrole") return "/sale/view/Flow3/template/datafieldright";
         return "";
         if(typ==L"flowitem") return L"/sale/view/Flow3/template/flow";
         if(typ==L"actionrole") return L"/sale/view/Flow3/template/buttonright";
         if(typ==L"state") return L"/sale/view/Flow3/template/state";
         if(typ==L"button") return L"/sale/view/Flow3/template/button";
         if(typ==L"role") return L"/sale/view/Flow3/template/role";
         if(typ==L"bill") return L"/sale/view/Flow3/template/bill";
         if(typ==L"scene") return L"/sale/view/Flow3/template/scene";
         if(typ==L"fieldrole") return L"/sale/view/Flow3/template/datafieldright";
         return L"";
      }
      
      int SetAgent()
      {
         string xfNodeAgentArea  = "agentarea";
         xstring xfNodeAgentArea  = L"agentarea";
         xnode anode = GetAgentNode(xfNodeAgentArea);
         if(m_agentNode)
         {
            SetAgentNodeContent (anode,m_agentNode);
            SetAgentNode (anode,m_agentNode);
         }
         else
         {
            msxml::IXMLDOMElement xframeElement =  GetElement();
            msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
            KXMLDOMElement xframeElement =  GetElement();
            KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
            if(agent)
            {
               string s = agent.xml;
               m_agentNode =  SetAgentNodeContent (anode,s);
               xstring s = agent.xml();
               m_agentNode =  SetAgentNode (anode,s);
            }
         }
         return 1;
      }
      int OnSave()
      {
         if(flowid=="") return 1;
         if(flowid==L"") return 1;
            
         string sdbmap;
         xml x = new xml;
         x.setNativePointer(xml::CreateInstance());
         xstring sdbmap;
         xml x ;
         int index = tab_1.GetSheetIndex();
         sdbmap = GetSheetDbmap(index);
         sdbmap = (xstring)GetSheetDbmap(index);
         xdwgrid dw_list = GetSheetDwgrid(index);
         dw_list.DwUpdateAllToEx(x.GetXmlDoc());
         //trace(x.GetXml());
         dw_list.DwUpdateAllToEx(x);
         //trace(x.xml());
         msxml::IXMLDOMNodeList ls = x.GetXmlDoc().documentElement.SelectNodes("*[@update.modify='1' and @update.new='1']");
         int len = ls.length;
         KXMLDOMNodeList ls = x.documentElement().selectNodes(L"*[@update.modify='1' and @update.new='1']");
         int len = ls.length();
         for(int k=0;k<len;k++)
         {
            msxml::IXMLDOMElement e;
            if(ls.item(k).selectSingleNode("flowID"))
            KXMLDOMElement e;
            if(ls.item(k).selectSingleNode(L"flowID"))
            {
               e = ls.item(k).selectSingleNode("flowID");
               e.setAttribute("update.modify","1");
               e.text = flowid;
               e = ls.item(k).selectSingleNode(L"flowID");
               e.setAttribute(L"update.modify",L"1");
               e.settext(flowid);
            }else
            {
               e = x.GetXmlDoc().createElement("flowID");
               e.setAttribute("update.modify","1");
               e.text = flowid;
               e = x.createElement(L"flowID");
               e.setAttribute(L"update.modify",L"1");
               e.settext(flowid);
               ls.item(k).appendChild(e);
            }
         }
            
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         arg.AddArg("content",x.GetXml());
         arg.AddArg("sdbmap",sdbmap);
         trace(x.GetXml());
         if(url::get("/sale/data/Flow3/save/flow", arg.GetString(),x)!=1)
         xaserverarg arg ;
         arg.AddArg(L"content",x.xml());
         arg.AddArg(L"sdbmap",sdbmap);
         trace(x.xml());
         if(xurl::get(L"/sale/data/Flow3/save/flow", arg.GetString(),x)!=1)
         {
            string error = x.GetXmlDoc().text;
            alert("err:"+error);
            xstring error = x.text();
            alert(L"err:"+error);
            return 1;
         }
         
         dw_list.ResetUpdateStatus();
         
         //alert(x.GetXml());
         alert("保存成功!");
         //alert(x.xml());
         alert(L"保存成功!");
         
         return 1;
      }
@@ -174,7 +186,7 @@
      }
      
      //焦点激活处理函数
      int OnSetFocus(ref TEvent evt,int param)
      int OnSetFocus(TEvent* evt, LPARAM param)
      {
         //重置工具条
         SetAgent();
@@ -184,82 +196,81 @@
         return 1;
      }
      int OnClicked(ref TNotifyEvent evt,int p)
      {
         ref DWNMHDR  hdr = evt.pnmh;
      int OnClicked(TEvent* evt, int p)
      {
         DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
         int row = hdr.row;
         string colname=hdr.colname;
         xstring colname=hdr.colname;
         //trace(colname);
         
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         xaserverarg arg ;
         string comdid ="";
         string data="";
         string display="";
         xstring comdid =L"";
         xstring data=L"";
         xstring display=L"";
         xdwgrid dw_list;
         
         int index = tab_1.GetSheetIndex();
         dw_list = GetSheetDwgrid(index);
         
         arg.AddArg("sdata","");
         arg.AddArg("flowid",flowid);
         arg.AddArg(L"sdata",L"");
         arg.AddArg(L"flowid",flowid);
         
         if(colname=="billID")
         if(colname==L"billID")
         {
            arg.AddArg("stype","bill");
            arg.AddArg("datacolumn","billID");
            arg.AddArg("displaycolumn","billName");
            arg.AddArg("dwname","/sale/view/Flow3/template/bill");
            arg.AddArg(L"stype",L"bill");
            arg.AddArg(L"datacolumn",L"billID");
            arg.AddArg(L"displaycolumn",L"billName");
            arg.AddArg(L"dwname",L"/sale/view/Flow3/template/bill");
         }
         else if(colname=="stateSource")
         else if(colname==L"stateSource")
         {
            arg.AddArg("stype","state");
            arg.AddArg("datacolumn","stateID");
            arg.AddArg("displaycolumn","stateName");
            arg.AddArg("dwname","/sale/view/Flow3/template/state");
            arg.AddArg(L"stype",L"state");
            arg.AddArg(L"datacolumn",L"stateID");
            arg.AddArg(L"displaycolumn",L"stateName");
            arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
         }
         else if(colname=="state")
         else if(colname==L"state")
         {
            arg.AddArg("stype","state");
            arg.AddArg("datacolumn","stateID");
            arg.AddArg("displaycolumn","stateName");
            arg.AddArg("dwname","/sale/view/Flow3/template/state");
            arg.AddArg(L"stype",L"state");
            arg.AddArg(L"datacolumn",L"stateID");
            arg.AddArg(L"displaycolumn",L"stateName");
            arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
         }
         else if(colname=="stateTarget")
         else if(colname==L"stateTarget")
         {
            arg.AddArg("stype","state");
            arg.AddArg("datacolumn","stateID");
            arg.AddArg("displaycolumn","stateName");
            arg.AddArg("dwname","/sale/view/Flow3/template/state");
            arg.AddArg(L"stype",L"state");
            arg.AddArg(L"datacolumn",L"stateID");
            arg.AddArg(L"displaycolumn",L"stateName");
            arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
         }
         else if(colname=="roles")
         else if(colname==L"roles")
         {
            arg.AddArg("stype","role");
            arg.AddArg("datacolumn","roleName");
            arg.AddArg("displaycolumn","roleName");
            arg.AddArg("dwname","/sale/view/Flow3/template/role");
            arg.AddArg(L"stype",L"role");
            arg.AddArg(L"datacolumn",L"roleName");
            arg.AddArg(L"displaycolumn",L"roleName");
            arg.AddArg(L"dwname",L"/sale/view/Flow3/template/role");
         }
         else if(colname=="flowAction")
         else if(colname==L"flowAction")
         {
            arg.AddArg("stype","button");
            arg.AddArg("datacolumn","buttonName");
            arg.AddArg("displaycolumn","buttonName");
            arg.AddArg("dwname","/sale/view/Flow3/template/button");
            arg.AddArg(L"stype",L"button");
            arg.AddArg(L"datacolumn",L"buttonName");
            arg.AddArg(L"displaycolumn",L"buttonName");
            arg.AddArg(L"dwname",L"/sale/view/Flow3/template/button");
         }
         else 
            return 1;
         
         OpenWindow("dev:xpage[FlowTermSelect.vx]",cast(arg as int));
         comdid = arg.GetArgString("comdid");
         OpenWindow(L"dev:xpage[FlowTermSelect.vx]",arg);
         comdid = arg.GetArgString(L"comdid");
         
         if(comdid=="xmOk")
         if(comdid==L"xmOk")
         {
            data = arg.GetArgString("data");
            display = arg.GetArgString("display");
            dw_list.SetItemDisplayString(row,colname,display);
            dw_list.SetItemString(row,colname,data);
            data = arg.GetArgString(L"data");
            display = arg.GetArgString(L"display");
            dw_list.SetItemDisplayString(row,colname.c_str(), display);
            dw_list.SetItemString(row,colname.c_str(), data);
            dw_list.Redraw();
         }   
@@ -271,40 +282,37 @@
         int i = tab_1.GetSheetIndex();
         xdwgrid dw_list = GetSheetDwgrid(i);
         
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         arg.SetArg("stype",GetSheetType(i),"string");
         arg.SetArg("sdata","ddd","string");
         arg.SetArg("flowID",flowid,"string");
         int obj = cast(dw_list as int);
         arg.SetArg("dwobj",obj.toString(),"string");
         arg.SetArg("dwname",GetDwname(GetSheetType(i)),"string");
         OpenWindow("dev:xpage[FlowTermImport.vx]",cast(arg as int));
         xaserverarg arg ;
         arg.SetArg(L"stype",GetSheetType(i),L"xstring");
         arg.SetArg(L"sdata",L"ddd",L"xstring");
         arg.SetArg(L"flowID",flowid,L"xstring");
         arg.SetParam(L"dwobj",&dw_list);
         arg.SetArg(L"dwname",GetDwname(GetSheetType(i)),L"xstring");
         OpenWindow(L"dev:xpage[FlowTermImport.vx]",arg);
         return 1;
      }
         
      int  OnRetrieve()
      {
         if(flowid=="") return 1;
         if(flowid==L"") return 1;
         
         xml x = new xml;
         x.setNativePointer(xml::CreateInstance());
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         xml x;
         xaserverarg arg;
         
         //int i = tab_1.GetSheetIndex();
         for(int i=0;i<7;i++)
         {
            //alert(i.toString());
            arg.SetArg("stype",GetSheetType(i),"string");
            arg.SetArg("sdata","ddd","string");
            arg.SetArg("flowID",flowid,"string");
            arg.SetArg(L"stype",GetSheetType(i),L"xstring");
            arg.SetArg(L"sdata",L"ddd",L"xstring");
            arg.SetArg(L"flowID",flowid,L"xstring");
            
            //trace(arg.GetString());
            if (getUrl("/sale/data/Flow3/retrieve/flowex",arg.GetString(),x)!=1)
            if (getUrl(L"/sale/data/Flow3/retrieve/flowex",arg.GetString(),x)!=1)
            {
               //trace(x.GetXmlDoc().text);
               //trace(x.text());
               //return -1;
               continue;
            }
@@ -316,14 +324,15 @@
         return 1;
      }
      
      int OnTreeSelChanged(ref TNotifyEvent evt,int p)
      int OnTreeSelChanged(TEvent* evt, int p)
      {
         ref NMTREEVIEW nmtv = cast(evt.pnmh as NMTREEVIEW);
         int hItem = nmtv.itemNew.hItem;
         msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement);
         flowid = e.getAttribute("flowID");
         NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
         HTREEITEM hItem = nmtv.itemNew.hItem;
         KXMLDOMElement e = tv_1.GetItemData(hItem);
         flowid = e.getAttribute(L"flowID");
            
         int hCursor = xutil::SetCursorWait();
         HCURSOR hCursor = xutil::SetCursorWait();
         SetFlowChart(e);
         OnRetrieve();
         xutil::RestoreCursor(hCursor);
@@ -331,70 +340,70 @@
         return 1;
      }   
      int OnTabSelectSheet(ref TNotifyEvent evt,int p)
      int OnTabSelectSheet(TEvent* evt, int p)
      {
         //OnRetrieve();
         
         return 1;
      }
         
      int SetFlowChart(msxml::IXMLDOMElement e)
      int SetFlowChart(KXMLDOMElement e)
      {
         string flowUrl = e.getAttribute("flowchart");
         xflowchart flowchart = GetControl("flowchart");
         xml f = new xml;
         f.setNativePointer(xml::CreateInstance());
         if(flowUrl != "")
         xstring flowUrl = e.getAttribute(L"flowchart");
         xflowchart flowchart = GetControl(L"flowchart");
         xml f ;
         if(flowUrl != L"")
         {
            if(xaserver::FetchXml(flowUrl,"",f)==1)
            if(xaserver::FetchXml(GetServerUrl(),flowUrl,L"",f)==1)
            {
               flowchart.LoadEx(f.GetXmlDoc().documentElement);
               flowchart.Load(f.documentElement());
            }
         }else
         {
            f.LoadXml("<sheet/>");
            flowchart.LoadEx(f.GetXmlDoc().documentElement);
            f.loadXML(L"<sheet/>");
            flowchart.Load(f.documentElement());
         }
         return 1;
      }
         
      //命令发布函数
      int OnCmdDispatch(string comdid)
      int OnCmdDispatch(xstring comdid)
      {
         if (comdid == "xmSave")
         if (comdid == L"xmSave")
            return OnSave();
         if (comdid == "xmAddrow")
         if (comdid == L"xmAddrow")
            return OnAddrow();
         if (comdid == "xmInsertrow")
         if (comdid == L"xmInsertrow")
            return OnInsertrow();
         if (comdid == "xmDeleterow")
         if (comdid == L"xmDeleterow")
            return OnDeleterow();
         if (comdid == "xmImport")
         if (comdid == L"xmImport")
            return OnImport();
            
         return 0;
      }
      //命令处理事件
      int OnXCommand(ref TXCommandEvent evt,int param)
      int OnXCommand(TEvent* evt, LPARAM param)
      {
         return OnCmdDispatch(evt.pStrID);
         return OnCmdDispatch(evt->xcommand.pStrID);
      }
      
      int OnAttachEvent()
      {
         //绑定工具条点击事件
         AttachEvent("WM_XCOMMAND",OnXCommand);
         AttachEvent(L"WM_XCOMMAND", (FEvent)&flow::OnXCommand);
         //获取焦点事件,用于重置工具条
         AttachEvent("WM_SETFOCUS",OnSetFocus);
         AttachEvent(L"WM_SETFOCUS", (FEvent)&flow::OnSetFocus);
         
         AttachEvent("tv_folder", "TVN_SELCHANGED",OnTreeSelChanged);
         AttachEvent("tab_1","LYSN_SELECTEDSHEET",OnTabSelectSheet);
         AttachEvent("dw_flow","DWV_CLICKED",OnClicked);
         AttachEvent("dw_buttonright","DWV_CLICKED",OnClicked);
         AttachEvent("dw_button","DWV_CLICKED",OnClicked);
         AttachEvent("dw_state","DWV_CLICKED",OnClicked);
         AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&flow::OnTreeSelChanged);
         AttachEvent(L"tab_1",L"LYSN_SELECTEDSHEET", (FEvent)&flow::OnTabSelectSheet);
         AttachEvent(L"dw_flow",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
         AttachEvent(L"dw_buttonright",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
         AttachEvent(L"dw_button",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
         AttachEvent(L"dw_state",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
         
         return 1;
      }
@@ -402,19 +411,19 @@
      int CreateFlowFloder()
      {
         
         xml x = ViewObject::RetrieveData("/sale/data/flow3/flowfolder");
         xml x = ViewObject::RetrieveData(L"/sale/data/flow3/flowfolder");
         if(x)
         {
            msxml::IXMLDOMNodeList nlist = x.GetXmlDoc().SelectNodes("//item");
            int len = nlist.length;
            int hItem = 0;
            KXMLDOMNodeList nlist = x.selectNodes(L"//item");
            int len = nlist.length();
            HTREEITEM hItem = 0;
            for (int i = 0; i < len; i++)
            {   
               msxml::IXMLDOMElement e = nlist.item(i);
               string name = e.getAttribute("flowName");
               string no = e.getAttribute("flowNo");
               string label = name;//no.trim() + " " + name;
               int h= tv_folder.InsertChildItem(hItem,label, trust(e as int),22);
               KXMLDOMElement e = nlist.item(i);
               xstring name = e.getAttribute(L"flowName");
               xstring no = e.getAttribute(L"flowNo");
               xstring label = name;//no.trim() + L" " + name;
               HTREEITEM h= tv_folder.InsertChildItem(hItem,label, e,22);
               //tv_folder.SetItemChild(h,1);
            }
         }
@@ -424,28 +433,28 @@
      int onload()
      {
         flowid = "";
         tv_folder = GetControl("tv_folder");
         flowid = L"";
         tv_folder = GetControl(L"tv_folder");
         CreateFlowFloder();
         
         tv_1 = GetControl("tv_1");
         tab_1 = GetControl("tab_1");
         dw_flow = GetControl("dw_flow");
         dw_flow.openUrl("/sale/view/Flow3/template/flow");
         dw_state = GetControl("dw_state");
         dw_state.openUrl("/sale/view/Flow3/template/state");
         dw_button = GetControl("dw_button");
         dw_button.openUrl("/sale/view/Flow3/template/button");
         dw_role = GetControl("dw_role");
         dw_role.openUrl("/sale/view/Flow3/template/role");
         dw_bill = GetControl("dw_bill");
         dw_bill.openUrl("/sale/view/Flow3/template/bill");
         dw_scene = GetControl("dw_scene");
         dw_scene.openUrl("/sale/view/Flow3/template/scene");
         dw_buttonright = GetControl("dw_buttonright");
         dw_buttonright.openUrl("/sale/view/Flow3/template/buttonright");
         dw_datafieldright = GetControl("dw_datafieldright");
         dw_datafieldright.openUrl("/sale/view/Flow3/template/datafieldright");
         tv_1 = GetControl(L"tv_1");
         tab_1 = GetControl(L"tab_1");
         dw_flow = GetControl(L"dw_flow");
         dw_flow.openUrl(L"/sale/view/Flow3/template/flow");
         dw_state = GetControl(L"dw_state");
         dw_state.openUrl(L"/sale/view/Flow3/template/state");
         dw_button = GetControl(L"dw_button");
         dw_button.openUrl(L"/sale/view/Flow3/template/button");
         dw_role = GetControl(L"dw_role");
         dw_role.openUrl(L"/sale/view/Flow3/template/role");
         dw_bill = GetControl(L"dw_bill");
         dw_bill.openUrl(L"/sale/view/Flow3/template/bill");
         dw_scene = GetControl(L"dw_scene");
         dw_scene.openUrl(L"/sale/view/Flow3/template/scene");
         dw_buttonright = GetControl(L"dw_buttonright");
         dw_buttonright.openUrl(L"/sale/view/Flow3/template/buttonright");
         dw_datafieldright = GetControl(L"dw_datafieldright");
         dw_datafieldright.openUrl(L"/sale/view/Flow3/template/datafieldright");
         
         OnAttachEvent();   
         
@@ -460,5 +469,4 @@
         
         return 1;
      }      
   };
]
   };