#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;
|
}
|
};
|