protected void StuffUserPositionGridView_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { DataRowView drv = (DataRowView)e.Row.DataItem; BusinessObjects.AuthorizationDS.PositionRow position = (BusinessObjects.AuthorizationDS.PositionRow)drv.Row; List <AuthorizationDS.OrganizationUnitRow> ous = new OUTreeBLL().GetParentOUsOfPosition(position.PositionId); StringBuilder ouNames = new StringBuilder(); foreach (BusinessObjects.AuthorizationDS.OrganizationUnitRow ou in ous) { ouNames.Append(ou.OrganizationUnitName + "-"); } Label label = (Label)e.Row.FindControl("ParentOUNamesCtl"); label.Text = ouNames.ToString(); } }
/// <summary> /// 获取满足条件的相邻职务 /// </summary> /// <param name="positionId">自身职务ID</param> /// <param name="ouTypeId">相邻职务所在机构链的机构类型ID</param> /// <param name="poTypeId">相邻职务的职务类型ID</param> /// <returns></returns> public AuthorizationDS.PositionRow[] GetNearbyPositions(int positionId, int?ouTypeId, int?poTypeId) { BusinessObjects.AuthorizationDS.PositionRow position = this.DS.Position.FindByPositionId(positionId); List <BusinessObjects.AuthorizationDS.OrganizationUnitRow> positionParentOUs = this.GetParentOUsOfPosition(positionId); AuthorizationDS.PositionRow[] result = new AuthorizationDS.PositionRow[0]; if (ouTypeId == null) { for (int i = positionParentOUs.Count; i > 0; i--) { result = GetPositionsInOU(positionParentOUs[i - 1].OrganizationUnitId, poTypeId.GetValueOrDefault()); if (result != null && result.Length > 0) { List <AuthorizationDS.PositionRow> pos = new List <AuthorizationDS.PositionRow>(); //优先找直系上级机构下满足条件的职位 foreach (AuthorizationDS.PositionRow sPosition in result) { if (sPosition.OrganizationUnitId == positionParentOUs[i - 1].OrganizationUnitId) { //if (!(poTypeId == 2 && sPosition.PositionId == positionId)) {//如果找上级主管,自身应排除 // pos.Add(sPosition); //} pos.Add(sPosition); } } if (pos.Count > 0) { return(pos.ToArray()); } //如果不是找上级主管,再找旁系上级机构下满足条件的职位 if (poTypeId != 2) { return(result); } } } return(result); } else if (poTypeId == null) { for (int i = positionParentOUs.Count; i > 0; i--) { BusinessObjects.AuthorizationDS.OrganizationUnitRow[] ous = GetOUsInOU(positionParentOUs[i - 1].OrganizationUnitId, ouTypeId.GetValueOrDefault()); if (ous != null && ous.Length != 0) { List <AuthorizationDS.PositionRow> pos = new List <AuthorizationDS.PositionRow>(); foreach (BusinessObjects.AuthorizationDS.OrganizationUnitRow ou in ous) { foreach (AuthorizationDS.PositionRow sPosition in ou.GetPositionRows()) { pos.Add(sPosition); } } if (pos.Count > 0) { return(pos.ToArray()); } } } return(result); } else { //如果机构树中找符合条件的机构,如果能找到,从底向上,在机构中找符合条件的职务 for (int i = positionParentOUs.Count; i > 0; i--) { if (!positionParentOUs[i - 1].IsOrganizationUnitTypeIdNull()) { if (positionParentOUs[i - 1].OrganizationUnitTypeId == ouTypeId) { for (int j = positionParentOUs.Count; j >= i - 1; j--) { result = this.GetPositionsInOU(positionParentOUs[j - 1].OrganizationUnitId, poTypeId.GetValueOrDefault()); if (result != null && result.Length != 0) { List <AuthorizationDS.PositionRow> pos = new List <AuthorizationDS.PositionRow>(); //优先找直系上级机构下满足条件的职位 foreach (AuthorizationDS.PositionRow sPosition in result) { if (sPosition.OrganizationUnitId == positionParentOUs[j - 1].OrganizationUnitId) { //if (!(poTypeId == 2 && sPosition.PositionId == positionId)) {//如果找上级主管,自身应排除 // pos.Add(sPosition); //} pos.Add(sPosition); } } if (pos.Count > 0) { return(pos.ToArray()); } //如果不是找上级主管,再找旁系上级机构下满足条件的职位 if (poTypeId != 2) { return(result); } } } } } } //找最近符合条件的机构,在其中找符合条件的职务 for (int i = positionParentOUs.Count; i > 0; i--) { BusinessObjects.AuthorizationDS.OrganizationUnitRow[] ous = this.GetOUsInOU(positionParentOUs[i - 1].OrganizationUnitId, ouTypeId.GetValueOrDefault()); List <AuthorizationDS.PositionRow> pos = new List <AuthorizationDS.PositionRow>(); foreach (AuthorizationDS.OrganizationUnitRow ou in ous) { foreach (AuthorizationDS.PositionRow sPosition in GetPositionsInOU(ou.OrganizationUnitId, poTypeId.GetValueOrDefault())) { pos.Add(sPosition); } } if (pos.Count > 0) { result = pos.ToArray(); return(result); } } return(result); } }
/// <summary> /// 构建职务的机构路径 /// </summary> /// <param name="position"></param> private void BuildPositionOrganizationTreePath(BusinessObjects.AuthorizationDS.PositionRow position) { position.OrganizationTreePath = position.OrganizationUnitRow.OrganizationTreePath + "P" + position.OrganizationUnitRow.OrganizationUnitId + "P "; this.PositionTA.Update(position); }