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();
        }
    }
Exemple #2
0
        /// <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);
            }
        }
Exemple #3
0
 /// <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);
 }