#include <wobject/xstring.hpp>
|
#include <wobject/xstring.hpp>
|
#include <xcontrol/xtreeview.hpp>
|
#include <xcontrol/xdwgrid.hpp>
|
#include <wobject/xdouble.hpp>
|
#include <xcontrol/xlayersheet.hpp>
|
|
#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.setNativePointer(arg.CreateInstance());
|
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.setNativePointer(arg.CreateInstance());
|
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 (x.xml() == L"")
|
x.loadXML(L"<root><items/><roles/></root>");
|
|
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"<items/>");
|
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"<roles/>");
|
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"<vbox><xtree name='dw_tree" + xstring(nIndex) + L"' imagelist='0'/></vbox>";
|
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 (x.xml() == L"")
|
x.loadXML(L"<root><items/><roles/></root>");
|
|
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;
|
}
|
};
|