65.9K
CodeProject 正在变化。 阅读更多。
Home

从员工数据库生成组织结构图

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.23/5 (18投票s)

2004年7月24日

6分钟阅读

viewsIcon

266390

downloadIcon

14380

使用 ASP 和 Microsoft Excel 从员工数据库生成组织结构图

引言

本文介绍了一个简单的程序,用于从您的员工数据库表中生成组织结构图。它根据员工之间的层级关系绘制图表。

背景

由于我们需要生成这种图表,我们尝试使用网络上任何现成且免费共享的工具,但都没有找到。最终,我们找到了一个合理的解决方案,现在与您分享。

使用的工具

  • 数据库:Microsoft Access(或 SQL Server 或 Oracle)
  • 服务器端:Active Server Pages
  • 客户端:HTML
  • 客户端脚本:JavaScript / VB Script
  • 表示层:Microsoft Excel(用于生成图表)

方法论

为了解释这种方法,让我们以一个具有以下层级关系的示例员工数据库为例:

表 1

职级 描述 职位 直接上司
1 高层管理 部门总经理 (DGH) --无--
2 部门主管 副部门主管 (DDH) 部门总经理 (DGH)
3 科长 SH 副部门主管 (DDH)
4 工程师 DE SH
4 制图员 DM SH

所有 DE 和 DM 都将向各自的 SH 汇报。同样,所有 SH 都将向各自的 DDH 汇报。请注意,SH 下有两个类别的员工(DE 和 DM)。

对于这个示例数据库,组织结构图可以绘制成:

  • 精确的倒置树状结构,显示相同职级的员工在同一行(参见下面的图 1),或者
  • 通过将相同职级和职位的员工分组在一个标题块下,形成部分倒置树状结构(参见下面的图 2)
pic1
图 1(组织结构图类型 1)
Pic2
图 2(组织结构图类型 2)

步骤 1: 从现有员工数据库表中,我们需要生成一个或多个表/视图来表示这种层级模型。它可能看起来像这样:

员工 ID(仅代表最低职级的员工) Designation 直接上司 下一级上司 下下一级上司 …… 高层管理
DE1 DE SH1 DDH1 部门总经理 (DGH)
DE2 DE SH1 DDH1 部门总经理 (DGH)
DE3 DE SH2 DDH1 部门总经理 (DGH)
DE4 DE SH3 DDH2 部门总经理 (DGH)
DM1 DM SH1 DDH1 部门总经理 (DGH)
DM2 DM SH2 DDH1 部门总经理 (DGH)
……………

注释

  1. 请参考示例 Microsoft Access 数据库 (dbOrganizationChart.mdb),其中包含表 (tblOrganizationChart)。
  2. 在此表中,我们使用了一个名为 CADRE 的附加字段,该字段可用于在同一组内对员工进行排序。

步骤 2: 为了将相关员工分组在每个部门/组下,我们必须使用 ORDER BY 子句,从所需的最高职级到所需的最低职级进行排序。例如:

SELECT * from tablename ORDER BY DGH, DDH, SH

步骤 3a: 现在,我们需要将每个职级的数据整理成包含员工详细信息的数组形式。例如:

DGH_List={DGH}
DDH_List ={DDH1, DDH2}                  ordered by DGH, EmpID
SH_List = {SH1, SH2, SH3}               ordered by DGH, DDH, EmpID
DE_List = {DE1, DE2, DE3, DE4,DE5}      ordered by DGH, DDH, SH, EmpID
DM_List = {DM1, DM2, DM3}               ordered by DGH, DDH, SH, EmpID

步骤 3b: 现在,我们需要获取每个职级下每个领导的直接员工数量,以数组形式。例如:

No_DDH_Under_DGH={2}                    (i.e.) {(DDH1,DDH2)}
No_SH_Under_DDH = {2, 1}                (i.e.) {(SH1,SH2),SH3}
No_DE_Under_SH = {2, 1, 2}              (i.e.) {(DE1,DE2),DE3,(DE4,DE5)}
No_DM_Under_SH = {1, 1, 1}              (i.e.) {DM1,DM2,DM3}

步骤 4: 现在,我们需要确定每个实体的位置(行位置和列位置)。如上所述,我们可以通过图 1 和图 2 所示的两种方式进行。但是,我们下面将只讨论图 2 所采用的方法。

