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
}
}
{
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,如需转载请自行联系原作者