ÿþ#include <wobject/xstring.hpp> #include <xcontrol/xtreeview.hpp> #include <xcontrol/xdwgrid.hpp> #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) ListExGDN3Win : public listwin { public: ListExGDN3Win(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {} public: static ListExGDN3Win* CreateInstance(void* implPtr, void* hWnd) { ListExGDN3Win* pWin = new ListExGDN3Win(implPtr, (HWND)hWnd); return pWin; } public: xstring m_sType; //h -N„v{|‹W xstring m_sTypeTxt; //h -N„vpenc xstring urlTree; xstring myDataUrl; xtreeview tv_folder; xdwgrid dw_goods; xstring searchStr; //process tree //åg~bS_MRhy˜„vv˜§~îvU_ HTREEITEM LookupTopFolder(HTREEITEM hItem) { HTREEITEM hRoot = tv_folder.GetRootItem(); while(tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem); return hItem; } int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele ,int image) { KXMLDOMNodeList nlist = ele.selectNodes(L"item"); int len = nlist.length(); if(len > 0) tv_folder.SetItemChild(hItem,1); for (int i= 0; i < len; i++) { KXMLDOMElement e = nlist.item(i); xstring name = e.getAttribute(L"name"); HTREEITEM h = tv_folder.InsertChildItem(hItem,name, e,image); ExpandCatChildFolder(h,e,35); } return 1; } int ExpandFolderItem(HTREEITEM hItem,xstring no) { xml x = ViewObject::RetrieveData(urlTree,L"no",no); if(!x) return 0; KXMLDOMNodeList nlist = x.selectNodes(L"/data/item"); int len = nlist.length(); for (int i = 0; i < len; i++) { KXMLDOMElement e = nlist.item(i); xstring name = e.getAttribute(L"name"); HTREEITEM h = tv_folder.InsertChildItem(hItem,name, e ,35); ExpandCatChildFolder(h,e,35); } return 1; } //hU\_ int OnTreeExpanding(TEvent* evt, int p) { NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; HTREEITEM hItem = nmtv.itemNew.hItem; HTREEITEM hTopItem = LookupTopFolder(hItem); xstring name = tv_folder.GetItemLabel(hTopItem); HTREEITEM child = tv_folder.GetChildItem(hItem); KXMLDOMElement e = tv_folder.GetItemData(hItem); if (!child)ExpandFolderItem(hItem, e.getAttribute(L"no")); return 1; } int ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement) { KXMLDOMNodeList nlist = pElement.selectNodes(L"Item"); int len = nlist.length(); for (int i = 0; i < len; i++) { KXMLDOMElement e = nlist.item(i); xstring name = e.getAttribute(L"name"); xstring sImage = e.getAttribute(L"image"); int image = 15; //if(sImage) image = sImage.toInt(); HTREEITEM h= tv_folder.InsertChildItem(hItem,name, e ,image); tv_folder.SetItemChild(h,1); ExpandChildFolder(h,e); } return 1; } int InitialFolder() { KXMLDOMElement xframeElement = GetElement(); KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial"); if(e)ExpandChildFolder(0,e); return 1; } int OnTreeSelChanged(TEvent* evt, int p) { return OnPreRetrieve(); NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; HTREEITEM hItem = nmtv.itemNew.hItem; HTREEITEM hTopItem = LookupTopFolder(hItem); //if(hTopItem==hItem) return 1; HCURSOR hCursor = xutil::SetCursorWait(); KXMLDOMElement e1 = tv_folder.GetItemData(hItem); xstring no = e1.getAttribute(L"no"); xml x = ViewObject::RetrieveData(myDataUrl,L"no",no,L"QueryTxt", m_QueryTxt); alert(x.xml()); if(x) { dw_list.Retrieve(x); dw_list.Redraw(); }else { dw_list.Reset(); dw_list.Redraw(); dw_goods.Reset(); dw_goods.Redraw(); } dw_list.SetReadOnly(true); xutil::RestoreCursor(hCursor); return 1; } int OnSave() { xml x ; dw_list.AcceptText(); dw_list.DwUpdateAllToEx(x); xaserverarg arg ; xml x0 ; x0.loadXML(L"<root/>"); KXMLDOMNodeList t = x.selectNodes(L"root/GDN[(@update.new='1') or (@update.modify='1') or (@update.delete='1') ]"); KXMLDOMElement e1= x0.documentElement(); xstring val0 = x.xml(); for(int i=0; i < t.length(); i++) { KXMLDOMElement e= t.item(i); e1.appendChild(e); } x = ViewObject::RetrieveData(L"/sale/data/Gdn/update/trade/GDNUpdate",L"content",x0.xml()); xstring str = x.documentElement().getAttribute(L"text"); if(str == L"true") { dw_list.ResetUpdateStatus(); alert(L"ÝOX[bŸR!"); }else { alert(L"ÝOX[1Y%!"); } return 1; } int ViewUpdate(int pr,xstring updateItem,xaserverarg arg) { if( updateItem==L"del") { int DelRow = dw_list.GetRow(); dw_list.DeleteRow(DelRow); } else if( updateItem==L"setstate") { int row = dw_list.GetRow(); if (row < 1) return 1; KXMLDOMElement ele = dw_list.GetRowElement(row); xstring id = GetEntityIDName(1); xstring entity = ele.selectSingleNode(id).text(); //trace(entity); SetAgent(L"list", entity); if(arg.GetArgString(L"state") != L"") //dw_list.SetItemString(row, L"ApprovalStatus", arg.GetArgString(L"state")); dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state")); if(arg.GetArgString(L"billstatus") != L"") { xstring billstatus = arg.GetArgString(L"billstatus"); xstring statusName = GetBillStatusName(billstatus); dw_list.SetItemString(row, L"ApprovalStatus", billstatus); dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName); } dw_list.Redraw(); } return 1; } bool IsEmptyQueryStr(xstring queryStr) { if(queryStr==L"") return true; if(queryStr==L"<items join='and'/>") return true; if(queryStr==L"<items join=\"and\"/>") return true; trace(queryStr); return false; } //Àh"} int OnPreRetrieve() { /*xaserverarg arg ; arg.AddArg(L"QueryTxt", m_QueryTxt,L""); //ågâ‹agöN int hItem = tv_folder.GetSelectedItem(); if(hItem <=0) return 1; KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement); xstring no = e1.getAttribute(L"no"); arg.AddArg(L"no", no,L""); //ågâ‹agöN*/ HTREEITEM hItem = tv_folder.GetSelectedItem(); if(!hItem) return 1; HCURSOR hCursor = xutil::SetCursorWait(); KXMLDOMElement e1 = tv_folder.GetItemData(hItem); xstring no = e1.getAttribute(L"no"); xml x = 0; if(!(no ==L"Category:All" && IsEmptyQueryStr(m_QueryTxt))) trace(L"no=====L"+xstring(no)+L"===L"+m_QueryTxt); x = ViewObject::RetrieveData(myDataUrl,L"no",no,L"QueryTxt", m_QueryTxt,L"rows",L"1000000"); if(x) { dw_list.Retrieve(x); dw_list.Redraw(); }else { dw_list.Reset(); dw_list.Redraw(); dw_goods.Reset(); dw_goods.Redraw(); } //dw_list.SetReadOnly(true); xutil::RestoreCursor(hCursor); /* xml x =ViewObject::MakeXml(); KXMLDOMElement n = m_configDoc.selectSingleNode(L"//list/dwview[@type='dwgrid'][1]"); if(n) { KXMLDOMElement e = n; if(e.selectSingleNode(L"@dataurl")) { xstring dataUrl = e.selectSingleNode(L"@dataurl").text(); if(dataUrl.left(1)!=L"/") dataUrl = GetEntityName(1)+L"/"+dataUrl; int hCursor = xutil::SetCursorWait(); getUrl(dataUrl, arg.GetString(), x); if(x) { dw_list.Retrieve(x); dw_list.Redraw(); }else { dw_list.Reset(); dw_list.Redraw(); dw_goods.Reset(); dw_goods.Redraw(); } dw_list.SetReadOnly(true); xutil::RestoreCursor(hCursor); } else { SetEntityData(arg); } } else { SetEntityData(arg); } */ return 1; } int OnRowChanged(TEvent* evt, int p) { //fixed one event only one process listwin::OnRowChanged(evt,p); DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh; int row = hdr.row; HCURSOR hCursor = xutil::SetCursorWait(); xstring InvoiceNo = dw_list.GetItemString(row,L"InvoiceNo"); xml x = ViewObject::RetrieveData(L"/sale/data/Gdn/source/gdnline",L"invno",InvoiceNo); if(x) dw_goods.Retrieve(x); else dw_goods.Reset(); dw_goods.Redraw(); dw_goods.SetReadOnly(true); xutil::RestoreCursor(hCursor); return 1; } int OnSearch() { xaserverarg arg; arg.AddArg(L"text", searchStr); OpenWindow(L"dev:xpage[search.dialog.vx]", arg); xstring str = arg.GetArgString(L"text"); if(str != searchStr) { searchStr = str; dw_list.Filter(L"*",searchStr); return 1; } return 1; } int PreOnCmdDispatch(xstring comdid) { if(comdid==L"action:bill.open") { xaserverarg arg ; arg.AddArg(L"EntityNo", GetEntityNo(1)); arg.AddArg(L"EntityID", GetEntityID(1)); OpenWindow(L"dev:xpage[maintex.GDN3.vx]",arg); return 0; } return 1; } int PostOnCmdDispatch(xstring comdid) { if(comdid==L"action:bill.delete") return OnPreRetrieve(); else if(comdid == L"xmSearch") return OnSearch(); else if(comdid == L"xmSave") return OnSave(); else if(comdid==L"action:bill.refresh") return OnPreRetrieve(); else if(comdid==L"xmSaveAs") { xstring userno = publiccode::GetUser().no; if(userno == L"00601" || userno == L"00701" || userno == L"admin" ); { dw_list.SaveAs(L""); } return 1; } return 1; } int OnAttachEvent() { AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ListExGDN3Win::OnTreeSelChanged); //h éb AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ListExGDN3Win::OnTreeExpanding); //hU\_ AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED", (FEvent)&ListExGDN3Win::OnRowChanged); return 1; } int onload() { searchStr =L""; listwin::onload(); dw_goods = GetControl(L"dw_goods"); //dw_goods.openUrl(L"/sale/view/GDN/template/GDNItem"); dw_goods.SetColumnState(L"ItemID",false); dw_goods.SetColumnState(L"LineType",false); dw_goods.SetColumnState(L"LineNo",false); dw_goods.SetColumnState(L"Assortment",false); myDataUrl = L"/sale/data/GDN3/folder/list"; urlTree = L"/sale/data/GDN3/folder"; tv_folder = GetControl(L"tv_folder"); tv_folder.SetLineAtRoot(true); InitialFolder(); return 1; } int onloaded() { listwin::onloaded(); OnAttachEvent(); tv_folder.ItemFocus(tv_folder.GetNextItem(tv_folder.GetRootItem())); OnPreRetrieve(); return 1; } };