|  |  | 
 |  |  | use "win.vl" | 
 |  |  | use "dev:vm[xdwgrid.vm]" | 
 |  |  | use "dev:vm[xdwtable.vm]" | 
 |  |  | use "pref.vl" | 
 |  |  | use "dev:vm[xml.vm]" | 
 |  |  | use "dev:vm[xaserverarg.vm]" | 
 |  |  | use "dev:vm[xaserver.vm]" | 
 |  |  | use "dev:vm[xutil.vm]" | 
 |  |  | use "frame.vl" | 
 |  |  | use "treeview.vm" | 
 |  |  | #include <wobject/xstring.hpp> | 
 |  |  | #include <xcontrol/xtreeview.hpp> | 
 |  |  | #include <xcontrol/xdwgrid.hpp> | 
 |  |  | #include <wobject/xdouble.hpp> | 
 |  |  | #include <xcontrol/xlayersheet.hpp> | 
 |  |  |  | 
 |  |  | //unit vclient.vobject tpp | 
 |  |  | unit vbusiness.xpage | 
 |  |  | [ | 
 |  |  |    HrJob is extend frame; | 
 |  |  |    about HrJob | 
 |  |  |       [ | 
 |  |  |          field: | 
 |  |  |          [ | 
 |  |  |             treeview__      tv_1; | 
 |  |  |             xdwgrid__   dw_list; | 
 |  |  |             string    m_type; | 
 |  |  | #include "vbusiness/vframe/listwin.vframe.vbusiness.hpp" | 
 |  |  | #include "viewobject/view.base.hpp" | 
 |  |  |  | 
 |  |  |             xnode__   m_agentNode;   //Agent Condition | 
 |  |  |             string   m_agentCond;   //Agent Node | 
 |  |  |          ] | 
 |  |  | using xml = KXMLDOMDocument; | 
 |  |  | class __declspec(dllexport) HrJob : public xframe | 
 |  |  | { | 
 |  |  | public: | 
 |  |  |    xtreeview      tv_1; | 
 |  |  |    xdwgrid   dw_list; | 
 |  |  |    xstring    m_type; | 
 |  |  |  | 
 |  |  |             method: | 
 |  |  |          [ | 
 |  |  |             int SetAgent() | 
 |  |  |             { | 
 |  |  |                string xfNodeAgentArea = "agentarea"; | 
 |  |  |                xnode__ anode = new xnode__; | 
 |  |  |                anode.setNativePointer(GetAgentNode(xfNodeAgentArea)); | 
 |  |  |                var xframeElement = GetElement(); | 
 |  |  |                var agent = xframeElement.selectSingleNode("agent/" + xfNodeAgentArea + "[1]/*"); | 
 |  |  |                if (agent) | 
 |  |  |                { | 
 |  |  |                   string s = agent.xml; | 
 |  |  |                   SetAgentNodeContent(anode, s); | 
 |  |  |                } | 
 |  |  |                return 1; | 
 |  |  |             } | 
 |  |  |    xnode   m_agentNode;   //Agent Condition | 
 |  |  |    xstring   m_agentCond;   //Agent Node | 
 |  |  | public: | 
 |  |  |    HrJob(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {} | 
 |  |  | public: | 
 |  |  |    static HrJob* CreateInstance(void* implPtr, void* hWnd) | 
 |  |  |    { | 
 |  |  |       HrJob* pWin = new HrJob(implPtr, (HWND)hWnd); | 
 |  |  |       return pWin; | 
 |  |  |    } | 
 |  |  |    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 OnSetFocus(ref TEvent evt, int param) | 
 |  |  |             int OnSetFocus(TEvent* evt, LPARAM param) | 
 |  |  |             { | 
 |  |  |                SetAgent(); | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |             int  OnRetrieve() | 
 |  |  |             { | 
 |  |  |                string query = "[MSSqlHrJob.xq]"; | 
 |  |  |                xml__ x = new xml__; | 
 |  |  |                x.setNativePointer(x.CreateInstance()); | 
 |  |  |                xaserverarg__ arg = new xaserverarg__; | 
 |  |  |                arg.setNativePointer(arg.CreateInstance()); | 
 |  |  |                arg.AddArg("type", m_type); | 
 |  |  |                //if (xaserver__::ExecXQuery(GetServerUrl(),query,arg.GetString(),x)!=1) | 
 |  |  |                if (url::post("OrganizationStruct/list.Job", arg.GetString(), x) != 1) | 
 |  |  |                xstring query = L"[MSSqlHrJob.xq]"; | 
 |  |  |                xml x; | 
 |  |  |                xaserverarg arg; | 
 |  |  |                arg.AddArg(L"type", m_type); | 
 |  |  |                //if (xaserver::ExecXQuery(GetServerUrl(),query,arg.GetString(),x)!=1) | 
 |  |  |                if (xurl::post(L"OrganizationStruct/list.Job", arg.GetString(), x) != 1) | 
 |  |  |                { | 
 |  |  |                   trace(x.GetXmlDoc().text); | 
 |  |  |                   trace(x.text()); | 
 |  |  |                   return -1; | 
 |  |  |                } | 
 |  |  |                else | 
 |  |  |                { | 
 |  |  |                   dw_list.openUrl("组织架构.vface/template/HrJob/list"); | 
 |  |  |                   dw_list.openUrl(L"组织架构.vface/template/HrJob/list"); | 
 |  |  |                   dw_list.Retrieve(x); | 
 |  |  |                   dw_list.Redraw(); | 
 |  |  |                } | 
 |  |  |                return 1; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             int OnTreeSelChanged(ref TNotifyEvent evt, int p) { | 
 |  |  |                ref NMTREEVIEW nmtv = evt.pnmh; | 
 |  |  |                int hItem = nmtv.itemNew.hItem; | 
 |  |  |             int OnTreeSelChanged(TEvent* evt, int p) | 
 |  |  |             { | 
 |  |  |                NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; | 
 |  |  |                //HTREEITEM hItem = nmtv.itemNew.hItem; | 
 |  |  |  | 
 |  |  |                int wid = tv_1.GetId(); | 
 |  |  |                int hItem = treeview__::GetSelectedItem(wid); | 
 |  |  |                int rootItem = treeview__::GetRootItem(wid); | 
 |  |  |                if (hItem <= 0 || hItem == rootItem) | 
 |  |  |                //int wid = tv_1.GetId(); | 
 |  |  |                HTREEITEM hItem = tv_1.GetSelectedItem(); | 
 |  |  |                HTREEITEM rootItem = tv_1.GetRootItem(); | 
 |  |  |                if (!hItem || hItem == rootItem) | 
 |  |  |                { | 
 |  |  |                   m_type = "all"; | 
 |  |  |                   m_type = L"all"; | 
 |  |  |                } | 
 |  |  |                else | 
 |  |  |                { | 
 |  |  |                   msxml::IXMLDOMElement ele = treeview__::GetItemData(wid, hItem); | 
 |  |  |                   m_type = ele.SelectSingleNode("@name").text; | 
 |  |  |                   KXMLDOMElement ele = tv_1.GetItemData(hItem); | 
 |  |  |                   m_type = ele.selectSingleNode(L"@name").text(); | 
 |  |  |                } | 
 |  |  |                OnRetrieve(); | 
 |  |  |                return 1; | 
 |  |  | 
 |  |  |  | 
 |  |  |             int OnCreateTree() | 
 |  |  |             { | 
 |  |  |                int wid = tv_1.GetId(); | 
 |  |  |                xml__ x = new xml__; | 
 |  |  |                x.setNativePointer(xml__::CreateInstance()); | 
 |  |  |                x.Load("<Type code='0.0' name='all' guid='' />"); | 
 |  |  |                msxml::IXMLDOMElement ele = x.GetXmlDoc().SelectSingleNode("Type"); | 
 |  |  |                int hItem = tv_1.InsertChildItemEx(wid, 0, "工种类型", ele, 15, 4); | 
 |  |  |                //int wid = tv_1.GetId(); | 
 |  |  |                xml x; | 
 |  |  | 					 | 
 |  |  |                x.loadXML(L"<Type code='0.0' name='all' guid='' />"); | 
 |  |  |                KXMLDOMElement ele = x.selectSingleNode(L"Type"); | 
 |  |  |                HTREEITEM hItem = tv_1.InsertChildItemEx(0, L"工种类型", ele, 15, 4); | 
 |  |  |  | 
 |  |  |                if (url::post("/sale/data/OrganizationStruct/type.Job", "", x) != 1) | 
 |  |  |                KXMLDOMElement e1 = tv_1.GetItemData(hItem); | 
 |  |  |                string str = e1.xml(); | 
 |  |  |  | 
 |  |  |                if (xurl::post(L"/sale/data/OrganizationStruct/type.Job", L"", x) != 1) | 
 |  |  |                { | 
 |  |  |                   trace(x.GetXml()); | 
 |  |  |                   trace(x.xml()); | 
 |  |  |                   return -1; | 
 |  |  |                } | 
 |  |  |                //trace(x.GetXml()); | 
 |  |  |                var list = x.GetXmlDoc().selectNodes("//Type"); | 
 |  |  |                int i = 0, s = list.length; | 
 |  |  |                msxml::IXMLDOMElement e; | 
 |  |  |                string sname; | 
 |  |  |                auto list = x.selectNodes(L"//Type"); | 
 |  |  |                int i = 0, s = list.length(); | 
 |  |  |                KXMLDOMElement e; | 
 |  |  |                xstring sname; | 
 |  |  |                if (s > 0) | 
 |  |  |                { | 
 |  |  |                   for (i = 0; i < s; i++) | 
 |  |  |                   { | 
 |  |  |                      e = list.item(i); | 
 |  |  |                      sname = e.SelectSingleNode("@name").text; | 
 |  |  |                      int curItem = tv_1.InsertChildItemEx(wid, hItem, sname, e, 15, 4); | 
 |  |  |                      sname = e.selectSingleNode(L"@name").text(); | 
 |  |  |                      HTREEITEM curItem = tv_1.InsertChildItemEx( hItem, sname, e, 15, 4); | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  |                return 1; | 
 |  |  | 
 |  |  |  | 
 |  |  |             int OnSave() | 
 |  |  |             { | 
 |  |  |                xml__ x = new xml__; | 
 |  |  |                x.setNativePointer(x.CreateInstance()); | 
 |  |  |                dw_list.AcceptText(); | 
 |  |  |                dw_list.DwUpdateAllToEx(x.GetXmlDoc()); | 
 |  |  |                xml x; | 
 |  |  |  | 
 |  |  |                string xdata = x.GetXml(); | 
 |  |  |                trace(x.GetXml()); | 
 |  |  |                dw_list.AcceptText(); | 
 |  |  |                dw_list.DwUpdateAllToEx(x); | 
 |  |  |  | 
 |  |  |                xstring xdata = x.xml(); | 
 |  |  |                trace(x.xml()); | 
 |  |  |                //return 1; | 
 |  |  |  | 
 |  |  |                xaserverarg__ arg = new xaserverarg__; | 
 |  |  |                arg.setNativePointer(arg.CreateInstance()); | 
 |  |  |                arg.AddArg("xdata", xdata); | 
 |  |  |                xaserverarg arg; | 
 |  |  |  | 
 |  |  |                string xAction = "[MSSqlHrJobUpdate.xa]"; | 
 |  |  |                //if(xaserver__::ExecXAction(GetServerUrl(),xAction,arg.GetString())!=1) | 
 |  |  |                if (url::post("OrganizationStruct/update.Job", arg.GetString(), x) != 1) | 
 |  |  |                arg.AddArg(L"xdata", xdata); | 
 |  |  |  | 
 |  |  |                xstring xAction = L"[MSSqlHrJobUpdate.xa]"; | 
 |  |  |                //if(xaserver::ExecXAction(GetServerUrl(),xAction,arg.GetString())!=1) | 
 |  |  |                if (xurl::post(L"OrganizationStruct/update.Job", arg.GetString(), x) != 1) | 
 |  |  |                { | 
 |  |  |                   trace(x.GetXmlDoc().documentElement.text); | 
 |  |  |                   alert("保存失败"); | 
 |  |  |                   trace(x.documentElement().text()); | 
 |  |  |                   alert(L"保存失败"); | 
 |  |  |                } | 
 |  |  |                else { | 
 |  |  |                   alert("保存成功"); | 
 |  |  |                   alert(L"保存成功"); | 
 |  |  |                } | 
 |  |  |                return 1; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             int OnAddRow() | 
 |  |  |             { | 
 |  |  |                if (m_type == "all") | 
 |  |  |                if (m_type == L"all") | 
 |  |  |                { | 
 |  |  |                   alert("请先选择工种类型!"); | 
 |  |  |                   alert(L"请先选择工种类型!"); | 
 |  |  |                } | 
 |  |  |                else | 
 |  |  |                { | 
 |  |  |                   int row = dw_list.InsertRow(0); | 
 |  |  |                   trace(row.toString()); | 
 |  |  |                   dw_list.SetItemString(row, "JobType", m_type); | 
 |  |  |                   dw_list.SetItemString(row, "Status", "Y"); | 
 |  |  |                   trace(xstring(row)); | 
 |  |  |                   dw_list.SetItemString(row, L"JobType", m_type); | 
 |  |  |                   dw_list.SetItemString(row, L"Status", L"Y"); | 
 |  |  |                } | 
 |  |  |                return 1; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             int OnInsertRow() | 
 |  |  |             { | 
 |  |  |                if (m_type == "all") | 
 |  |  |                if (m_type == L"all") | 
 |  |  |                { | 
 |  |  |                   alert("请先选择工种类型!"); | 
 |  |  |                   alert(L"请先选择工种类型!"); | 
 |  |  |                } | 
 |  |  |                else | 
 |  |  |                { | 
 |  |  |                   int crow = dw_list.GetRow(); | 
 |  |  |                   int row = dw_list.InsertRow(crow); | 
 |  |  |                   dw_list.SetItemString(row, "JobType", m_type); | 
 |  |  |                   dw_list.SetItemString(row, "Status", "Y"); | 
 |  |  |                   dw_list.SetItemString(row, L"JobType", m_type); | 
 |  |  |                   dw_list.SetItemString(row, L"Status", L"Y"); | 
 |  |  |                } | 
 |  |  |                return 1; | 
 |  |  |             } | 
 |  |  | 
 |  |  |             int OnDeleteRow() | 
 |  |  |             { | 
 |  |  |                int row = dw_list.GetRow(); | 
 |  |  |                msxml::IXMLDOMElement e = dw_list.GetRowElement(row); | 
 |  |  |                string sguid = e.selectSingleNode("@guid").text; | 
 |  |  |                string sName = e.selectSingleNode("JobName").text; | 
 |  |  |                KXMLDOMElement e = dw_list.GetRowElement(row); | 
 |  |  |                xstring sguid = e.selectSingleNode(L"@guid").text(); | 
 |  |  |                xstring sName = e.selectSingleNode(L"JobName").text(); | 
 |  |  |  | 
 |  |  |                xml__ x = new xml__; | 
 |  |  |                x.setNativePointer(x.CreateInstance()); | 
 |  |  |                xaserverarg__ arg = new xaserverarg__; | 
 |  |  |                arg.setNativePointer(arg.CreateInstance()); | 
 |  |  |                arg.AddArg("guid", sguid); | 
 |  |  |                if (url::post("OrganizationStruct/used.Job", arg.GetString(), x) != 1) | 
 |  |  |                xml x; | 
 |  |  |  | 
 |  |  |                xaserverarg arg; | 
 |  |  |  | 
 |  |  |                arg.AddArg(L"guid", sguid); | 
 |  |  |                if (xurl::post(L"OrganizationStruct/used.Job", arg.GetString(), x) != 1) | 
 |  |  |                { | 
 |  |  |                   trace(x.GetXmlDoc().text); | 
 |  |  |                   trace(x.text()); | 
 |  |  |                   return -1; | 
 |  |  |                } | 
 |  |  |                else | 
 |  |  |                { | 
 |  |  |                   msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement; | 
 |  |  |                   string snums = ele.SelectSingleNode("@num").text; | 
 |  |  |                   KXMLDOMElement ele = x.documentElement(); | 
 |  |  |                   xstring snums = ele.selectSingleNode(L"@num").text(); | 
 |  |  |                   int num = snums.toInt(); | 
 |  |  |                   if (num != 0) | 
 |  |  |                   { | 
 |  |  |                      win__::MessageBox(GetHWND(), "工种 " + sName + " 已启用,禁止删除!", "提示", 0); | 
 |  |  |                      MessageBox(GetHWND(), L"工种 " + sName + L" 已启用,禁止删除!", L"提示", 0); | 
 |  |  |                      return -1; | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  | 
 |  |  |  | 
 |  |  |             int OnJobType() | 
 |  |  |             { | 
 |  |  |                xaserverarg__ arg = new xaserverarg__; | 
 |  |  |                arg.setNativePointer(arg.CreateInstance()); | 
 |  |  |                arg.AddArg("id", "工种类型"); | 
 |  |  |                openUrl("公共设置.vface/worknode/quickcode/config", arg); | 
 |  |  |                xaserverarg& arg = *new xaserverarg; | 
 |  |  |  | 
 |  |  |                arg.AddArg(L"id", L"工种类型"); | 
 |  |  |                openUrl(L"公共设置.vface/worknode/quickcode/config", &arg); | 
 |  |  |                return 1; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             //命令发布函数 | 
 |  |  |             int OnCmdDispatch(string comdid) | 
 |  |  |             int OnCmdDispatch(xstring comdid) | 
 |  |  |             { | 
 |  |  |                if (comdid == "Save")  OnSave(); | 
 |  |  |                else if (comdid == "AddRow") OnAddRow(); | 
 |  |  |                else if (comdid == "InsertRow") OnInsertRow(); | 
 |  |  |                else if (comdid == "DeleteRow") OnDeleteRow(); | 
 |  |  |                else if (comdid == "JobType") OnJobType(); | 
 |  |  |                if (comdid == L"Save")  OnSave(); | 
 |  |  |                else if (comdid == L"AddRow") OnAddRow(); | 
 |  |  |                else if (comdid == L"InsertRow") OnInsertRow(); | 
 |  |  |                else if (comdid == L"DeleteRow") OnDeleteRow(); | 
 |  |  |                else if (comdid == L"JobType") OnJobType(); | 
 |  |  |                return 0; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             //命令处理事件 | 
 |  |  |             int OnXCommand(ref TXCommandEvent evt, int param) | 
 |  |  |             int OnXCommand(TEvent* evt, LPARAM param) | 
 |  |  |             { | 
 |  |  |                return OnCmdDispatch(evt.pStrID); | 
 |  |  |                return OnCmdDispatch(evt->xcommand.pStrID); | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             int OnAttachEvent() | 
 |  |  |             { | 
 |  |  |                //绑定工具条点击事件 | 
 |  |  |                AttachEvent("WM_XCOMMAND", OnXCommand); | 
 |  |  |                AttachEvent(L"WM_XCOMMAND", (FEvent)&HrJob::OnXCommand); | 
 |  |  |                //获取焦点事件,用于重置工具条 | 
 |  |  |                AttachEvent("WM_SETFOCUS", OnSetFocus); | 
 |  |  |                AttachEvent(L"WM_SETFOCUS", (FEvent)&HrJob::OnSetFocus); | 
 |  |  |                //获得树的选择事件 | 
 |  |  |                AttachEvent("tv_1", "TVN_SELCHANGED", OnTreeSelChanged); | 
 |  |  |                AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&HrJob::OnTreeSelChanged); | 
 |  |  |                return 1; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             int OnInitial() | 
 |  |  | 
 |  |  |  | 
 |  |  |             int onload() | 
 |  |  |             { | 
 |  |  |                m_type = "all"; | 
 |  |  |                tv_1 = new treeview__; | 
 |  |  |                tv_1.setNativePointer(this.GetControl("tv_1")); | 
 |  |  |                dw_list = new xdwgrid__; | 
 |  |  |                dw_list.setNativePointer(this.GetControl("dw_list")); | 
 |  |  |                dw_list.openUrl("组织架构.vface/template/HrJob/list"); | 
 |  |  |                m_type = L"all"; | 
 |  |  |                tv_1 = GetControl(L"tv_1"); | 
 |  |  |                dw_list = new xdwgrid; | 
 |  |  |                dw_list.setNativePointer(GetControl(L"dw_list")); | 
 |  |  |                dw_list.openUrl(L"组织架构.vface/template/HrJob/list"); | 
 |  |  |  | 
 |  |  |                OnInitial(); | 
 |  |  |                OnCreateTree(); | 
 |  |  |                int wid = tv_1.GetId(); | 
 |  |  |                int hItem = treeview__::GetRootItem(wid); | 
 |  |  |                tv_1.ExpandItem(wid, hItem); | 
 |  |  |                //int wid = tv_1.GetId(); | 
 |  |  |                HTREEITEM hItem = tv_1.GetRootItem(); | 
 |  |  |                tv_1.ExpandItem(hItem); | 
 |  |  |                OnRetrieve(); | 
 |  |  |  | 
 |  |  |                return 1; | 
 |  |  |             } | 
 |  |  |          ] | 
 |  |  |  | 
 |  |  |       ] | 
 |  |  | ] | 
 |  |  | }; |