#include #include #include #include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) ColorCardNew : public listwin { public: xdwgrid dw_list; xdwgrid dw_detail; bool ismodify; xnode m_agentNode; xstring m_agentCond; public: ColorCardNew(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {} public: static ColorCardNew* CreateInstance(void* implPtr, void* hWnd) { ColorCardNew* pWin = new ColorCardNew(implPtr, (HWND)hWnd); return pWin; } int SetAgent() { xstring xfNodeAgentArea = L"agentarea"; xnode anode = GetAgentNode(xfNodeAgentArea); KXMLDOMElement xframeElement = GetElement(); KXMLDOMNode agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*"); if(agent) SetAgentNode(anode, agent.xml()); return 1; } //½¹µã¼¤»î´¦Àíº¯Êý int OnSetFocus(TEvent* evt, LPARAM param) { SetAgent(); //ÖØÖù¤¾ßÌõ return 1; } int ProcessFlowAction(xstring guid,xstring comdid) { //int pr = pr1; //xstring action = comdid;//.mid(comdid.find(L"action:",0)+7,9999); /*if(action == L"bill.delete" || action == L"bill.deleteEx") { if (MessageBox(GetHWND(),L"ÊÇ·ñÈ·¶¨É¾³ý¼Ç¼!",L"Ìáʾ1",1) == 2) return 1; }*/ xaserverarg arg0 ; //arg0.AddArg(L"Action", action,L"xs:xstring"); arg0.AddArg(L"EntityName", L"ColorCard",L"xs:xstring"); arg0.AddArg(L"EntityIDName", L"ColorCardID",L"xs:xstring"); arg0.AddArg(L"EntityID", guid,L"xs:xstring"); arg0.AddArg(L"FunctionCode", comdid,L"xs:xstring"); xml x ; if(xurl::get(L"/sale/data/Role.config/sys/sql/action", arg0.GetString(), x) != 1) { //ismodify=false; //dw_list.SetReadOnly(ismodify); return -1; } xstring kk=x.xml(); if(kk.find(L"",0)>=0) { //ismodify=true; //dw_list.SetReadOnly(ismodify); return 1; } return -1; } int ModifyProcessAction(xstring guid,xstring comdid) { if(ProcessFlowAction(guid,comdid)>0) { ismodify=true; dw_list.SetReadOnly(ismodify); return -1; } else { ismodify=false; dw_list.SetReadOnly(ismodify); return -1; } } int DeleteProcessAction(xstring guid,xstring comdid) { if(ProcessFlowAction(guid,comdid)>0) { return -1; //ûÓÐȨÏÞ } else { return 1; //ÓÐȨÏÞ } } //¸ù¾ÝColorCardID¼ÓÔØDetailÊý¾Ý int OnRetrieveDetail(xstring ColorCardID) { xml x; xaserverarg arg; arg.AddArg(L"ColorCardID",ColorCardID); if (xurl::get(L"ColorCard/entity/list1",arg.GetString(),x) != 1) { trace(x.text()); return -1; } dw_detail.Retrieve(x); dw_detail.Redraw(); dw_detail.SetReadOnly(ismodify); return 1; } int OnPreSave() { if (dw_list) { xstring colorCardCName; xstring colorCardName; xstring orgID; int i; int row = dw_list.GetRowCount(); for (i=1; i<=row;i++) { colorCardCName=dw_list.GetItemString(i,L"ColorCardCName")+L""; colorCardName=dw_list.GetItemString(i,L"ColorCardName")+L""; orgID=dw_list.GetItemString(i,L"OrgID")+L""; if (colorCardCName==L"" || !colorCardCName) { alert(L"µÚ"+xstring(i)+L"ÐÐÉ«¿¨Ãû³ÆÖÐÎÄΪ¿Õ"); return -1; } if (colorCardName==L"" || !colorCardName) { alert(L"µÚ"+ xstring(i) +L"ÐÐÉ«¿¨Ãû³ÆÎª¿Õ"); return -1; } if (orgID==L"" || !orgID) { alert(L"µÚ"+ xstring(i) +L"ÐйØÁª×é֯Ϊ¿Õ"); return -1; } } } return 1 ; } //±£´æ int OnSave() { dw_list.AcceptText(); dw_detail.AcceptText(); int rec; rec = OnPreSave(); if (rec == -1) return -1; xml x; dw_list.DwUpdateAllToEx(x); xaserverarg arg; KXMLDOMElement e= x.selectSingleNode(L"root"); arg.AddArg(L"content",e.xml()); arg.AddArg(L"dbmap",L"ColorCard.dbmap"); if (xurl::get(L"ColorCard/pref/colorcard.save",arg.GetString(),x) != 1) { trace(L"error:"+(xstring)x.xml()); alert(L"±£´æÊ§°Ü!"); return 0; } else { alert(L"±£´æ³É¹¦!"); dw_list.ResetUpdateStatus(); } dw_list.Redraw(); } //ÐÂÔö int OnAdd() { dw_list.AcceptText(); int nrow=dw_list.InsertRow(0); dw_list.ShowRowTo(nrow); xstring tempguid = publiccode::GetGuid(); dw_list.SetItemString(nrow,L"ColorCardID",tempguid); OnRetrieveDetail(tempguid); return 1; } //²åÈë int OnInsert() { dw_list.AcceptText(); int row = dw_list.GetRow(); if(row<1) return 0; int nrow=dw_list.InsertRow(row); xstring tempguid = publiccode::GetGuid(); dw_list.SetItemString(nrow,L"ColorCardID",tempguid); OnRetrieveDetail(tempguid); } //ɾ³ý int OnDelete() { dw_list.AcceptText(); int row = dw_list.GetRow(); if(row<1) return 0; xstring id=dw_list.GetItemString(row,L"ColorCardID"); if(DeleteProcessAction(id,L"DeleteColorCard")<0) { alert(L"ÄúûÓÐȨÏÞɾ³ý¸ÃÊý¾Ý"); return -1; } if(id !=L"") { xml x; xaserverarg arg; arg.AddArg(L"ColorCardID", id); if(xurl::get(L"ColorCard/pref/beforedelete",arg.GetString(),x)!=1) { trace(L"error:"+(xstring)x.xml()); alert(L"ɾ³ý³ö´í!"); return 0; } KXMLDOMElement e= x.documentElement(); if(e.selectSingleNode(L"error")) { alert(e.selectSingleNode(L"error").text()); return 0; } } dw_list.DeleteRow(row); } int OnAddRowDetail() { dw_detail.AcceptText(); int nrow=dw_detail.InsertRow(0); xstring tempguid = publiccode::GetGuid(); dw_detail.SetItemString(dw_detail.GetRow(),L"ColorCardID",dw_list.GetItemString(dw_list.GetRow(),L"ColorCardID")); dw_detail.SetItemString(dw_detail.GetRow(),L"ColorID",tempguid); //OnRetrieveDetail(tempguid); dw_detail.ShowRowTo(nrow); return 1; } int OnInsertRowDetail() { dw_detail.AcceptText(); int row = dw_detail.GetRow(); if(row<1) return 0; int nrow=dw_detail.InsertRow(row); xstring tempguid = publiccode::GetGuid(); dw_detail.SetItemString(dw_detail.GetRow(),L"ColorCardID",dw_list.GetItemString(dw_list.GetRow(),L"ColorCardID")); dw_detail.SetItemString(dw_detail.GetRow(),L"ColorID",tempguid); return 1; } int OnDelRowDetail() { int row = dw_detail.GetRow(); int rowz = dw_list.GetRow(); if(row<1)return 0; dw_detail.DeleteRow(row); KXMLDOMElement ez= dw_list.GetRowElement(rowz); xml xz; dw_detail.DwUpdateAllToEx(xz); if (ez.selectSingleNode(L"root")) ez.removeChild(ez.selectSingleNode(L"root")); ez.appendChild(xz.documentElement()); return 1; } //ÃüÁî·¢²¼º¯Êý int OnCmdDispatch(xstring comdid) { if(comdid==L"save") OnSave(); else if(comdid==L"add") OnAdd(); else if(comdid==L"insert") OnInsert(); else if(comdid==L"del") OnDelete(); else if(comdid==L"addrowDetail") OnAddRowDetail(); else if(comdid==L"insertrowDetail") OnInsertRowDetail(); else if(comdid==L"deleterowDetail") OnDelRowDetail(); return 1; } //ÃüÁî´¦Àíʼþ int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } //Ðиıäʼþ int OnListRowChanged(TEvent* evt, int p) { dw_detail.AcceptText(); DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; dw_list.Redraw(); KXMLDOMElement e = dw_list.GetRowElement(row); xstring ColorCardID = e.selectSingleNode(L"ColorCardID").text(); OnRetrieveDetail(ColorCardID); return 1; } int OnDetailChanged(TEvent* evt, int p) { int row = dw_list.GetRow(); KXMLDOMElement e= dw_list.GetRowElement(row); xml x; dw_detail.DwUpdateAllToEx(x); if (e.selectSingleNode(L"root")) e.removeChild(e.selectSingleNode(L"root")); e.appendChild(x.documentElement()); return 0; } int OnDwListClick(TEvent* evt, int p) { DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; dw_list.Redraw(); KXMLDOMElement e = dw_list.GetRowElement(row); xstring ColorCardID = e.selectSingleNode(L"ColorCardID").text(); ModifyProcessAction(ColorCardID,L"ModifyColorCard"); return 1; } int OnAttachEvent() { //°ó¶¨¹¤¾ßÌõµã»÷ʼþ AttachEvent(L"WM_XCOMMAND", (FEvent)&ColorCardNew::OnXCommand); //»ñÈ¡½¹µãʼþ£¬ÓÃÓÚÖØÖù¤¾ßÌõ AttachEvent(L"WM_SETFOCUS", (FEvent)&ColorCardNew::OnSetFocus); //Ðиıäʼþ AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED", (FEvent)&ColorCardNew::OnListRowChanged); AttachEvent(L"dw_detail",L"DWV_ITEMCHANGED", (FEvent)&ColorCardNew::OnDetailChanged); //AttachEvent(L"dw_list",L"DWV_ITEMCHANGED",OnDetailChanged); AttachEvent(L"dw_list",L"DWV_CLICKED", (FEvent)&ColorCardNew::OnDwListClick); return 1; } int OnRetrieve(xstring str) { xml x; xaserverarg arg; arg.AddArg(L"id",str); if (xurl::get(L"ColorCard/entity/list",arg.GetString(),x) != 1) { trace(x.text()); return -1; } //doc=x; dw_list.Retrieve(x); dw_list.Redraw(); return 1; } int OnInitial() { SetAgent(); OnAttachEvent(); return 1; } int onload() { dw_list = GetControl(L"dw_list"); dw_list.openUrl(L"²úÆ·ÉèÖÃ.vface/template/ColorCard/list"); dw_detail = GetControl(L"dw_detail"); dw_detail.openUrl(L"²úÆ·ÉèÖÃ.vface/template/ColorCard/listex"); OnInitial(); OnRetrieve(L"FND_ColorCard"); return 1; } };