From b1d01ea6fa62ce12c2e592b3315186f6b3c8359d Mon Sep 17 00:00:00 2001 From: xj qian <qianxj15@sina.com> Date: 星期三, 17 七月 2024 15:20:38 +0800 Subject: [PATCH] Merge branch 'master' of http://116.62.18.175:6699/r/mis-prj --- jrj/project/business/SystemSettings/Flow3.cpp | 476 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 476 insertions(+), 0 deletions(-) diff --git a/jrj/project/business/SystemSettings/Flow3.cpp b/jrj/project/business/SystemSettings/Flow3.cpp new file mode 100644 index 0000000..b12854a --- /dev/null +++ b/jrj/project/business/SystemSettings/Flow3.cpp @@ -0,0 +1,476 @@ +#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; + } + }; \ No newline at end of file -- Gitblit v1.9.3