|  |  | 
 |  |  | use "win.vl" | 
 |  |  | use "treeview.vm" | 
 |  |  | 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 "dev:code[SysUser.vx]" | 
 |  |  | use "frame.vl" | 
 |  |  | use "file.vl" | 
 |  |  | unit vbusiness.xpage | 
 |  |  | [ | 
 |  |  |    UserImport is extend frame; | 
 |  |  |    about UserImport | 
 |  |  |    [ | 
 |  |  |       field: | 
 |  |  |       [ | 
 |  |  |          SysUser lw_obj; | 
 |  |  |          xdwgrid__   dw_list; | 
 |  |  |          treeview__      tv_org; | 
 |  |  |          xnode__   m_agentNode;   //Agent Condition | 
 |  |  |          string   m_agentCond;   //Agent Node | 
 |  |  |          string   m_sTxt; | 
 |  |  |          string      is_orgid;			 | 
 |  |  |       ] | 
 |  |  | 		 | 
 |  |  |       method: | 
 |  |  |       [ | 
 |  |  |          int SetAgent() | 
 |  |  | #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" | 
 |  |  |  | 
 |  |  | #include "SysUser.hpp" | 
 |  |  |  | 
 |  |  | using xml = KXMLDOMDocument; | 
 |  |  | class __declspec(dllexport) UserImport : public xframe | 
 |  |  | { | 
 |  |  | public: | 
 |  |  |  | 
 |  |  |  | 
 |  |  |    SysUser* lw_obj; | 
 |  |  |    xdwgrid   dw_list; | 
 |  |  |    xtreeview   tv_org; | 
 |  |  |    xnode   m_agentNode;   //Agent Condition | 
 |  |  |    xstring   m_agentCond;   //Agent Node | 
 |  |  |    xstring   m_sTxt; | 
 |  |  |    xstring      is_orgid; | 
 |  |  | public: | 
 |  |  |    UserImport(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd), lw_obj(nullptr) {} | 
 |  |  | public: | 
 |  |  |    static UserImport* CreateInstance(void* implPtr, void* hWnd) | 
 |  |  |    { | 
 |  |  |       UserImport* pWin = new UserImport(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) | 
 |  |  |          { | 
 |  |  |             string xfNodeAgentArea  = "agentarea"; | 
 |  |  |             xnode__ anode = new xnode__; | 
 |  |  |             anode.setNativePointer(GetAgentNode(xfNodeAgentArea)); | 
 |  |  |             var xframeElement =  GetElement(); | 
 |  |  |             var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*"); | 
 |  |  |             if(agent) | 
 |  |  |             xstring s = agent.xml(); | 
 |  |  |             m_agentNode = SetAgentNode(anode, s); | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    //焦点激活处理函数 | 
 |  |  |    int OnSetFocus(TEvent* evt, LPARAM param) | 
 |  |  |    { | 
 |  |  |       SetAgent(); | 
 |  |  |       //重置工具条 | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int  OnRetrieve(xstring ls_orgid) | 
 |  |  |    { | 
 |  |  |  | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  |       xaserverarg arg; | 
 |  |  |  | 
 |  |  |       arg.AddArg(L"OrgID", ls_orgid); | 
 |  |  |       //trace(ls_orgid); | 
 |  |  |       //if (xaserver::ExecXQuery(GetServerUrl(),L"[MSSqlHrEmployee.xq]",arg.GetString(),x) == 1) | 
 |  |  |       if (xurl::get(L"SysUser.config/UserSelect.xq", arg.GetString(), x) == 1) | 
 |  |  |       { | 
 |  |  |          dw_list.Retrieve(x); | 
 |  |  |          dw_list.Redraw(); | 
 |  |  |       } | 
 |  |  |       //trace(x.xml()); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnOK() | 
 |  |  |    { | 
 |  |  |       if (GetWinParam()) | 
 |  |  |       { | 
 |  |  |          lw_obj = (SysUser*)GetWinParam(); | 
 |  |  |       } | 
 |  |  |       else | 
 |  |  |          return 0; | 
 |  |  |  | 
 |  |  |       int row = dw_list.GetNextSelectRow(1); | 
 |  |  |       //trace(row); | 
 |  |  |       if (row < 1) | 
 |  |  |       { | 
 |  |  |          alert(L"请选择人员!"); | 
 |  |  |          return 1; | 
 |  |  |       } | 
 |  |  |  | 
 |  |  |       xstring sPositionID, sPositionName; | 
 |  |  |       xstring sOrgID, sOrgName; | 
 |  |  |       xstring sJobID, sJobName; | 
 |  |  |       //int wid = lw_obj.tv_usergroup.GetId(); | 
 |  |  |       HTREEITEM hitem = tv_org.GetSelectedItem(); | 
 |  |  |       //KXMLDOMElement ele = tv_org.GetItemData(hitem); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |       while (row > 0) | 
 |  |  |       { | 
 |  |  |          //trace(row); | 
 |  |  |          KXMLDOMElement e = dw_list.GetRowElement(row); | 
 |  |  |          trace(e.xml()); | 
 |  |  |          xstring sEmployeeNo = e.selectSingleNode(L"EmployeeNo").text() + (xstring)L""; | 
 |  |  |          xstring sOldEmpNo = e.selectSingleNode(L"OldEmpNo").text() + (xstring)L""; | 
 |  |  |          xstring sPersonID = e.selectSingleNode(L"PersonID").text() + (xstring)L""; | 
 |  |  |          xstring sPersonName = e.selectSingleNode(L"Name").text() + (xstring)L""; | 
 |  |  |          xstring sPassWord = xutil::MD5(sOldEmpNo); | 
 |  |  |  | 
 |  |  |          /* | 
 |  |  |          xml xx; | 
 |  |  |          x | 
 |  |  |          xaserverarg arg; | 
 |  |  |          arg.setNativePointer(arg.CreateInstance()); | 
 |  |  |          arg.AddArg(L"userno",sOldEmpNo); | 
 |  |  |          arg.AddArg(L"password",sPassWord); | 
 |  |  |          if(xurl::get(L"/sale/data/SysUser/GetOldPassWord",arg.GetString(),xx)==1) | 
 |  |  |          { | 
 |  |  |             if(xx.xml()!=L"") | 
 |  |  |             { | 
 |  |  |                string s = agent.xml; | 
 |  |  |                SetAgentNodeContent (anode,s); | 
 |  |  |                KXMLDOMElement ex = xx.documentElement(); | 
 |  |  |                sPassWord = L""+ex.text(); | 
 |  |  |             } | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |          }*/ | 
 |  |  |  | 
 |  |  |          //焦点激活处理函数 | 
 |  |  |          int OnSetFocus(ref TEvent evt,int param) | 
 |  |  |          int nRow = lw_obj->dw_user.InsertRow(0); | 
 |  |  |          lw_obj->dw_user.SetItemString(nRow, L"EmployeeNo", sEmployeeNo); | 
 |  |  |          lw_obj->dw_user.SetItemString(nRow, L"UserName", sOldEmpNo); | 
 |  |  |          lw_obj->dw_user.SetItemString(nRow, L"PassWord", sPassWord); | 
 |  |  |          lw_obj->dw_user.SetItemString(nRow, L"PersonID", sPersonID); | 
 |  |  |          lw_obj->dw_user.SetItemDisplayString(nRow, L"PersonID", sPersonName); | 
 |  |  |          lw_obj->dw_user.SetItemString(nRow, L"Status", L"Y"); | 
 |  |  |          lw_obj->dw_user.SetItemDisplayString(nRow, L"Status", L"有效"); | 
 |  |  |          lw_obj->dw_user.SetItemString(nRow, L"OldEmpNo", sOldEmpNo); | 
 |  |  |          /* | 
 |  |  |             lw_obj.dw_user.SetItemString(nRow,L"PositionID",sPositionID); | 
 |  |  |             lw_obj.dw_user.SetItemDisplayString(nRow,L"PositionID",sPositionName); | 
 |  |  |             lw_obj.dw_user.SetItemString(nRow,L"OrgID",sOrgID); | 
 |  |  |             lw_obj.dw_user.SetItemDisplayString(nRow,L"OrgID",sOrgName); | 
 |  |  |             lw_obj.dw_user.SetItemString(nRow,L"JobID",sJobID); | 
 |  |  |             lw_obj.dw_user.SetItemDisplayString(nRow,L"JobID",sJobName); | 
 |  |  |  | 
 |  |  |             lw_obj.dw_user.SetItemString(nRow,L"Status",L"Y"); | 
 |  |  |             lw_obj.dw_user.SetItemDisplayString(nRow,L"Status",L"有效"); | 
 |  |  |             xstring sdate = TApp::GetCurDate()+L""; | 
 |  |  |             lw_obj.dw_user.SetItemString(nRow,L"StartDate",sdate+L""); | 
 |  |  |             lw_obj.dw_user.SetItemString(nRow,L"EndDate",L"2050-12-31");*/ | 
 |  |  |  | 
 |  |  |          row = dw_list.GetNextSelectRow(row + 1); | 
 |  |  |          //trace(row); | 
 |  |  |       } | 
 |  |  |       CloseWindow(); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    int OnSubTree(xstring id, HTREEITEM parentitem) | 
 |  |  |    { | 
 |  |  |       //int wid = tv_org.GetId(); | 
 |  |  |       if (tv_org.GetChildItem( parentitem)) return 1; | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  |       xaserverarg arg; | 
 |  |  |  | 
 |  |  |       arg.AddArg(L"sguid", id); | 
 |  |  |       if (xurl::post(L"/sale/data/OrganizationStruct/tree.child.OrgChart", arg.GetString(), x) != 1) | 
 |  |  |       { | 
 |  |  |          trace(x.xml()); | 
 |  |  |          return -1; | 
 |  |  |       } | 
 |  |  |       //trace(x.xml()); | 
 |  |  |       auto list = x.selectNodes(L"//item"); | 
 |  |  |       int i = 0, s = list.length(); | 
 |  |  |       KXMLDOMElement xitem; | 
 |  |  |       xstring sName; | 
 |  |  |       xstring sguid; | 
 |  |  |       xstring stype; | 
 |  |  |       if (s > 0) | 
 |  |  |       { | 
 |  |  |          for (i = 0; i < s; i++) | 
 |  |  |          { | 
 |  |  |             SetAgent(); | 
 |  |  |             //重置工具条 | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |  | 
 |  |  |          int  OnRetrieve(string ls_orgid) | 
 |  |  |          { | 
 |  |  |  | 
 |  |  |             xml__ x=new xml__; | 
 |  |  |             x.setNativePointer(x.CreateInstance()); | 
 |  |  |             xaserverarg__ arg = new xaserverarg__; | 
 |  |  |             arg.setNativePointer(arg.CreateInstance()); | 
 |  |  |             arg.AddArg("OrgID",ls_orgid); | 
 |  |  |             //trace(ls_orgid); | 
 |  |  |             //if (xaserver__::ExecXQuery(GetServerUrl(),"[MSSqlHrEmployee.xq]",arg.GetString(),x) == 1) | 
 |  |  |             if (url::get("SysUser.config/UserSelect.xq",arg.GetString(),x) == 1) | 
 |  |  |             xitem = list.item(i); | 
 |  |  |             sName = xitem.selectSingleNode(L"name").text(); | 
 |  |  |             sguid = xitem.selectSingleNode(L"id").text(); | 
 |  |  |             stype = xitem.selectSingleNode(L"typ").text(); | 
 |  |  |             //int curItem = tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4); | 
 |  |  |             HTREEITEM curItem = 0; | 
 |  |  |             if (stype == L"Org") | 
 |  |  |             { | 
 |  |  |                dw_list.Retrieve(x); | 
 |  |  |                dw_list.Redraw(); | 
 |  |  |             } | 
 |  |  |             //trace(x.GetXml()); | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          int OnOK() | 
 |  |  |          { | 
 |  |  |             if (GetParam()) | 
 |  |  |             { | 
 |  |  |                lw_obj = new SysUser; | 
 |  |  |                lw_obj.setNativePointer(GetParam()); | 
 |  |  |                lw_obj = GetParam(); | 
 |  |  |                curItem = tv_org.InsertChildItemEx( parentitem, sName, xitem, 15, 4); | 
 |  |  |                tv_org.SetItemChild1(curItem, 1); | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  |                return 0; | 
 |  |  |             { | 
 |  |  |                curItem = tv_org.InsertChildItemEx(parentitem, sName, xitem, 21, 21); | 
 |  |  |             } | 
 |  |  |             //OnSubTree(sguid,curItem); | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |             int row = dw_list.GetNextSelectRow(1); | 
 |  |  |             trace(row); | 
 |  |  |             if (row<1) | 
 |  |  |             { | 
 |  |  |                alert("请选择人员!"); | 
 |  |  |                return 1; | 
 |  |  |             }	 | 
 |  |  | 				 | 
 |  |  |             string sPositionID,sPositionName; | 
 |  |  |             string sOrgID,sOrgName; | 
 |  |  |             string sJobID,sJobName; | 
 |  |  |             int wid = lw_obj.tv_usergroup.GetId(); | 
 |  |  |             int hitem=treeview__::GetSelectedItem(wid); | 
 |  |  |             msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem); | 
 |  |  |    int OnCreateTree(xstring id, HTREEITEM parentitem) | 
 |  |  |    { | 
 |  |  |       //while (tv_1.GetRootItem()>0) | 
 |  |  |       //   tv_1.DeleteItem(tv_1.GetRootItem());				 | 
 |  |  |       //int wid = tv_org.GetId(); | 
 |  |  |       xml x; | 
 |  |  |  | 
 |  |  | 				 | 
 |  |  |             while (row>0) | 
 |  |  |             {	 | 
 |  |  |                trace(row); | 
 |  |  |                msxml::IXMLDOMElement e = dw_list.GetRowElement(row); | 
 |  |  |                trace(e.xml);				 | 
 |  |  |                string sEmployeeNo = e.selectSingleNode("EmployeeNo").text+""; | 
 |  |  |                string sOldEmpNo = e.selectSingleNode("OldEmpNo").text+"";				 | 
 |  |  |                string sPersonID = e.selectSingleNode("PersonID").text+""; | 
 |  |  |                string sPersonName = e.selectSingleNode("Name").text+""; | 
 |  |  |                string sPassWord = xutil__::MD5(sOldEmpNo); | 
 |  |  | 				 | 
 |  |  |                /* | 
 |  |  |                xml__ xx = new xml__; | 
 |  |  |                xx.setNativePointer(xml__ ::CreateInstance()); | 
 |  |  |                xaserverarg__ arg=new xaserverarg__; | 
 |  |  |                arg.setNativePointer(arg.CreateInstance());	 | 
 |  |  |                arg.AddArg("userno",sOldEmpNo); | 
 |  |  |                arg.AddArg("password",sPassWord); | 
 |  |  |                if(url::get("/sale/data/SysUser/GetOldPassWord",arg.GetString(),xx)==1) | 
 |  |  |                { | 
 |  |  |                   if(xx.GetXml()!="") | 
 |  |  |                   { | 
 |  |  |                      msxml::IXMLDOMElement ex = xx.GetXmlDoc().documentElement; | 
 |  |  |                      sPassWord = ""+ex.text; | 
 |  |  |                   } | 
 |  |  |                }*/ | 
 |  |  |       x.loadXML(L"<item><id>" + id + L"</id><no/><name>组织结构</name><typ>Org</typ></item>"); | 
 |  |  |       //KXMLDOMDocument root = x; | 
 |  |  |       //KXMLDOMElement RDoc = x.documentElement(); | 
 |  |  |       //KXMLDOMElement ele = RDoc.SelectSingleNode(L"//Org"); | 
 |  |  |       KXMLDOMElement ele = x.selectSingleNode(L"//item"); | 
 |  |  |       HTREEITEM hItem = tv_org.InsertChildItemEx( (HTREEITEM)0, L"组织结构", ele, 15, 4); | 
 |  |  |       tv_org.SetItemChild1(hItem, 1); | 
 |  |  |       return 1; | 
 |  |  |  | 
 |  |  |                int nRow = lw_obj.dw_user.InsertRow(0); | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"EmployeeNo",sEmployeeNo); | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"UserName",sOldEmpNo); | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"PassWord",sPassWord);						 | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"PersonID",sPersonID); | 
 |  |  |                lw_obj.dw_user.SetItemDisplayString(nRow,"PersonID",sPersonName); | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"Status","Y"); | 
 |  |  |                lw_obj.dw_user.SetItemDisplayString(nRow,"Status","有效"); | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"OldEmpNo",sOldEmpNo);						 | 
 |  |  |             /* | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"PositionID",sPositionID); | 
 |  |  |                lw_obj.dw_user.SetItemDisplayString(nRow,"PositionID",sPositionName); | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"OrgID",sOrgID); | 
 |  |  |                lw_obj.dw_user.SetItemDisplayString(nRow,"OrgID",sOrgName); | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"JobID",sJobID); | 
 |  |  |                lw_obj.dw_user.SetItemDisplayString(nRow,"JobID",sJobName); | 
 |  |  | 				 | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"Status","Y"); | 
 |  |  |                lw_obj.dw_user.SetItemDisplayString(nRow,"Status","有效"); | 
 |  |  |                string sdate = TApp::GetCurDate()+""; | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"StartDate",sdate+""); | 
 |  |  |                lw_obj.dw_user.SetItemString(nRow,"EndDate","2050-12-31");*/ | 
 |  |  | 				 | 
 |  |  |                row = dw_list.GetNextSelectRow(row + 1); | 
 |  |  |                trace(row); | 
 |  |  |             } | 
 |  |  |             CloseWindow(); | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |          int OnSubTree(string id,int parentitem) | 
 |  |  |       /*xaserverarg arg; | 
 |  |  |       arg.setNativePointer(arg.CreateInstance()); | 
 |  |  |       arg.AddArg(L"sguid",id); | 
 |  |  |       if(xurl::post(L"/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1) | 
 |  |  |       { | 
 |  |  |          trace(x.xml()); | 
 |  |  |          return -1; | 
 |  |  |       } | 
 |  |  |       //trace(x.xml()); | 
 |  |  |       var list=x.selectNodes(L"//item"); | 
 |  |  |       int i=0,s=list.length; | 
 |  |  |       KXMLDOMElement xitem; | 
 |  |  |       xstring sName; | 
 |  |  |       xstring sguid; | 
 |  |  |       if (s >0) | 
 |  |  |       { | 
 |  |  |          for (i=0;i<s;i++) | 
 |  |  |          { | 
 |  |  |             int wid = tv_org.GetId(); | 
 |  |  |             if (treeview__::GetChildItem(wid,parentitem) >0) return 1; | 
 |  |  |             xml__ x = new xml__; | 
 |  |  |             x.setNativePointer(xml__ ::CreateInstance()); | 
 |  |  |             xaserverarg__ arg=new xaserverarg__; | 
 |  |  |             arg.setNativePointer(arg.CreateInstance());	 | 
 |  |  |             arg.AddArg("sguid",id); | 
 |  |  |             if(url::post("/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1) | 
 |  |  |             { | 
 |  |  |                trace(x.GetXml()); | 
 |  |  |                return -1;	 | 
 |  |  |             } | 
 |  |  |             //trace(x.GetXml()); | 
 |  |  |             var list=x.GetXmlDoc().selectNodes("//item"); | 
 |  |  |             int i=0,s=list.length; | 
 |  |  |             msxml::IXMLDOMElement xitem; | 
 |  |  |             string sName;  | 
 |  |  |             string sguid;  | 
 |  |  |             string stype;  | 
 |  |  |             if (s >0) | 
 |  |  |             { | 
 |  |  |                for (i=0;i<s;i++) | 
 |  |  |                { | 
 |  |  |                   xitem= list.item(i); | 
 |  |  |                   sName = xitem.SelectSingleNode("name").text; | 
 |  |  |                   sguid = xitem.SelectSingleNode("id").text; | 
 |  |  |                   stype = xitem.SelectSingleNode("typ").text; | 
 |  |  |                   //int curItem = tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4); | 
 |  |  |                   int curItem=0; | 
 |  |  |                   if (stype =="Org") | 
 |  |  |                   { | 
 |  |  |                      curItem=tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4); | 
 |  |  |                      tv_org.SetItemChild1(wid,curItem,1); | 
 |  |  |                   } | 
 |  |  |                   else | 
 |  |  |                      { | 
 |  |  |                      curItem=tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,21,21); | 
 |  |  |                   } | 
 |  |  |                   //OnSubTree(sguid,curItem); | 
 |  |  |                } | 
 |  |  |             } | 
 |  |  |             return 1; | 
 |  |  |             xitem= list.item(i); | 
 |  |  |             sName = xitem.SelectSingleNode(L"@name").text(); | 
 |  |  |             sguid = xitem.SelectSingleNode(L"@id").text(); | 
 |  |  |             int curItem = tv_org.InsertChildItemEx(wid,hItem,sName,xitem,15,4); | 
 |  |  |             tv_org.SetItemChild1(wid,curItem,1); | 
 |  |  |             //OnSubTree(sguid,curItem); | 
 |  |  |          } | 
 |  |  | 				 | 
 |  |  |          int OnCreateTree(string id,int parentitem) | 
 |  |  |          { | 
 |  |  |             //while (tv_1.GetRootItem()>0) | 
 |  |  |             //   tv_1.DeleteItem(tv_1.GetRootItem());				 | 
 |  |  |             int wid = tv_org.GetId(); | 
 |  |  |             xml__ x = new xml__; | 
 |  |  |             x.setNativePointer(xml__ ::CreateInstance()); | 
 |  |  |             x.LoadXml("<item><id>"+id+"</id><no/><name>凤凰集团</name><typ>Org</typ></item>"); | 
 |  |  |             //msxml::IXMLDOMDocument root = x.GetXmlDoc(); | 
 |  |  |             //msxml::IXMLDOMElement RDoc = x.GetXmlDoc().documentElement; | 
 |  |  |             //msxml::IXMLDOMElement ele = RDoc.SelectSingleNode("//Org"); | 
 |  |  |             msxml::IXMLDOMElement ele = x.GetXmlDoc().SelectSingleNode("//item"); | 
 |  |  |             int hItem = treeview__::InsertChildItemEx(wid,0,"凤凰集团",ele,15,4); | 
 |  |  |             treeview__::SetItemChild1(wid,hItem,1); | 
 |  |  |             return 1; | 
 |  |  | 				 | 
 |  |  |             /*xaserverarg__ arg=new xaserverarg__; | 
 |  |  |             arg.setNativePointer(arg.CreateInstance());	 | 
 |  |  |             arg.AddArg("sguid",id); | 
 |  |  |             if(url::post("/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1) | 
 |  |  |             { | 
 |  |  |                trace(x.GetXml()); | 
 |  |  |                return -1;	 | 
 |  |  |             } | 
 |  |  |             //trace(x.GetXml()); | 
 |  |  |             var list=x.GetXmlDoc().selectNodes("//item"); | 
 |  |  |             int i=0,s=list.length; | 
 |  |  |             msxml::IXMLDOMElement xitem; | 
 |  |  |             string sName;  | 
 |  |  |             string sguid; | 
 |  |  |             if (s >0) | 
 |  |  |             { | 
 |  |  |                for (i=0;i<s;i++) | 
 |  |  |                { | 
 |  |  |                   xitem= list.item(i); | 
 |  |  |                   sName = xitem.SelectSingleNode("@name").text; | 
 |  |  |                   sguid = xitem.SelectSingleNode("@id").text; | 
 |  |  |                   int curItem = tv_org.InsertChildItemEx(wid,hItem,sName,xitem,15,4); | 
 |  |  |                   tv_org.SetItemChild1(wid,curItem,1); | 
 |  |  |                   //OnSubTree(sguid,curItem); | 
 |  |  |                } | 
 |  |  |             } | 
 |  |  |             return 1;*/ | 
 |  |  |          } | 
 |  |  | 				 | 
 |  |  |          int OnTreeExpanding(ref TNotifyEvent evt,int p)	 | 
 |  |  |          { | 
 |  |  |             ref NMTREEVIEW nmtv = evt.pnmh; | 
 |  |  |             int sitem = nmtv.itemNew.hItem; | 
 |  |  | 					 | 
 |  |  |             int hCursor = xutil__::SetCursorWait(); | 
 |  |  |             //string id = treeview__::GetItemData(tv_org.GetId(), sitem); | 
 |  |  |             msxml::IXMLDOMElement ele = treeview__::GetItemData(tv_org.GetId(),sitem); | 
 |  |  |             string id = ele.SelectSingleNode("id").text; | 
 |  |  |             OnSubTree(id, sitem); | 
 |  |  |             xutil__::RestoreCursor(hCursor); | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          int OnTreeSelChanged(ref TXCommandEvent evt,int p) | 
 |  |  |          { | 
 |  |  |             int wid = tv_org.GetId(); | 
 |  |  |             int hitem=treeview__::GetSelectedItem(wid); | 
 |  |  |             msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem); | 
 |  |  |             if (ele) | 
 |  |  |             { | 
 |  |  |                string ls_orgid = ele.SelectSingleNode("id").text; | 
 |  |  |                is_orgid = ls_orgid; | 
 |  |  |                OnRetrieve(ls_orgid); | 
 |  |  |             } | 
 |  |  |             return 1; | 
 |  |  |          }			 | 
 |  |  |          //命令发布函数 | 
 |  |  |          int OnCmdDispatch(string comdid) | 
 |  |  |          { | 
 |  |  |             if (comdid=="cb_import") | 
 |  |  |                OnOK(); | 
 |  |  |             else if (comdid=="cb_close") | 
 |  |  |                CloseWindow(); | 
 |  |  |             return 0; | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          //命令处理事件 | 
 |  |  |          int OnXCommand(ref TXCommandEvent evt,int p) | 
 |  |  |          { | 
 |  |  |             return OnCmdDispatch(evt.pStrID); | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          int OnAttachEvent() | 
 |  |  |          { | 
 |  |  |             //绑定工具条点击事件 | 
 |  |  |             AttachEvent("WM_XCOMMAND",OnXCommand); | 
 |  |  |             //获取焦点事件,用于重置工具条 | 
 |  |  |             AttachEvent("WM_SETFOCUS",OnSetFocus); | 
 |  |  |             //获得树的选择事件 | 
 |  |  |             AttachEvent("tv_org", "TVN_SELCHANGED",OnTreeSelChanged); | 
 |  |  |             AttachEvent("tv_org", "TVN_ITEMEXPANDING",OnTreeExpanding);				 | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          int OnInitial() | 
 |  |  |          { | 
 |  |  |             SetAgent(); | 
 |  |  |             OnAttachEvent();		 | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  | 			 | 
 |  |  |          int onload() | 
 |  |  |          {			 | 
 |  |  |             tv_org = new treeview__ ; | 
 |  |  |             tv_org.setNativePointer(this.GetControl("tv_org")); | 
 |  |  |             dw_list =  new xdwgrid__; | 
 |  |  |             dw_list.setNativePointer(this.GetControl("dw_list"));						 | 
 |  |  |             dw_list.openUrl("系统用户.vface/template/SysUser/EmpSelect");		 | 
 |  |  |             dw_list.SetSelectionMode(3); //3 | 
 |  |  |             dw_list.SetReadOnly(true); | 
 |  |  |       } | 
 |  |  |       return 1;*/ | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |             OnInitial(); | 
 |  |  |             OnCreateTree("00000000-0000-0000-0000-000000000000", 0); | 
 |  |  |             int wid = tv_org.GetId(); | 
 |  |  |             int root = treeview__::GetRootItem(wid);		 | 
 |  |  |             treeview__::ExpandItem(wid,root);				 | 
 |  |  |             OnRetrieve("00000000-0000-0000-0000-000000000000"); | 
 |  |  |             return 1; | 
 |  |  |          } | 
 |  |  |       ] | 
 |  |  |    int OnTreeExpanding(TEvent* evt, LPARAM p) | 
 |  |  |    { | 
 |  |  |        | 
 |  |  |    ] | 
 |  |  | ] | 
 |  |  |       NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh; | 
 |  |  |       HTREEITEM sitem = nmtv.itemNew.hItem; | 
 |  |  |  | 
 |  |  |       HCURSOR hCursor = xutil::SetCursorWait(); | 
 |  |  |       //xstring id = tv_org.GetItemData(tv_org.GetId(), sitem); | 
 |  |  |       KXMLDOMElement ele = tv_org.GetItemData(sitem); | 
 |  |  |       xstring id = ele.selectSingleNode(L"id").text(); | 
 |  |  |       OnSubTree(id, sitem); | 
 |  |  |       xutil::RestoreCursor(hCursor); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnTreeSelChanged(TEvent* evt, LPARAM p) | 
 |  |  |    { | 
 |  |  |       //int wid = tv_org.GetId(); | 
 |  |  |       HTREEITEM hitem = tv_org.GetSelectedItem(); | 
 |  |  |       KXMLDOMElement ele = tv_org.GetItemData(hitem); | 
 |  |  |       if (ele) | 
 |  |  |       { | 
 |  |  |          xstring ls_orgid = ele.selectSingleNode(L"id").text(); | 
 |  |  |          is_orgid = ls_orgid; | 
 |  |  |          OnRetrieve(ls_orgid); | 
 |  |  |       } | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |    //命令发布函数 | 
 |  |  |    int OnCmdDispatch(xstring comdid) | 
 |  |  |    { | 
 |  |  |       if (comdid == L"cb_import") | 
 |  |  |       { | 
 |  |  |          OnOK(); | 
 |  |  |          return 1; | 
 |  |  |       } | 
 |  |  |       else if (comdid == L"cb_close") | 
 |  |  |       { | 
 |  |  |          CloseWindow(); | 
 |  |  |          return 1; | 
 |  |  |       } | 
 |  |  |       return 0; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    //命令处理事件 | 
 |  |  |    int OnXCommand(TEvent* evt, LPARAM param) | 
 |  |  |    { | 
 |  |  |       return OnCmdDispatch(evt->xcommand.pStrID); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnAttachEvent() | 
 |  |  |    { | 
 |  |  |       //绑定工具条点击事件 | 
 |  |  |       AttachEvent(L"WM_XCOMMAND", (FEvent)&UserImport::OnXCommand); | 
 |  |  |       //获取焦点事件,用于重置工具条 | 
 |  |  |       AttachEvent(L"WM_SETFOCUS", (FEvent)&UserImport::OnSetFocus); | 
 |  |  |       //获得树的选择事件 | 
 |  |  |       AttachEvent(L"tv_org", L"TVN_SELCHANGED", (FEvent)&UserImport::OnTreeSelChanged); | 
 |  |  |       AttachEvent(L"tv_org", L"TVN_ITEMEXPANDING", (FEvent)&UserImport::OnTreeExpanding); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int OnInitial() | 
 |  |  |    { | 
 |  |  |       SetAgent(); | 
 |  |  |       OnAttachEvent();  | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int onload() | 
 |  |  |    { | 
 |  |  |       tv_org = GetControl(L"tv_org"); | 
 |  |  |       dw_list = new xdwgrid; | 
 |  |  |       dw_list.setNativePointer(GetControl(L"dw_list")); | 
 |  |  |       dw_list.openUrl(L"系统用户.vface/template/SysUser/EmpSelect"); | 
 |  |  |       dw_list.SetSelectionMode(3); //3 | 
 |  |  |       dw_list.SetReadOnly(true); | 
 |  |  |  | 
 |  |  |       OnInitial(); | 
 |  |  |       OnCreateTree(L"00000000-0000-0000-0000-000000000000", 0); | 
 |  |  |       //int wid = tv_org.GetId(); | 
 |  |  |       HTREEITEM root = tv_org.GetRootItem(); | 
 |  |  |       tv_org.ExpandItem(root); | 
 |  |  |       OnRetrieve(L"00000000-0000-0000-0000-000000000000"); | 
 |  |  |       return 1; | 
 |  |  |    } | 
 |  |  | }; |