#include #include #include #include #include #include #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" #include "viewobject/view.base.hpp" using xml = KXMLDOMDocument; class __declspec(dllexport) DataConfig : public xframe { public: xtreeview dw_tree; xdwgrid dw_list; xdwgrid dw_role; combobox dw_ddlb; xlayersheet m_sheet; public: DataConfig(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} public: static DataConfig* CreateInstance(void* implPtr, void* hWnd) { DataConfig* pWin = new DataConfig(implPtr, (HWND)hWnd); return pWin; } int alert(xstring str) { TApp::alert(this, str, 3); return 0; } int createTree(KXMLDOMElement e, HTREEITEM parentItem) { if (dw_tree.GetChildItem(parentItem) > 0) return 0; var list = e.selectNodes(L"item"); int i = 0, s = list.length; KXMLDOMElement xitem; for (i = 0; i < s; i++) { xitem = list.item(s - i - 1); xstring Name = xitem.selectSingleNode(L"name").text(); xstring image = xitem.selectSingleNode(L"image").text(); HTREEITEM curItem = dw_tree.InsertItem(parentItem, 0, Name, xitem, image.toInt()); xstring child = xitem.selectSingleNode(L"child").text(); if (child != L"0") dw_tree.SetItemChild1(curItem, 1); } return 1; } int OnTreeExpanding(TEvent* evt, LPARAM p) { NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; HTREEITEM sitem = nmtv.itemNew.hItem; int i = dw_ddlb.GetCurSel(); KXMLDOMElement e = dw_tree.GetItemData(sitem); xstring id = e.selectSingleNode(L"id").text(); xstring xid = e.selectSingleNode(L"tree").text(); HCURSOR hCursor = xutil::SetCursorWait(); xml x; xaserverarg arg; arg.AddArg(L"pid", id); arg.AddArg(L"tree", xid); //if(xaserver::ExecXQuery(GetServerUrl(),L"[selectRoleInt.xq]",arg.GetString(),x)!=1) if (xurl::get(L"/sale/data/Role.config/pref/user/select", arg.GetString(), x) != 1) { trace(L"´íÎó·µ»Ø=L" + (xstring)x.xml()); return -1; } KXMLDOMElement ele = x.documentElement(); createTree(ele, sitem); xutil::RestoreCursor(hCursor); return 1; } int OnRetrieve(xstring id) { HCURSOR hIcon = xutil::SetCursorWait(); xml x; xaserverarg arg; arg.AddArg(L"id", id); trace(id); arg.AddArg(L"flag", L"-1"); //if(xaserver::ExecXQuery(GetServerUrl(),L"[selectRoleInt.xq]",arg.GetString(),x)!=1) if (xurl::get(L"/sale/data/Role.config/pref/maint/data", arg.GetString(), x) != 1) { trace(L"´íÎó·µ»Ø1=L" + (xstring)x.xml()); return -1; } if ((xstring)x.xml() == L"") x.loadXML(L""); xml x1; if (x.selectSingleNode(L"root/items")) { dw_list.Retrieve(x.selectSingleNode(L"root/items")); dw_list.SetReadOnly(true); dw_list.Redraw(); } else { x1.loadXML(L""); dw_list.Retrieve(x1); dw_list.SetReadOnly(true); dw_list.Redraw(); } if (x.selectSingleNode(L"root/roles")) { dw_role.Retrieve(x.selectSingleNode(L"root/roles")); dw_role.SetReadOnly(true); dw_role.Redraw(); } else { x1.loadXML(L""); dw_role.Retrieve(x1); dw_role.SetReadOnly(true); dw_role.Redraw(); } xutil::RestoreCursor(hIcon); return 1; } int OnTreeSelecded(TEvent* evt, LPARAM p) { NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; HTREEITEM hItem = nmtv.itemNew.hItem; //int wid = dw_tree.GetId(); KXMLDOMElement ele = dw_tree.GetItemData(hItem); xstring id = ele.selectSingleNode(L"id").text(); OnRetrieve(id); return 1; } int OnSelect() { int nIndex = dw_ddlb.GetCurSel(); combobox dw_ddlbdata = new combobox; dw_ddlbdata.setNativePointer(GetControl(L"dw_ddlbdata")); int h = combobox::FindString(dw_ddlbdata.GetId(), xstring(nIndex)); param p; xnode bnode; xnode anode = new xnode; anode.setNativePointer(GetAgentNode(L"tree")); if (h < 0) { xstring str = L""; bnode = new xnode; bnode.setNativePointer(SetAgentNode(anode, str)); p = combobox::GetItemData(dw_ddlb.GetId(), nIndex); KXMLDOMElement ele = p; dw_tree = new treeview; dw_tree.setNativePointer(GetControl(L"dw_tree" + xstring(nIndex))); createTree(ele, 0); AttachEvent(L"dw_tree" + xstring(nIndex), L"TVN_ITEMEXPANDING", (FEvent)&DataConfig::OnTreeExpanding); AttachEvent(L"dw_tree" + xstring(nIndex), L"TVN_SELCHANGED", (FEvent)&DataConfig::OnTreeSelecded); int sk = combobox::AddItem(dw_ddlbdata.GetId(), xstring(nIndex)); p = bnode; combobox::SetItemData(dw_ddlbdata.GetId(), sk, p); } else { p = combobox::GetItemData(dw_ddlbdata.GetId(), h); bnode = p; SetAgentNode(anode, bnode); dw_tree = new treeview; dw_tree.setNativePointer(GetControl(L"dw_tree" + xstring(nIndex))); } return 1; } int OnSave() { HTREEITEM m = dw_tree.GetSelectedItem(); if (m == 0) return 0; //int wid = dw_tree.GetId(); HTREEITEM hItem = dw_tree.GetSelectedItem(); KXMLDOMElement ele = dw_tree.GetItemData(hItem); xstring id = ele.selectSingleNode(L"id").text(); xstring tpy = ele.selectSingleNode(L"type").text(); xml x; dw_list.DwUpdateAllToEx(x); KXMLDOMElement e = x.documentElement(); e.setAttribute(L"id", id); e.setAttribute(L"type", tpy); xml x1; dw_role.DwUpdateAllToEx(x1); KXMLDOMElement e1 = x1.documentElement(); e.appendChild(e1); xaserverarg arg; arg.AddArg(L"content", e.xml()); arg.AddArg(L"dbmap", L"Data.config.dbmap"); //if(xaserver::ExecXAction(GetServerUrl(),L"[onSave.xa]",arg.GetString(),x)!=1) if (xurl::get(L"/sale/data/Role.config/pref/save", arg.GetString(), x) != 1) //if(xurl::get(L"/workflow/action/datarole.resource/bill.update",arg.GetString(),x)!=1) { trace(L"error:" + (xstring)x.xml()); alert(L"±£´æ³ö´í!"); return 0; } if (x.selectSingleNode(L"error")) { alert(L"±£´æ³ö´í2!"); return 0; } dw_list.ResetUpdateStatus(); dw_role.ResetUpdateStatus(); alert(L"±£´æ³É¹¦!"); return 1; } int OnSelectDdlb(TEvent* evt, LPARAM p) { xml x; dw_list.DwUpdateAllToEx(x); KXMLDOMElement e = x.documentElement(); if (e) { var list = e.selectNodes(L"//*[@update.new='1' or @update.modify='1' or @update.delete='1']"); int s = list.length; if (s > 0) { int ret = MessageBox(GetHWND(), L"µ±Ç°Ð޸ļÇ¼δ±£´æ£¬ÊÇ·ñ±£´æ£¿", L"Ìáʾ", 4); if (ret == 6) OnSave(); } } OnSelect(); HTREEITEM m = dw_tree.GetSelectedItem(); xstring id; if (m == 0) { id = L""; } else { KXMLDOMElement ele = dw_tree.GetItemData(m); id = ele.selectSingleNode(L"id").text(); } OnRetrieve(id); return 1; } int createTreeRoot() { xml x; xaserverarg arg; arg.AddArg(L"pid", L""); arg.AddArg(L"tree", L"0"); //if(xaserver::ExecXQuery(GetServerUrl(),L"[selectRoleInt.xq]",arg.GetString(),x)!=1) if (xurl::get(L"/sale/data/Role.config/pref/user/select", arg.GetString(), x) != 1) { trace(L"´íÎó·µ»Ø=L" + (xstring)x.xml()); return -1; } KXMLDOMElement e = x.documentElement(); var list = e.selectNodes(L"*"); int i; int len = list.length; KXMLDOMElement ele; for (i = 0; i < len; i++) { ele = list.item(i); xstring name = ele.selectSingleNode(L"@tree").text(); int sk = combobox::AddItem(dw_ddlb.GetId(), name); param p = ele; combobox::SetItemData(dw_ddlb.GetId(), sk, p); } if (len > 0) { combobox::SetCurSel(dw_ddlb.GetId(), 0); OnSelect(); } OnRetrieve(L""); return 1; } int OnSetFocus(TEvent* evt, LPARAM p) { SetAgent(L"data"); return 1; } xstring GetPath() { HTREEITEM h = dw_tree.GetSelectedItem(); if (h == 0) return 0; //int tv = dw_tree.GetId(); xstring str = dw_tree.GetItemLabel(h); HTREEITEM k = dw_tree.GetParentItem(h); while (k > 0) { xstring tmp = dw_tree.GetItemLabel(k); str = tmp + L"\\" + str; k = dw_tree.GetParentItem(k); } return str; } int OnAddRole() { HTREEITEM m = dw_tree.GetSelectedItem(); if (m == 0) return -1; KXMLDOMElement ele = dw_tree.GetItemData(m); xstring tpy = L"" + (xstring)ele.selectSingleNode(L"type").text(); xaserverarg arg; arg.setNativePointer(arg.CreateInstance()); arg.AddArg(L"dataUrl", L"/sale/data/Role.config/pref/model/select"); openUrl(L"/sale/view/Role.config/xpage/role/select/user", arg); xstring str = arg.GetArgString(L"item"); if (str == L"") return -1; xml x; x.loadXML(str); var list = x.selectNodes(L"items/item"); int i = 0, s = list.length; KXMLDOMElement xitem; int row = dw_role.GetRowCount() + 1; xstring treepath = GetPath(); for (i = 0; i < s; i++) { xitem = list.item(i); xstring id = L"" + (xstring)xitem.selectSingleNode(L"@id").text(); xstring name = L"" + (xstring)xitem.selectSingleNode(L"@name").text(); //xstring tpy=L""+xitem.selectSingleNode(L"@type").text(); dw_role.InsertRow(0); dw_role.SetItemString(row + i, L"id", id); dw_role.SetItemString(row + i, L"name", L"" + treepath); dw_role.SetItemDisplayString(row + i, L"name", name); dw_role.SetItemString(row + i, L"type", tpy); } return 1; } int OnAddRow() { HTREEITEM m = dw_tree.GetSelectedItem(); if (m == 0) return 0; int k = m_sheet.GetSheetIndex(); if (k == 0) //openUrl(L"/sale/view/role.config/xpage/data/select/resource", dw_list); OpenWindow(L"dev:xpage[Resource.select.data.config.vx]", dw_list); else OnAddRole(); return 1; } int OnDelRow() { int k = m_sheet.GetSheetIndex(); int row; xstring hr_type; KXMLDOMElement e; if (k == 0) { row = dw_list.GetRow(); if (row<1 || row > dw_list.GetRowCount()) return -1; e = dw_list.GetRowElement(row); if (e.selectSingleNode(L"fromparent")) { hr_type = e.selectSingleNode(L"fromparent").text(); if (hr_type != L"") { alert(L"¼Ì³ÐµÄȨÏÞÎÞȨɾ³ý£¡"); return 0; } } dw_list.DeleteRow(row); } else { row = dw_role.GetRow(); if (row<1 || row > dw_role.GetRowCount()) return -1; e = dw_role.GetRowElement(row); if (e.selectSingleNode(L"fromparent")) { hr_type = e.selectSingleNode(L"fromparent").text(); if (hr_type != L"") { alert(L"¼Ì³ÐµÄȨÏÞÎÞȨɾ³ý£¡"); return 0; } } dw_role.DeleteRow(row); } return 1; } int OnSetCopy(xdwgrid dw, KXMLDOMElement e, xstring name) { xml x; KXMLDOMElement ele; bool f = false; int count = dw.GetRowCount(); if (count == 0) { x.loadXML(L"<" + name + L"s/>"); ele = x.documentElement(); } else { KXMLDOMElement e1 = dw.GetRowElement(1); ele = e1.parentNode; } var li = e.selectNodes(name); int i; int len = li.length; xstring treepath = GetPath(); for (i = 0; i < len; i++) { KXMLDOMElement ele1 = li.item(i); if (ele1.selectSingleNode(L"fromparent")) { xstring str = ele1.selectSingleNode(L"fromparent").text(); if (str != L"") continue; } xml x1; x1.loadXML(ele1.xml()); KXMLDOMElement ele2 = x1.documentElement(); ele2.setAttribute(L"update.new", L"1"); ele2.setAttribute(L"update.modify", L"1"); ele2.setAttribute(L"guid", publiccode::GetGuid()); if (ele2.selectSingleNode(L"name")) ele2.selectSingleNode(L"name").text() = treepath; //ele1.selectSingleNode(L"@guid").text() = publiccode::GetGuid(); //ele1.selectSingleNode(L"@update.new").text() = L"1"; //ele1.selectSingleNode(L"@update.modify").text() = L"1"; ele.appendChild(ele2); } dw.Retrieve(ele); dw.SetReadOnly(true); dw.Redraw(); return 1; } int OnCopy() { xaserverarg arg; OpenWindow(L"dev:xpage[Data.config.copy.vx]", arg); xstring id = arg.GetArgString(L"id"); xstring f = arg.GetArgString(L"flag"); if (id == L"") return 1; xml x; if (xurl::get(L"/sale/data/Role.config/pref/maint/data", arg.GetString(), x) != 1) { trace(L"´íÎó·µ»Ø=L" + (xstring)x.xml()); return -1; } if ((xstring)x.xml() == L"") x.loadXML(L""); KXMLDOMElement e = x.documentElement(); if (f == L"0" || f == L"1") { KXMLDOMElement ele1 = e.selectSingleNode(L"items"); OnSetCopy(dw_list, ele1, L"item"); } if (f == L"0" || f == L"2") { KXMLDOMElement ele2 = e.selectSingleNode(L"roles"); OnSetCopy(dw_role, ele2, L"role"); } return 1; } int OnCmdDispatch(xstring comdid) { if (comdid == L"Config") openUrl(L"/sale/view/role.config/xpage/data/resource/config"); if (comdid == L"RightQuery") openUrl(L"/sale/view/role.config/xpage/data/modulerightquery"); else if (comdid == L"New") OnAddRow(); else if (comdid == L"Del") OnDelRow(); else if (comdid == L"Save") OnSave(); else if (comdid == L"Copy") OnCopy(); else if (comdid == L"xmProdDivi") openUrl(L"/sale/view/RoleAccount3/xpage/data/proddivi"); return 0; } int OnXCommand(TEvent* evt, LPARAM param) { return OnCmdDispatch(evt->xcommand.pStrID); } int onload() { SetAgent(L"data"); dw_list = new xdwgrid; dw_list.setNativePointer(GetControl(L"dw_list")); dw_list.openUrl(L"/sale/view/Role.config/template/data/config/resourceOrg"); dw_list.SetReadOnly(false); dw_role = new xdwgrid; dw_role.setNativePointer(GetControl(L"dw_role")); //dw_role.SetDataObject(GetServerUrl(), L"dev:sheet[leftFrame.tpl/role]"); //dw_role.openUrl(m_vface+L"/template/role/config/role"); dw_role.openUrl(L"/sale/view/Role.config/template/role/config/role"); dw_role.SetReadOnly(false); dw_ddlb = new combobox; dw_ddlb.setNativePointer(GetControl(L"dw_ddlb")); m_sheet = new xlayersheet; m_sheet.setNativePointer(GetControl(L"m_sheet")); AttachEvent(L"WM_XCOMMAND", (FEvent)&DataConfig::OnXCommand); AttachEvent(L"WM_SETFOCUS", (FEvent)&DataConfig::OnSetFocus); AttachEvent(L"dw_ddlb", L"CBN_SELCHANGE", (FEvent)&DataConfig::OnSelectDdlb); createTreeRoot(); return 1; } };