偶这个前端设计师有生以来写过的最复杂的程序业务逻辑(菜鸟贴)。

简介:

05年底写的,八年工作以来第一次以.net程序员而不是设计师的身份应聘到一公司,在试用期间写过的一个不同单位OA系统间的部门、人员建立及数据同步交换流程,包括界面的处理。

反正对我来说,已经很复杂了……当时可谓是绞尽脑汁,倾力而为,精尽人亡(哈哈,见笑了,个人能力有限。)。写完之后因为开始主导Web标准的部署重回到设计师的路上就再也没碰过程序了,不知道以后还会不会写,说不定就成个人在编程上的绝唱了,所以一直保留着的,呵呵。

namespace  Winstar.Build.HR.Module
{
    
using  System;
    
using  System.Data;
    
using  System.Data.SqlClient;
    
using  System.Drawing;
    
using  System.Xml;
    
using  System.Web;
    
using  System.Web.UI.WebControls;
    
using  System.Web.UI.HtmlControls;

    
using  Microsoft.Web.UI.WebControls;
    
using  Winstar.Build.HR.BusinessFacade;
    
using  Winstar.Build.HR.Controls;
    
using  Winstar.Build.HR.Common;
    
using  Winstar.Build.HR.DataAccess;
    
using  Winstar.Build.HR.WebUI.Control;
    
using  Winstar.IACenterAD.WebService.Agent;

    
///   <summary>
    
///         HR_InitializeOrganization 的摘要说明。
    
///   </summary>
     public   class  HR_InitializeOrganization :Winstar.Framework.WebUI.PortalModuleControl
    {
        
protected  Microsoft.Web.UI.WebControls.TreeView TreeViewHR;
        
protected  System.Web.UI.WebControls.TextBox OrganizationName;
        
protected  System.Web.UI.WebControls.TextBox OrganizationOaid;
        
protected  System.Web.UI.WebControls.Label OrganizationID;
        
protected  System.Web.UI.WebControls.Label lblDelTip;
        
protected  System.Web.UI.WebControls.Label lblError;
        
protected  System.Web.UI.WebControls.DropDownList DDLOrganizationType;
        
protected  System.Web.UI.HtmlControls.HtmlGenericControl ToolBar;
        
protected  System.Web.UI.HtmlControls.HtmlAnchor Organization_Synchronize;
        
protected  System.Web.UI.HtmlControls.HtmlAnchor Organization_Add;
        
protected  System.Web.UI.HtmlControls.HtmlAnchor Organization_Save;
        
protected  System.Web.UI.HtmlControls.HtmlAnchor Organization_Del;
        
protected  System.Web.UI.HtmlControls.HtmlAnchor Organization_Back;
        
protected  System.Web.UI.HtmlControls.HtmlAnchor upBtnGroup;
        
protected  System.Web.UI.HtmlControls.HtmlAnchor downBtnGroup;
        
public  System.Web.UI.HtmlControls.HtmlGenericControl OrganizationDataArea;
        
protected  System.Web.UI.HtmlControls.HtmlGenericControl DelResultArea;
        
protected  System.Web.UI.HtmlControls.HtmlGenericControl SynchronizeTipArea;

        
public  DataTable ReportDT;
        
