¶Ô±ÈÐÂÎļþ |
| | |
| | | #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 "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; |
| | | } |
| | | xdwgrid GetSheetDbmap(int index) |
| | | { |
| | | xstring typ = GetSheetType(index); |
| | | if(typ==L"flowitem") return "flow.dbmap"; |
| | | if(typ==L"actionrole") return "workflow.actionrole.dbmap"; |
| | | if(typ==L"state") return "state.dbmap"; |
| | | if(typ==L"button") return "button.dbmap"; |
| | | if(typ==L"role") return "role.dbmap"; |
| | | if(typ==L"bill") return "bill.dbmap"; |
| | | if(typ==L"scene") return "scene.dbmap"; |
| | | if(typ==L"fieldrole") return "workflow.datarole.dbmap"; |
| | | return 0; |
| | | } |
| | | |
| | | 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.text() = flowid; |
| | | }else |
| | | { |
| | | e = x.createElement(L"flowID"); |
| | | e.setAttribute(L"update.modify",L"1"); |
| | | e.text() = 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,display); |
| | | dw_list.SetItemString(row,colname,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"); |
| | | int obj = cast(dw_list as int); |
| | | arg.SetArg(L"dwobj",obj.toString(),L"xstring"); |
| | | 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 = *(KXMLDOMElement*)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(flowUrl,L"",f)==1) |
| | | { |
| | | flowchart.LoadEx(f.documentElement()); |
| | | } |
| | | }else |
| | | { |
| | | f.loadXML(L"<sheet/>"); |
| | | flowchart.LoadEx(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(); |
| | | int 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; |
| | | int h= tv_folder.InsertChildItem(hItem,label, trust(e as int),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; |
| | | } |
| | | }; |