当我们想要更精确地打印图表时,我们可以将该组中同级别(通常是最低级别)的员工在一个列中上下放置,并将其姓名连接到一个代表他们的标题 (DE/DM)。这个标题将反过来正确连接到其直接上司。对于这种情况,我们可以按照以下方式分配行和列位置(参见图 2*):

行位置

对于不属于最低职级的员工,其行位置就是该职位的职级(参见表 1)。对于最低职级分组员工的标题,其行位置与最低职级相同。现在,对于每个组中的员工,行位置可以从标题开始递增 '+1'。

列位置

根据上述示例中的层级结构,每个科长(SH)将拥有两类员工,即 DE 和 DM。为了正确表示,SH 将位于 DE 和 DM 之间,即每个 SH 将占据 3 (=2+1) 列。因此,我们对 SH 的列位置使用了公式 (3x-1),其中 'x' 就是 SH 数组中的位置。显然,DE 和 DM 的列位置将分别位于 SH 位置的左侧和右侧,即我们可以将“DE 列位置 = SHposition-1”和“DM 列位置 = SHposition+1”。一旦获得 SH 的列位置,其上级职级的列位置将与其下属员工列位置的平均值相同。

可以理解,如果向 SH 级别汇报的类别有 'n' 个,则将占据 'n+1' 个位置,并且 SH 位置可以表示为 '(n+1)*x-1'。因此,直接下属位置可以分别向左和向右。

注释

  1. 将所有这些行位置和列位置存储在数组中。.
  2. 在给定的示例代码中,我们演示了步骤 4 的第二种方法。

示例:从步骤 3a 和 3b,

DDH_List = {DDH1, DDH2, .....} No_SH_Under_DDH = {2, 1}
SH_List = {SH1, SH2, SH3,......} No_DE_Under_SH = {3, 2, 3},
No_DM_Under_SH = {2, 0, 4}

因此,SH 的列位置使用上面解释的公式 (3x-1)(此处 X 取值 {1,2,3},因为我们有 {SH1, SH2, SH3})

Col_SH                 = {3*1-1, 3*2-1, 3*3-1} = {2,5,8} 
DEs are Col_DE(Title)  = {2-1, 5-1, 8-1}       = {1, 4, 7}
DMs are Col_DM(Title)  = {2+1, 5+1, 8+1}       = {3, 6, 9}
DDHs are Col_DDH       = {(2+5)/2, 8/1}        = {3.5, 8}
DGH is Col_DGH         = {(3.5+8)/2}           = {5.75}
Sample screenshot
图 2*(括号中的值分别表示行和列位置)

步骤 5: 现在我们已经准备好所有员工职级的所有数组,我们只需要将这些数组传递给 Excel 宏,以绘制矩形和连接线。

使用 Excel 宏绘制矩形和连接线

我们需要将上述所有数组作为参数传递给宏,以便绘制组织结构图。

  • 根据行位置和列位置绘制矩形。同时,我们将命名矩形,以便以后可以连接它们。
  • 将数组中的文本数据(员工姓名等)添加到相应的矩形中。
  • 创建形状连接器,并将其两端正确连接到矩形上。

请参考,获取完成上述任务的详细代码。但是,请允许我补充一点,ShapeRectangle 接受五个参数 (Shape,LEFT,TOP,WIDTH,HEIGHT)。我们使用 PositionWidth 来确定矩形的位置(左和上),而使用 BoxWidthBox Height 来确定矩形的大小(宽度和高度)。

如何运行此示例项目

*_SRC.ZIP 文件中的所有文件复制到虚拟目录(使用 IIS 或 PWS 创建),并在浏览器中运行 OrganizationCreate.asp 文件

重要提示

在生成输出之前,请按如下所述更改 Internet 安全设置。在 Internet 浏览器中,转到“工具”菜单 -> “Internet 选项” -> “安全”选项卡 -> (选择 - 本地 Intranet) -> “自定义级别”,然后按以下步骤操作:

  • 如果您有权签署 ActiveX 控件,请启用“对标记为可安全执行脚本的 ActiveX 控件执行脚本”。
  • 否则,如果您没有签署此控件的权限,请启用选项“初始化并运行未标记为安全的 ActiveX 控件”。

致谢

我们衷心感谢 T.G.Bhaskar 先生(计算机化副处长)、S.MallikarjunaRao 先生、A.Subhasree 女士、S.Md.Saleem 先生和 R.Ugandhar 先生提供的支持。

我们欢迎读者提出任何改进本文的建议。

© . All rights reserved.