#include #include #include #include #include #include #include #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;knotify.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""); 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; } };