#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> 
 | 
  
 | 
  
 | 
#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; 
 | 
        xdwgrid    dw_state; 
 | 
        xdwgrid    dw_button; 
 | 
        xdwgrid    dw_role; 
 | 
        xdwgrid    dw_bill; 
 | 
        xdwgrid    dw_scene; 
 | 
        xdwgrid    dw_buttonright; 
 | 
        xdwgrid    dw_datafieldright; 
 | 
        xstring     flowid; 
 | 
     
 | 
        xtreeview tv_folder; 
 | 
  
 | 
        xnode    m_agentNode;    //Agent Condition 
 | 
    public: 
 | 
        flow(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} 
 | 
    public: 
 | 
        static flow* CreateInstance(void* implPtr, void* hWnd) 
 | 
        { 
 | 
            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) 
 | 
        { 
 | 
            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; 
 | 
        } 
 | 
        xstring GetSheetDbmap(int index) 
 | 
        { 
 | 
            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""; 
 | 
        } 
 | 
         
 | 
        xstring GetDwname(xstring typ) 
 | 
        { 
 | 
            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() 
 | 
        { 
 | 
            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 OnSave() 
 | 
        { 
 | 
            if(flowid==L"") return 1; 
 | 
                 
 | 
            xstring sdbmap; 
 | 
            xml x ; 
 | 
             
 | 
            int index = tab_1.GetSheetIndex(); 
 | 
            sdbmap = (xstring)GetSheetDbmap(index); 
 | 
            xdwgrid dw_list = GetSheetDwgrid(index); 
 | 
            dw_list.DwUpdateAllToEx(x); 
 | 
            //trace(x.xml()); 
 | 
  
 | 
            KXMLDOMNodeList ls = x.documentElement().selectNodes(L"*[@update.modify='1' and @update.new='1']"); 
 | 
            int len = ls.length(); 
 | 
            for(int k=0;k<len;k++) 
 | 
            { 
 | 
                KXMLDOMElement e; 
 | 
                if(ls.item(k).selectSingleNode(L"flowID")) 
 | 
                { 
 | 
                    e = ls.item(k).selectSingleNode(L"flowID"); 
 | 
                    e.setAttribute(L"update.modify",L"1"); 
 | 
                    e.settext(flowid); 
 | 
                }else 
 | 
                { 
 | 
                    e = x.createElement(L"flowID"); 
 | 
                    e.setAttribute(L"update.modify",L"1"); 
 | 
                    e.settext(flowid); 
 | 
                    ls.item(k).appendChild(e); 
 | 
                } 
 | 
            } 
 | 
                 
 | 
            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) 
 | 
            { 
 | 
                xstring error = x.text(); 
 | 
                alert(L"err:"+error); 
 | 
                return 1; 
 | 
            } 
 | 
             
 | 
            dw_list.ResetUpdateStatus(); 
 | 
             
 | 
            //alert(x.xml()); 
 | 
            alert(L"±£´æ³É¹¦£¡"); 
 | 
             
 | 
            return 1; 
 | 
        } 
 | 
        int OnAddrow() 
 | 
        { 
 | 
            int i = tab_1.GetSheetIndex(); 
 | 
            xdwgrid dw_list = GetSheetDwgrid(i); 
 | 
            dw_list.InsertRow(0); 
 | 
             
 | 
            return 1; 
 | 
        } 
 | 
         
 | 
        int OnInsertrow() 
 | 
        { 
 | 
            int i = tab_1.GetSheetIndex(); 
 | 
            xdwgrid dw_list = GetSheetDwgrid(i); 
 | 
            dw_list.InsertRow(dw_list.GetRow()); 
 | 
            return 1; 
 | 
        } 
 | 
         
 | 
        int OnDeleterow() 
 | 
        { 
 | 
            int i = tab_1.GetSheetIndex(); 
 | 
            xdwgrid dw_list = GetSheetDwgrid(i); 
 | 
            dw_list.DeleteRow(0); 
 | 
                 
 | 
            return 1; 
 | 
        } 
 | 
         
 | 
        //½¹µã¼¤»î´¦Àíº¯Êý 
 | 
        int OnSetFocus(TEvent* evt, LPARAM param) 
 | 
        { 
 | 
            //ÖØÖù¤¾ßÌõ 
 | 
            SetAgent(); 
 | 
             
 | 
            //alert(evt.hWnd.toString()); 
 | 
             
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        int OnClicked(TEvent* evt, int p) 
 | 
        { 
 | 
            DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; 
 | 
            int row = hdr.row; 
 | 
            xstring colname=hdr.colname; 
 | 
  
 | 
            //trace(colname); 
 | 
             
 | 
            xaserverarg arg ; 
 | 
  
 | 
            xstring comdid =L""; 
 | 
            xstring data=L""; 
 | 
            xstring display=L""; 
 | 
            xdwgrid dw_list; 
 | 
             
 | 
            int index = tab_1.GetSheetIndex(); 
 | 
            dw_list = GetSheetDwgrid(index); 
 | 
             
 | 
            arg.AddArg(L"sdata",L""); 
 | 
            arg.AddArg(L"flowid",flowid); 
 | 
             
 | 
            if(colname==L"billID") 
 | 
            { 
 | 
                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==L"stateSource") 
 | 
            { 
 | 
                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==L"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==L"stateTarget") 
 | 
            { 
 | 
                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==L"roles") 
 | 
            { 
 | 
                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==L"flowAction") 
 | 
            { 
 | 
                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(L"dev:xpage[FlowTermSelect.vx]",arg); 
 | 
            comdid = arg.GetArgString(L"comdid"); 
 | 
             
 | 
            if(comdid==L"xmOk") 
 | 
            { 
 | 
                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(); 
 | 
            }     
 | 
  
 | 
            return 1; 
 | 
        }                     
 | 
  
 | 
        int OnImport() 
 | 
        { 
 | 
            int i = tab_1.GetSheetIndex(); 
 | 
            xdwgrid dw_list = GetSheetDwgrid(i); 
 | 
             
 | 
            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==L"") return 1; 
 | 
             
 | 
            xml x; 
 | 
             
 | 
            xaserverarg arg;     
 | 
             
 | 
            //int i = tab_1.GetSheetIndex(); 
 | 
            for(int i=0;i<7;i++) 
 | 
            { 
 | 
                //alert(i.toString()); 
 | 
                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(L"/sale/data/Flow3/retrieve/flowex",arg.GetString(),x)!=1) 
 | 
                { 
 | 
                    //trace(x.text()); 
 | 
                    //return -1; 
 | 
                    continue; 
 | 
                } 
 | 
                xdwgrid dw_list = GetSheetDwgrid(i); 
 | 
                dw_list.Retrieve(x); 
 | 
                dw_list.Redraw(); 
 | 
            } 
 | 
             
 | 
            return 1; 
 | 
        } 
 | 
         
 | 
        int OnTreeSelChanged(TEvent* evt, int p) 
 | 
        { 
 | 
            NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; 
 | 
             
 | 
            HTREEITEM hItem = nmtv.itemNew.hItem; 
 | 
            KXMLDOMElement e = tv_1.GetItemData(hItem); 
 | 
            flowid = e.getAttribute(L"flowID"); 
 | 
                 
 | 
            HCURSOR hCursor = xutil::SetCursorWait(); 
 | 
            SetFlowChart(e); 
 | 
            OnRetrieve(); 
 | 
            xutil::RestoreCursor(hCursor); 
 | 
             
 | 
            return 1; 
 | 
        }     
 | 
  
 | 
        int OnTabSelectSheet(TEvent* evt, int p) 
 | 
        { 
 | 
            //OnRetrieve(); 
 | 
             
 | 
            return 1; 
 | 
        } 
 | 
             
 | 
        int SetFlowChart(KXMLDOMElement e) 
 | 
        { 
 | 
            xstring flowUrl = e.getAttribute(L"flowchart"); 
 | 
            xflowchart flowchart = GetControl(L"flowchart"); 
 | 
            xml f ; 
 | 
         
 | 
            if(flowUrl != L"") 
 | 
            { 
 | 
                if(xaserver::FetchXml(GetServerUrl(),flowUrl,L"",f)==1) 
 | 
                { 
 | 
                    flowchart.Load(f.documentElement()); 
 | 
                } 
 | 
            }else 
 | 
            { 
 | 
                f.loadXML(L"<sheet/>"); 
 | 
                flowchart.Load(f.documentElement()); 
 | 
            } 
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
             
 | 
        //ÃüÁî·¢²¼º¯Êý 
 | 
        int OnCmdDispatch(xstring comdid) 
 | 
        { 
 | 
            if (comdid == L"xmSave")  
 | 
                return OnSave(); 
 | 
            if (comdid == L"xmAddrow") 
 | 
                return OnAddrow(); 
 | 
            if (comdid == L"xmInsertrow") 
 | 
                return OnInsertrow(); 
 | 
            if (comdid == L"xmDeleterow") 
 | 
                return OnDeleterow(); 
 | 
            if (comdid == L"xmImport") 
 | 
                return OnImport(); 
 | 
                 
 | 
            return 0; 
 | 
        } 
 | 
  
 | 
        //ÃüÁî´¦Àíʼþ 
 | 
        int OnXCommand(TEvent* evt, LPARAM param) 
 | 
        { 
 | 
            return OnCmdDispatch(evt->xcommand.pStrID); 
 | 
        } 
 | 
         
 | 
        int OnAttachEvent() 
 | 
        { 
 | 
            //°ó¶¨¹¤¾ßÌõµã»÷ʼþ 
 | 
            AttachEvent(L"WM_XCOMMAND", (FEvent)&flow::OnXCommand); 
 | 
            //»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ 
 | 
            AttachEvent(L"WM_SETFOCUS", (FEvent)&flow::OnSetFocus); 
 | 
             
 | 
            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; 
 | 
        } 
 | 
         
 | 
        int CreateFlowFloder() 
 | 
        { 
 | 
             
 | 
            xml x = ViewObject::RetrieveData(L"/sale/data/flow3/flowfolder"); 
 | 
            if(x) 
 | 
            { 
 | 
                KXMLDOMNodeList nlist = x.selectNodes(L"//item");  
 | 
                int len = nlist.length(); 
 | 
                HTREEITEM hItem = 0; 
 | 
                for (int i = 0; i < len; i++) 
 | 
                {     
 | 
                    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); 
 | 
                } 
 | 
            } 
 | 
             
 | 
            return 1; 
 | 
        } 
 | 
  
 | 
        int onload() 
 | 
        { 
 | 
            flowid = L""; 
 | 
            tv_folder = GetControl(L"tv_folder"); 
 | 
            CreateFlowFloder(); 
 | 
             
 | 
            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();     
 | 
             
 | 
            return 1; 
 | 
        } 
 | 
         
 | 
        int onloaded() 
 | 
        { 
 | 
            SetAgent();             
 | 
             
 | 
            OnRetrieve(); 
 | 
             
 | 
            return 1; 
 | 
        }         
 | 
    }; 
 |