        CollectionTable ct 
=   new  CollectionTable();
        
public   string  id, type, stradd, strSynchronize, strSyn, strMorS, strDel, strStyle;
        
public   int  personcount, departmentcount;
        
public   string []  strcondition;
        
string  selectedtype;
        
public   string  organizationid, organizationname, organizationoaid, organizationtype;
        

        
public   void  Page_Load( object  sender, System.EventArgs e)
        {
            
this .Page.SmartNavigation  =   true ;
            TreeViewHR.AutoPostBack 
=   true ;

            
string  strTreeName  =   " _ctl1_TreeViewHR " ;
            
string  strRef  =  Page.GetPostBackEventReference(TreeViewHR);
            
string  strScript  =   " <script language=\ " JavaScript\ " > \n "   +   " <!-- \n "   +   "  function initTree() { \n "   + "   "   +  strTreeName  +   " .onSelectedIndexChange = function() { \n "   +   " if (event.oldTreeNodeIndex != event.newTreeNodeIndex) \n "   +   " this.queueEvent('onselectedindexchange', event.oldTreeNodeIndex + ',' + event.newTreeNodeIndex); \n "   +   " window.setTimeout(' "   +  strRef.Replace( " ' " , " \\' " +   " ', 0, 'JavaScript'); \n "   +   "  } \n "   +   "  } \n "   +   " // --> \n "   +   " </script> "
            Page.RegisterClientScriptBlock(
" InitTree " ,strScript ); 

            
// 初始化HTML控件显示属性

            OrganizationDataArea.Visible 
=   false ;
            SynchronizeTipArea.Visible 
=   false ;
            DelResultArea.Visible 
=   false ;
            lblError.Visible 
=   false ;

            Organization_Add.Visible 
=   false ;
            Organization_Save.Visible 
=   false ;
            Organization_Del.Visible 
=   false ;
            Organization_Back.Visible 
=   false ;

            
if  ( ! IsPostBack)
            {
                stradd 
=   " 新建单位 " ;
                strSynchronize 
=   " 初始化 " ;
                strSyn 
=   " 同步 " ;
                ViewState[
" add " =  stradd;
                ViewState[
" Synchronize " =  strSynchronize;
                Organization_Synchronize.Visible 
=   true ;
                Organization_Add.Visible 
=   true ;
                InitTreeByXml();
            }
        }

        
#region  建立TreeView并初始化。
        
private   void  InitTreeByXml()
        {            
            TreeViewHR.Nodes.Clear();
            TreeNode noderoot 
=   new  TreeNode();
            noderoot.Text
= " 根目录 "  ;
            noderoot.NavigateUrl 
=   " DesktopDefault.aspx?tabid=925f53ab-03bd-4de4-9df5-4abad04ec9c9 " ;
            
this .TreeViewHR.Nodes.Add(noderoot);
            XmlDocument xmldoc 
=   new  XmlDocument();
            xmldoc.Load(
this .Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " ));
            System.Xml.XmlNodeList xmlChildNodeList 
=  xmldoc.SelectNodes( " //department[@Type = '1'] " );
            
for  ( int  i  =   0 ; i  <  xmlChildNodeList.Count; i ++ )
            {
                TreeNode node 
=  buildTreeByXml(xmlChildNodeList[i]);
                
if  ( null   !=  node)
                    noderoot.Nodes.Add(node);
            }
        }
        
private  TreeNode buildTreeByXml(XmlNode xmlTreeNode)
        {
            TreeNode node 
=   null ;
            
if  ( null   ==  xmlTreeNode)  return  node;
            node 
=   new  TreeNode();
            node.Text 
=  xmlTreeNode.Attributes[ " Name " ].Value;
            node.ID 
=  xmlTreeNode.Attributes[ " ID " ].Value;
            node.Type 
=  xmlTreeNode.Attributes[ " Oaid " ].Value;
            node.NodeData 
=  xmlTreeNode.Attributes[ " Type " ].Value;
            
            XmlNodeList nodelist 
=  xmlTreeNode.ChildNodes;
            
for  ( int  i  =   0 ; i  <  nodelist.Count; i ++ )
                node.Nodes.Add(buildTreeByXml(nodelist[i]));
            
return  node;
        }
        
#endregion

        
#region  同步OA系统部门及人员数据

        
#region  同步流程
        
public   void  SynchronizeFlow( string [] strcondition,  string  type)
        {
            XmlNode newnode;
            Organize IAagent
= new  Organize(); 
            newnode 
=  IAagent.GetOrganizeInfo( "" , "" );
            
// XmlDocument xmldoc = new XmlDocument();                    
            
// xmldoc.Load(this.Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath+"Organization.xml"));              
             for  (  int  i = 0 ; i  <  strcondition.Length; i ++ )
            {
                XmlNodeList OrganizationNodeList 
=  newnode.SelectNodes( " //department[@type = ' "   +  type  +   " ' "   +  strcondition[i]  +   " ] " );
                SynchronizeOrganization(OrganizationNodeList, type);
            }
        }
        
#endregion

        
#region  同步数据库机构信息
        
void  SynchronizeOrganization(XmlNodeList OrganizationNodeList,  string  type)
        {
            
string [] result  =   new   string []{ "" };
            
string [,] resultvalue  =   new   string [OrganizationNodeList.Count,  2 ];

            
#region  同步机构。
            
for  ( int  i  =   0 ; i  <  OrganizationNodeList.Count; i ++ )
            {
                
// 建立需要传入过程的一,二维单位参数数组(由OA系统XML文档取得机构数据)||(由取得前台页面输入的新机构数据)
                 string [] arrParameterOrganization  =   new   string []
                    {
                        System.Guid.NewGuid().ToString(),
                        OrganizationNodeList[i].Attributes[
" name " ].Value,
                        OrganizationNodeList[i].Attributes[
" id " ].Value
                    };
                
string [,] arrParameterUnit  =   new   string [,]
                    {
                        {
" unitauthorizedguid " , " SqlDbType.VarChar, 50 " },
                        {
" unitname " " SqlDbType.VarChar, 200 " },
                        {
" unitid " " SqlDbType.VarChar, 50 " }
                    };

                
if  ( type  ==   " 1 "  )
                {
                    
#region  取到数据为单位数据
                    
// 将各参数传入数据层,返回操作结果。
                    SqlDataAccess getresult  =   new  SqlDataAccess();
                    result 
=  getresult.GetResult(arrParameterOrganization, arrParameterUnit,  " HR_Handle_Unit " 3 );

                    
// 建立或更新XML单位节点。
                    SynchronizeLocalXmlDoc(OrganizationNodeList[i]);
                    
// 查询OA系统XML当前单位节点下的所有部门。||若是建立新单位,则以下查询结果=null,循环不被执行。
                    XmlNodeList DepartmentNodeList  =  OrganizationNodeList[i].SelectNodes( " * " );

                    
#region  同步部门及其人员(循环)
                    
for  (  int  j  =   0 ; j  <  DepartmentNodeList.Count; j ++ )
                    {
                        
// 在该单位节点下建立部门节点。
                        SynchronizeLocalXmlDoc(DepartmentNodeList[j]);
                        
// 同步人员信息。
                        SynchronizePerson(DepartmentNodeList[j]);
                    }
                    
#endregion
                    
                    
#endregion
                }
                
else
                {
                    
#region  取到数据为部门数据
                    
// 更新本地XML该部门数据。
                    SynchronizeLocalXmlDoc(OrganizationNodeList[i]);
                    
if  ( type  !=   " 10 "  )
                    {
                        
// 传入的NodeList为OA系统部门信息,执行人员同步操作。(若type=10则传入为新建立部门数据,不执行人员同步)
                        SynchronizePerson(OrganizationNodeList[i]);
                    }
                    
#endregion
                }
            }
            
#endregion

            
// rptOrganizationResult.DataSource = resultvalue;
            
// rptOrganizationResult.DataBind();
        }
        
#endregion

        
#region  同步数据库人员信息
        
public   void  SynchronizePerson(XmlNode DepartmentNode)
        {
            
// 查询OA系统XML当前部门节点下的所有人员。
            XmlNodeList PersonNodeList  =  DepartmentNode.SelectNodes( " members/member " );
            
string [,] resultvalue  =   new   string [PersonNodeList.Count, 2 ];
            
// 取得OA系统XML当前人员节点中相关属性。

            
#region  同步人员(循环)
            
for  (  int  i  =   0 ; i  <  PersonNodeList.Count; i ++  )
            {
                
string  personnelguid  =  System.Guid.NewGuid().ToString();
                
string  guid  =  personnelguid;
                
string  personname  =  PersonNodeList[i].Attributes[ " name " ].Value;
                
string  personid  =  PersonNodeList[i].Attributes[ " id " ].Value;
                
string  oaccount  =  PersonNodeList[i].Attributes[ " account " ].Value;
                
string  departmentid  =  PersonNodeList[i].ParentNode.ParentNode.Attributes[ " id " ].Value;
                
string  telephone  =  PersonNodeList[i].Attributes[ " tel " ].Value;
                
string  mobile  =  PersonNodeList[i].Attributes[ " mobile " ].Value;
                
string  departmentname  =  PersonNodeList[i].ParentNode.ParentNode.Attributes[ " name " ].Value;
                
string  unitid  =  PersonNodeList[i].ParentNode.ParentNode.ParentNode.Attributes[ " id " ].Value;
                
if  ( unitid  ==   " 0501021148366051 "  )
                {
                    unitid 
=  PersonNodeList[i].ParentNode.ParentNode.Attributes[ " id " ].Value;
                    departmentid
= "" ;
                    departmentname
= "" ;
                }
                
string  iorder  =  PersonNodeList[i].Attributes[ " usernumber " ].Value;

                
// 建立需要传入过程的一,二维人员参数数组
                 string [] arrParameter  =   new   string []
                                {
                                    personnelguid,
                                    guid,
                                    personname,
                                    personid,
                                    oaccount,
                                    departmentid,
                                    telephone,
                                    mobile,
                                    departmentname,
                                    unitid,
                                    iorder
                                };
                
string [,] arrParameterPerson  =   new   string [,]
                                {
                                    {
" personnelguid " " SqlDbType.VarChar, 50 " },
                                    {
" guid " " SqlDbType.VarChar, 50 " },
                                    {
" personname " " SqlDbType.VarChar, 50 " },
                                    {
" personid " " SqlDbType.VarChar, 50 " },
                                    {
" oaccount " " SqlDbType.VarChar, 50 " },
                                    {
" departmentid " " SqlDbType.VarChar, 50 " },
                                    {
" telephone " " SqlDbType.VarChar, 50 " },
                                    {
" mobile " " SqlDbType.VarChar, 50 " },
                                    {
" departmentname " " SqlDbType.VarChar, 200 " },
                                    {
" unitid " " SqlDbType.VarChar, 50 " },
                                    {
" iorder " " SqlDbType.VarChar, 50 " }
                                };
                
// 将各参数传入数据层,返回操作结果。
                SqlDataAccess getresult  =   new  SqlDataAccess();
                
string [] result  =  getresult.GetResult(arrParameter, arrParameterPerson,  " HR_Handle_Person " 11 );
            }
            
#endregion

        }
        
#endregion

        
#region  同步本地XML文档
        
void  SynchronizeLocalXmlDoc(XmlNode OrganizationNode)
        {
            XmlDocument localxmldoc 
=   new  XmlDocument();
            localxmldoc.Load(
this .Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " ));
            XmlNode LocalNode 
=   null ;

            
#region  狗屎程序故障,见鬼了。
            
//             if ( OrganizationNode.Attributes["id"] == null)
            
//             {
            
//                 Response.Write("0");
            
//             }
            
//             else
            
//             {Response.Write("1");}
             #endregion
            
            
if  ( OrganizationNode.Attributes[ " id " !=   null  )
            {
                LocalNode 
=  localxmldoc.SelectSingleNode( " //department[@ID = ' "   +  OrganizationNode.Attributes[ " id " ].Value  +   " '] " );
                
if  ( LocalNode  ==   null  )
                {
                    
// 本地XML文档中无该节点,建立。    
                     if ( OrganizationNode.ParentNode.Attributes[ " id " ==   null  )
                    {
                        
// 该节点为单位节点
                        LocalNode  =  localxmldoc.DocumentElement;
                    }
                    
else
                    {
                        
// 该节点为部门节点
                        LocalNode  =  localxmldoc.SelectSingleNode( " //department[@ID = ' "   +  OrganizationNode.ParentNode.Attributes[ " id " ].Value  +   " '] " );
                    }
                    XmlElement node 
=  localxmldoc.CreateElement( " department " );

                    node.SetAttribute(
" ID " ,OrganizationNode.Attributes[ " id " ].Value.ToString());
                    node.SetAttribute(
" Name " ,OrganizationNode.Attributes[ " name " ].Value.ToString());
                    
if  ( OrganizationNode.Attributes[ " oaid " ==   null )
                    {
                        node.SetAttribute(
" Oaid " ,OrganizationNode.Attributes[ " id " ].Value.ToString());
                    }
                    
else
                    {
                        node.SetAttribute(
" Oaid " ,OrganizationNode.Attributes[ " oaid " ].Value.ToString());
                    }
                    node.SetAttribute(
" Type " ,OrganizationNode.Attributes[ " type " ].Value.ToString());
                
                    LocalNode.AppendChild(node); 
                    localxmldoc.Save(
this .Page.Server.MapPath( Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " )); 
                }
                
else
                {
                    
// 更新节点
                    LocalNode.Attributes[ " Name " ].Value  =  OrganizationNode.Attributes[ " name " ].Value;
                    LocalNode.Attributes[
" ID " ].Value  =  OrganizationNode.Attributes[ " id " ].Value;
                    
if  ( OrganizationNode.Attributes[ " oaid " !=   null  )
                    {
                        LocalNode.Attributes[
" Oaid " ].Value  =  OrganizationNode.Attributes[ " oaid " ].Value;
                    }
                    
else
                    {
                        LocalNode.Attributes[
" Oaid " ].Value  =  OrganizationNode.Attributes[ " id " ].Value;
                    }
                    LocalNode.Attributes[
" Type " ].Value  =  OrganizationNode.Attributes[ " type " ].Value;
                    localxmldoc.Save(
this .Page.Server.MapPath( Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " )); 
                }
            }
        }
        
#endregion

        
#region  处理特例直属单位:存入直属单位下所有单位数据到数据库,并删除直属单位
        
public   void  ReplaceDBUnit()
        {
            
string [] result  =   new   string []{ "" };

            XmlDocument localxmldoc 
=   new  XmlDocument();
            localxmldoc.Load(
this .Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " ));
            
            XmlNodeList NodeList 
=  localxmldoc.DocumentElement.SelectSingleNode( " //department[@ID = '0501021148366051'] " ).SelectNodes( " * " );

            
for  (  int  i  =   0 ; i  <  NodeList.Count; i ++  )
            {
                
string [] arrParameterOrganization  =   new   string []
                    {
                        NodeList[i].Attributes[
" ID " ].Value,
                        NodeList[i].Attributes[
" Name " ].Value,
                        NodeList[i].Attributes[
" Oaid " ].Value,
                    };
                
string [,] arrParameterUnit  =   new   string [,]
                    {
                        {
" unitauthorizedguid " , " SqlDbType.VarChar, 50 " },
                        {
" unitname " " SqlDbType.VarChar, 200 " },
                        {
" unitid " " SqlDbType.VarChar, 50 " }
                    };

                SqlDataAccess getresult 
=   new  SqlDataAccess();
                result 
=  getresult.GetResult(arrParameterOrganization, arrParameterUnit,  " HR_Handle_Unit " 3 );
            }
            SqlDataAccess delresult 
=   new  SqlDataAccess();
            personcount 
=  delresult.DeleteOrganization( " 0501021148366051 " " delete " );
        }
        
#endregion

        
#endregion

        
#region  绑定相应XML数据
        
private   void  BindXmlData( string  id,  string  name,  string  oaid,  string  type)
        {
            DDLOrganizationType.Items.Clear();

            OrganizationName.Text 
=  name;
            OrganizationID.Text 
=  id;
            OrganizationOaid.Text 
=  oaid;
            
// 判断生成DDL
             if  ( type  ==   " 1 " )
                {DDLOrganizationType.Items.Add(
new  ListItem( " 单位 " " unit " ));}
            
else   if  ( type  ==   " 2 "  )
                {DDLOrganizationType.Items.Add(
new  ListItem( " 部门 " " department " ));}
            
else
                {DDLOrganizationType.Items.Add(
new  ListItem( " 领导部门 " " leaddepartment " ));}
        }
        
#endregion

        
#region  树点击事件
        
public   void  TreeViewHR_SelectedIndexChange( object  sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
        {
            TreeNode node 
=  TreeViewHR.GetNodeFromIndex(TreeViewHR.SelectedNodeIndex);
            organizationtype 
=  node.NodeData;
            organizationname 
=  node.Text;
            organizationoaid 
=  node.Type;
            organizationid 
=  node.ID;

            ViewState[
" type " =  organizationtype;
            ViewState[
" name " =  organizationname;
            ViewState[
" id " =  organizationid;
            ViewState[
" oaid " =  organizationoaid;

            strMorS 
=   " 修改 " ;
            ViewState[
" MorS " =  strMorS;
            strDel 
=   " 删除 " ;
            ViewState[
" Del " =  strDel;

            node.Expanded 
=   true ;

            BindXmlData(organizationid, organizationname, organizationoaid, organizationtype);

            Organization_Synchronize.Visible 
=   true ;
            OrganizationDataArea.Visible 
=   true ;
            Organization_Add.Visible 
=   true ;
            Organization_Save.Visible 
=   true ;
            Organization_Del.Visible 
=   true ;
            

            
if  ( organizationtype  ==   " 1 "  )
            {
                stradd 
=   " 新建部门或者领导部门 " ;
                ViewState[
" add " =  stradd;
            }
            
else
            {
                stradd 
=   " 新建子部门 " ;
                ViewState[
" add " =  stradd;
            }

            strSynchronize 
=   " 同步更新 " ;
            ViewState[
" Synchronize " =  strSynchronize;
        }
        
#endregion

        
#region  删除单位或者部门
        
private   void  DeleteOrganization( string  id,  string  mark)
        {
            
// 将参数传入数据层,返回操作结果。
            SqlDataAccess delresult  =   new  SqlDataAccess();
            personcount 
=  delresult.DeleteOrganization(id, mark);

            XmlDocument localxmldoc 
=   new  XmlDocument();
            localxmldoc.Load(
this .Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " ));
            XmlNode Node 
=  localxmldoc.SelectSingleNode( " //department[@ID = ' "   +  id  +   " '] " );

            
if  ( mark  ==   " getdelinfo " )
            {
                departmentcount 
=  Node.ChildNodes.Count;
            }
            
else
            {
                XmlNode NodeParent 
=  Node.ParentNode;
                NodeParent.RemoveChild(Node);
                localxmldoc.Save(
this .Page .Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " )); 
            }
        }
        
#endregion

        
#region  按钮

        
#region  同步
        
public   void  Organization_Synchronize_Click( object  sender, EventArgs e)
        {
            
if  ( ViewState[ " add " ].ToString()  ==   " 新建单位 "  )
            {
                
//  根目录页面
                strcondition  =   new   string []
                    {
                        
" and @id=05010211483776592 " ,
                        
" and @id=0501021148366051 "
                    };
                
if  ( ViewState[ " Synchronize " ].ToString()  ==   " 初始化 "  )
                {
                    
//  点击初始化按钮后。
                    strSynchronize  =   " 确定初始化 " ;
                    ViewState[
" Synchronize " =  strSynchronize;
                    organizationname 
=   " 提示:同步机构<span>杭州市XXXX单位</span>和<span>杭州市XXX委员会</span>中所有部门信息以及各部门下所有人员信息,无则增加,有则更新以保持与OA系统数据一致性。是否确定? " ;
                    Organization_Add.Visible 
=   false ;
                    Organization_Back.Visible 
=   true ;

                    SynchronizeTipArea.Visible 
=   true ;
                }
                
else
                {
                    
//  点击确定初始化按钮后。
                    strSynchronize  =   " 初始化 " ;
                    ViewState[
" Synchronize " =  strSynchronize;
                    stradd 
=  ViewState[ " add " ].ToString();
                    Organization_Add.Visible 
=   true ;
                    Organization_Back.Visible 
=   false ;
                    
// 传参数到同步流程方法中,同步OA。
                    SynchronizeFlow(strcondition,  " 1 " );
                    
// 处理特例——直属单位
                    ReplaceDBUnit();
                    
// 重载树
                    InitTreeByXml();
                }

                Organization_Save.Visible 
=   false ;
                Organization_Del.Visible 
=   false ;
            }
            
else
            {
                
//  非根目录页面
                
//  查找本地节点,判断OAID。
                XmlDocument localxmldoc  =   new  XmlDocument();
                localxmldoc.Load(
this .Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " ));
                XmlNode node 
=  localxmldoc.SelectSingleNode( " //department[@Oaid = ' "   +  ViewState[ " id " ].ToString()  +   " '] " );

                
string  str  =   " and @id =  "   +  ViewState[ " id " ].ToString();
                strcondition 
=   new   string []
                    {
                        str
                    };

                
if  ( ViewState[ " Synchronize " ].ToString()  ==   " 同步更新 "  )
                {
                    
//  点击同步更新按钮后。
                     if  ( node  !=   null  )
                    {
                        strSynchronize 
=   " 确定同步 " ;
                        ViewState[
" Synchronize " =  strSynchronize;
                        organizationname 
=   " 提示:同步机构<span> "   +  ViewState[ " name " ].ToString()  +   " </span>中所有部门信息以及各部门下所有人员信息,无则增加,有则更新以保持与OA系统数据一致性。是否确定? " ;
                    }
                    
else
                    {
                        Organization_Synchronize.Visible 
=   false ;
                        organizationname 
=   " 提示:机构<span> "   +  ViewState[ " name " ].ToString()  +   " </span>为自建机构,在OA系统中不存在,无法进行同步,请返回。 " ;
                    }
                    Organization_Add.Visible 
=   false ;
                    Organization_Back.Visible 
=   true ;
                    Organization_Save.Visible 
=   false ;
                    Organization_Del.Visible 
=   false ;

                    SynchronizeTipArea.Visible 
=   true ;
                }
                
else
                {
                    
//  点击确定同步按钮后。
                    strSynchronize  =   " 同步更新 " ;
                    strMorS 
=   " 修改 " ;
                    ViewState[
" Synchronize " =  strSynchronize;
                    stradd 
=  ViewState[ " add " ].ToString();
                    OrganizationDataArea.Visible 
=   true ;
                    Organization_Add.Visible 
=   true ;
                    Organization_Back.Visible 
=   false ;
                    Organization_Save.Visible 
=   true ;
                    Organization_Del.Visible 
=   true ;
                    
// 传参数到同步流程方法中,同步OA。
                    SynchronizeFlow(strcondition, ViewState[ " type " ].ToString());
                    
// 处理特例——直属单位
                    ReplaceDBUnit();
                }

            }

            
// SynchronizeFlow(strcondition, "1", "Result");
        }
        
#endregion

        
#region  添加
        
public   void  Organization_Add_Click( object  sender, EventArgs e)
        {
            DDLOrganizationType.Items.Clear();

            strMorS 
=   " 保存 " ;
            ViewState[
" MorS " =  strMorS;
            
// 建立页面。
            OrganizationDataArea.Visible  =   true ;
            Organization_Synchronize.Visible 
=   false ;
            Organization_Save.Visible 
=   true ;
            Organization_Back.Visible 
=   true ;

            OrganizationName.Text 
=   "" ;
            OrganizationID.Text 
=  System.Guid.NewGuid().ToString();
            OrganizationOaid.Text 
=   " 0 " ;

            
if  ( ViewState[ " add " ].ToString()  ==   " 新建单位 "  )
            {
                DDLOrganizationType.Items.Add(
new  ListItem( " 单位 " " 1 " ));
            }
            
else
            {
                DDLOrganizationType.Items.Add(
new  ListItem( " 部门 " " 2 " ));
                DDLOrganizationType.Items.Add(
new  ListItem( " 领导部门 " " 3 " ));
                DDLOrganizationType.SelectedValue 
=   " 2 " ;
            }
        }
        
#endregion

        
#region  保存或修改
        
public   void  Organization_Save_Click(Object sender, EventArgs e)
        {
            lblError.Visible 
=   true ;
            
if  (OrganizationName.Text  ==   "" )
            {
                strMorS 
=  ViewState[ " MorS " ].ToString();
                OrganizationDataArea.Visible 
=   true ;
                Organization_Synchronize.Visible 
=   false ;
                Organization_Save.Visible 
=   true ;
                Organization_Back.Visible 
=   true ;
                lblError.Text 
=   " 用户名不能为空! " ;
            }
            
else
            {
                
if  ( (ViewState[ " add " ].ToString()  ==   " 新建单位 "   ||  ViewState[ " type " ].ToString()  ==   " 1 " &&  ViewState[ " add " ].ToString()  !=   " 新建部门或者领导部门 " )
                {
                    
string  lsxml = " <?xml version=\ " 1.0 \ "  encoding=\ " utf - 8 \ "  ?><a></a> " ;
                    XmlDocument tempxmldoc 
=   new  XmlDocument();
                    tempxmldoc.LoadXml(lsxml);
                    XmlNode LocalNode 
=  tempxmldoc.DocumentElement;
                    XmlElement node 
=  tempxmldoc.CreateElement( " department " );

                    node.SetAttribute(
" id " , OrganizationID.Text);
                    node.SetAttribute(
" name " , OrganizationName.Text);
                    node.SetAttribute(
" oaid " , OrganizationOaid.Text);
                    node.SetAttribute(
" type " " 1 " );
                
                    LocalNode.AppendChild(node); 

                    XmlNodeList OrganizationNodeList 
=  tempxmldoc.SelectNodes( " //a/department " );
                    SynchronizeOrganization(OrganizationNodeList, 
" 1 " );
                }
                
else
                {
                    
string  lsxml = " <?xml version=\ " 1.0 \ "  encoding=\ " utf - 8 \ "  ?><a id=\ ""  + ViewState[ " id " ].ToString() +  " \ " ></a> " ;
                    XmlDocument tempxmldoc 
=   new  XmlDocument();
                    tempxmldoc.LoadXml(lsxml);
                    XmlNode LocalNode 
=  tempxmldoc.DocumentElement;
                    XmlElement node 
=  tempxmldoc.CreateElement( " department " );

                    node.SetAttribute(
" id " , OrganizationID.Text);
                    node.SetAttribute(
" name " , OrganizationName.Text);
                    node.SetAttribute(
" oaid " , OrganizationOaid.Text);
                    
if  ( ViewState[ " MorS " ].ToString()  ==   " 保存 "  )
                    {
                        node.SetAttribute(
" type " , DDLOrganizationType.SelectedValue);
                    }
                    
else
                    {
                        node.SetAttribute(
" type " , ViewState[ " type " ].ToString());
                    }
                
                    LocalNode.AppendChild(node); 

                    XmlNodeList OrganizationNodeList 
=  tempxmldoc.SelectNodes( " //a/department " );
                    SynchronizeOrganization(OrganizationNodeList, 
" 10 " );
                }
                
                Organization_Synchronize.Visible 
=   false ;
                OrganizationDataArea.Visible 
=   true ;
                Organization_Back.Visible 
=   true ;
                lblError.Text 
=   " 机构 "   +  OrganizationName.Text  +   "  已保存,请返回。 " ;
            }

            
// 重载树
            InitTreeByXml();
        }
        
#endregion

        
#region  删除
        
public   void  Organization_Del_Click(Object sender, EventArgs e)
        {

            DelResultArea.Visible 
=   true ;
            Organization_Del.Visible 
=   true ;
            Organization_Back.Visible 
=   true ;

            
if  ( ViewState[ " Del " ].ToString()  ==   " 删除 "  )
            {
                DeleteOrganization(ViewState[
" id " ].ToString(),  " getdelinfo " );
                
if  ( personcount  ==   0  )
                {
                    strDel 
=   " 确定删除 " ;
                    ViewState[
" Del " =  strDel;
                    lblDelTip.Text 
=   " 该机构下有部门共 <span> "   +  departmentcount  +   " </span> 个,是否确定删除? " ;
                }
                
else
                {
                    Organization_Del.Visible 
=   false ;
                    lblDelTip.Text 
=   " 对不起,该机构下有人员共 <span> "   +  personcount  +   " </span> 个,您不能执行删除操作。 " ;
                }
            }
            
else
            {
                DeleteOrganization(ViewState[
" id " ].ToString(),  " delete " );

                stradd 
=   " 新建单位 " ;
                ViewState[
" add " =  stradd;
                strSynchronize 
=   " 初始化 " ;

                DelResultArea.Visible 
=   false ;
                Organization_Synchronize.Visible 
=   true ;
                Organization_Add.Visible 
=   true ;
                Organization_Del.Visible 
=   false ;
                Organization_Back.Visible 
=   false ;

                InitTreeByXml();
            }
        }
        
#endregion

        
#region  返回
        
public   void  Organization_Back_Click(Object sender, EventArgs e)
        {
            DDLOrganizationType.Items.Clear();

            strMorS 
=   " 修改 " ;
            ViewState[
" MorS " =  strMorS;
            
// 建立页面。
            stradd  =  ViewState[ " add " ].ToString();
            strSynchronize 
=   " 同步更新 " ;
            OrganizationDataArea.Visible 
=   true ;
            Organization_Synchronize.Visible 
=   true ;
            Organization_Add.Visible 
=   true ;
            Organization_Save.Visible 
=   true ;
            Organization_Del.Visible 
=   true ;
            
if  ( ViewState[ " add " ].ToString()  ==   " 新建部门或者领导部门 "  )
            {
                OrganizationName.Text 
=  ViewState[ " name " ].ToString();
                OrganizationID.Text 
=  ViewState[ " id " ].ToString();
                OrganizationOaid.Text 
=  ViewState[ " oaid " ].ToString();
                DDLOrganizationType.Items.Add(
new  ListItem( " 子部门 " " 2 " ));
            }
            
else   if  ( ViewState[ " add " ].ToString()  ==   " 新建子部门 "  )
            {
                OrganizationName.Text 
=  ViewState[ " name " ].ToString();
                OrganizationID.Text 
=  ViewState[ " id " ].ToString();
                OrganizationOaid.Text 
=  ViewState[ " oaid " ].ToString();
                DDLOrganizationType.Items.Add(
new  ListItem( " 子部门 " " 2 " ));
            }
            
else
            {
                stradd 
=   " 新建单位 " ;
                ViewState[
" add " =  stradd;
                strSynchronize 
=   " 初始化 " ;

                OrganizationDataArea.Visible 
=   false ;
                Organization_Save.Visible 
=   false ;
                Organization_Del.Visible 
=   false ;
            }
        }
        
#endregion

        
#region  上移
        
public   void  upBtnGroup_Click( object  sender, EventArgs e)
        {
            ViewState[
" new " ] = " none " ;
            
if   (TreeViewHR.SelectedNodeIndex != " 0 "
            {
                
string  strnodeindex  =  TreeViewHR.SelectedNodeIndex;
                
string  strnodeindextemp =  TreeViewHR.SelectedNodeIndex;
                
int   li_flag  =  strnodeindex.LastIndexOf( " . " );
                XmlDocument xmldoc
= new  XmlDocument();
                xmldoc.Load(
this .Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " ));
                TreeNode node
= new  TreeNode();
                node
= (TreeNode)(TreeViewHR.GetNodeFromIndex(TreeViewHR.SelectedNodeIndex).Parent);
                
if   (node.Nodes[ 0 ].Text == (TreeViewHR.GetNodeFromIndex(TreeViewHR.SelectedNodeIndex).Text)) 
                {
                    
return ;
                }                    
// 上移
                 else
                {
                    
int  ctri  =  Convert.ToInt16(strnodeindex.Substring(li_flag  +   1 )) - 1 ;
                    strnodeindex 
=  strnodeindex.Substring( 0 ,li_flag + 1 );    
                    strnodeindex 
=  strnodeindex  +  ctri.ToString();
                    XmlNode xmlparentnode
= null ;
                    XmlNode xmlcurrentnode
= null ;
                    XmlNode xmlcurrentformanode
= null ;
                    
if   (node.GetNodeIndex() == " 0 "
                    {
                        xmlparentnode
= xmldoc.SelectSingleNode( " organizes " ); 
                        xmlcurrentnode
= xmldoc.SelectSingleNode( " //department[@ID=' " + TreeViewHR.GetNodeFromIndex(TreeViewHR.SelectedNodeIndex).ID.ToString()  + " '] " ); 
                        xmlcurrentformanode
= xmldoc.SelectSingleNode( " //department[@ID=' " + TreeViewHR.GetNodeFromIndex(strnodeindex).ID.ToString() + " '] " ); 
                    }
                    
else
                    {
                        xmlparentnode
= xmldoc.SelectSingleNode( " //department[@ID=' " + node.ID.ToString() + " '] " ); 
                        xmlcurrentnode
= xmldoc.SelectSingleNode( " //department[@ID=' " + TreeViewHR.GetNodeFromIndex(TreeViewHR.SelectedNodeIndex).ID.ToString() + " '] " ); 
                        xmlcurrentformanode 
= xmldoc.SelectSingleNode( " //department[@ID=' " + TreeViewHR.GetNodeFromIndex(strnodeindex).ID.ToString()  + " '] " );                  
                    
                    }
                    
if  (xmlparentnode != null   &&  xmlcurrentnode != null   &&  xmlcurrentformanode != null )
                    {
                        xmlparentnode.InsertBefore(xmlcurrentnode,xmlcurrentformanode);
                        xmldoc.Save(
this .Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " ));     
                        
// 根据HR_Organization.xml中的内容生成树型目录        
                        InitTreeByXml();    
                    
/*     if  (TreeViewHR.Nodes.Count>=1) 
                        {
                            TreeViewHR.SelectedNodeIndex=strnodeindex; 
                                
                        }                          
*/
                    }  
                }
            
            }        

        }
        
#endregion

        
#region  下移
        
public   void  downBtnGroup_Click( object  sender, EventArgs e)
        {
            ViewState[
" new " ] = " none " ;
            
if   (TreeViewHR.SelectedNodeIndex != " 0 "
            {
                
string  strnodeindex  =  TreeViewHR.SelectedNodeIndex;
                
string  strnodeindextemp =  TreeViewHR.SelectedNodeIndex;
                
int   li_flag  =  strnodeindex.LastIndexOf( " . " );
                XmlDocument xmldoc
= new  XmlDocument();
                xmldoc.Load(
this .Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " ));
                TreeNode node
= new  TreeNode();
                node
= (TreeNode)(TreeViewHR.GetNodeFromIndex(TreeViewHR.SelectedNodeIndex).Parent);
                
if   (node.Nodes[node.Nodes.Count - 1 ].Text == (TreeViewHR.GetNodeFromIndex(TreeViewHR.SelectedNodeIndex).Text))   
                {
                    
return ;
                }        
                
else
                {
             
                    
int  ctri  =  Convert.ToInt16(strnodeindex.Substring(li_flag  +   1 )) + 1 ;
                    strnodeindex 
=  strnodeindex.Substring( 0 ,li_flag + 1 );    
                    strnodeindex 
=  strnodeindex  +  ctri.ToString(); 
                    XmlNode xmlparentnode
= null ;
                    XmlNode xmlcurrentnode
= null ;
                    XmlNode xmlcurrentformanode
= null ;
                    
if   (node.GetNodeIndex() == " 0 "
                    {
                
                        xmlparentnode
= xmldoc.SelectSingleNode( " //organizes " ); 
                        xmlcurrentnode
= xmldoc.SelectSingleNode( " //department[@ID=' " + TreeViewHR.GetNodeFromIndex(TreeViewHR.SelectedNodeIndex).ID.ToString() + " '] " ); 
                        xmlcurrentformanode 
= xmldoc.SelectSingleNode( " //department[@ID=' " + TreeViewHR.GetNodeFromIndex(strnodeindex).ID.ToString()   + " '] " ); 
                    }
                    
else
                    {                 
                        xmlparentnode
= xmldoc.SelectSingleNode( " //department[@ID=' " + node.ID.ToString() + " '] " ); 
                        xmlcurrentnode
= xmldoc.SelectSingleNode( " //department[@ID=' " + TreeViewHR.GetNodeFromIndex(TreeViewHR.SelectedNodeIndex).ID.ToString() + " '] " ); 
                        xmlcurrentformanode 
= xmldoc.SelectSingleNode( " //department[@ID=' " + TreeViewHR.GetNodeFromIndex(strnodeindex).ID.ToString()   + " '] " );                  
                    }
                    
if  (xmlparentnode != null   &&  xmlcurrentnode != null   &&  xmlcurrentformanode != null )
                    {
                        xmlparentnode.InsertAfter(xmlcurrentnode,xmlcurrentformanode);
                        xmldoc.Save(
this .Page.Server.MapPath(Winstar.Build.HR.Common.AppConfig.ConfigPath + " HR_Organization " + " .xml " ));     
                        
// 根据HR_Organization.xml中的内容生成树型目录        
                        InitTreeByXml();    
                    
/*     if  (TreeViewHR.Nodes.Count>=1) 
                        {
                            TreeViewHR.SelectedNodeIndex=strnodeindex;         
                        }                      
*/
                    }  
                }
            }
        }
        
#endregion

        
#endregion

        
#region  Web 窗体设计器生成的代码
        
override   protected   void  OnInit(EventArgs e)
        {
            
//
            
//  CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            
//
            InitializeComponent();
            
base .OnInit(e);
        }
        
        
///   <summary>
        
///         设计器支持所需的方法 - 不要使用代码编辑器
        
///         修改此方法的内容。
        
///   </summary>
         private   void  InitializeComponent()
        {
            
this .TreeViewHR.SelectedIndexChange  +=   new  Microsoft.Web.UI.WebControls.SelectEventHandler( this .TreeViewHR_SelectedIndexChange);
            
this .Load  +=   new  System.EventHandler( this .Page_Load);
        }
        
#endregion
    }
}

本文转自爆牙齿博客园博客,原文链接:http://www.cnblogs.com/yuntian/archive/2007/03/07/666949.html,如需转载请自行联系原作者
相关文章
|
7月前
|
JavaScript 前端开发 开发者
Vue.js:构建现代化的前端应用程序
Vue.js 是一个流行的 JavaScript 框架,用于构建现代化的前端应用程序。它的目标是通过提供简洁、灵活的语法和强大的功能,让开发者更轻松地构建交互式的用户界面。
54 0
|
1月前
|
前端开发 Java 网络安全
解决docker中运行的jar包连不上前端程序
解决docker中运行的jar包连不上前端程序
|
2月前
|
编解码 前端开发 JavaScript
Web 应用程序的前端设计
在当今数字化时代,Web 应用程序已经成为人们生活和工作的重要组成部分。而 Web 应用程序的前端设计则是决定用户体验的关键因素。本文将介绍一些前端设计的基本原则,以及一些流行的前端框架和工具。
26 4
|
3月前
|
存储 前端开发 JavaScript
从前端到后端:构建完整的Web应用程序
本文将介绍如何从前端到后端构建一个完整的Web应用程序。我们将探讨前端开发、后端开发以及使用Java、Python、C等技术实现的数据库集成。通过本文,您将了解到如何设计和开发一个完善的Web应用程序,并具备基本的技术知识。
|
3月前
|
JavaScript 前端开发 API
使用NodeJS开发前端打包程序
使用NodeJS开发前端打包程序
33 0
|
6月前
|
前端开发 JavaScript 编译器
【前端异常】vscode:无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,Cannot find module ”webpack“
【前端异常】vscode:无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,Cannot find module ”webpack“
265 0
|
10月前
|
前端开发 应用服务中间件
前端|在开发web程序时常遇到的错误
前端|在开发web程序时常遇到的错误
61 0
|
10月前
|
自然语言处理 前端开发 小程序
淘宝代购系统;海外代购系统;代购程序,代购系统源码PHP前端源码
代购业务近年兴起的一种购物模式,是帮国外客户购买中国商品。主要通过外贸代购模式,把淘宝、 天猫等电商平台的全站商品通过API接入到你的网站上,瞬间就可以架设一个有数亿产品的大型网上商城,而且可以 把这些中文的商品全部自动翻译成各国语言,能让国外客户看懂,直接在网站上下单,然后网站运营方代为购买再邮
|
11月前
|
前端开发
前端学习笔记202303学习笔记第五天-了解单页面应用程序的概念
前端学习笔记202303学习笔记第五天-了解单页面应用程序的概念
55 0
|
11月前
|
存储 缓存 前端开发
「前端架构」使用React进行应用程序状态管理
「前端架构」使用React进行应用程序状态管理