起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1442|回复: 12

[分享]组织机构表达式

[复制链接]
发表于 2008-7-29 10:01:54 | 显示全部楼层 |阅读模式
用途:
  根据条件查找符合条件的组织单元
  指定流程环节的执行者

组织机构表达式是一种特殊的表达式,只能用
  在流程环节的执行规则的限定执行者范围和缺省执行者范围
  通知规则的执行者范围
  转发规则的限定执行者范围和缺省执行者范围

也可以在代码中调用 Business.Model.Org.OrgSys.OrgSystem 的方法.
  //计算组织机构表达式,得到符合条件的组织单元的OrgURL
  procedure GetOrgURLsByOrgExpr(AExpr: string; AOrgURLs: TOrgURLs);
  //计算组织机构表达式,得到符合条件的组织单元的BizURL
  procedure GetBizURLsByOrgExpr(AExpr: string; ABizURLs: Business.System.TStrings);

组织机构表达式函数
  OrgKey
  OrgCondition
  父子关系的表达式
  管理关系的表达式
  工作组相关表达式
组织机构表达式的逻辑运算
范围表达式和条件表达式
性能提示
代码中使用组织机构表达式

背景阅读:
  平台上的各种表达式
回复

使用道具 举报

 楼主| 发表于 2008-7-29 10:31:29 | 显示全部楼层

OrgKey

部门、岗位、人员三个ID可以唯一的确定平台上的任何一个组织单元
函数声明:
  OrgKey(部门ID, 岗位ID, 人员ID)
说明:三个参数不能同时都为空
例如:
  OrgKey('XSB', '', '')  销售部  部门
  OrgKey('', 'XSY', '')  销售员  岗位
  OrgKey('XSB', 'XSY', '')  销售部的销售员  岗位成员
  OrgKey('XSB', 'XSY', 'ZS')  销售部销售员岗位的张三  人员成员

附件是三个ID与组织单元的对应关系

1.png

7.37 KB, 下载次数: 695

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-29 10:48:30 | 显示全部楼层

OrgCondition

组织单元在平台上是以文件系统的形式存储的,因此可以用定位文件的方式来定位需要的组织单元。
函数声明:
  OrgCondition(文件条件,属性条件,索引条件)
说明:
  • 文件条件、属性条件、索引条件三个参数不能同时为空
  • 文件条件是指文件名和扩展名,可以参考系统数据库\组织机构系统表中的文件名字段,
      例如:*.ogn表示所有的机构,X*.dpt表示部门ID以X字母开头的部门
    组织单元扩展名对照表
    .OGN  机构
    .DPT  部门
    .PTM  岗位成员
    .PTN  岗位
    .PSM  人员成员
    .PSN  人员
    .WGP  工作组
  • 属性条件指文件的显示名称、大小等属性,请参考系统数据库\组织机构属性表的ID字段和值字段,可以通过扩展部门表、岗位表、人员表的方式增加扩展属性,这些扩展属性也可以用在属性条件中来定位组织单元
      例如:isplayname='销售员' 表示显示名称等于销售员的所有组织单元
  • 索引条件指组织单元的功能权限分配、管理权限等索引条件,请参考系统数据库\组织机构索引表的ID字段和值字段
      例如:OrgUnit.FuncRef='\SYSTEM\ORGSETTING.FUNC'表示分配了ORGSETTING功能运行权限的所有组织单元
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-29 11:00:59 | 显示全部楼层

OrgCondtion举例

  • OrgCondition('*.OGN;*.DPT', '', '')  所有的机构和部门
  • OrgCondition('*.PTM', isplayName like '%经理', '') 所有的经理岗位和岗位成员
  • OrgCondition('*.psm','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func') 所有分配了这个功能的人员成员
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-29 11:20:46 | 显示全部楼层

父子关系的表达式

组织模型有三棵树:组织机构树、岗位树、人员树,可以用在树上定位父子节点的方式来定位需要的组织单元,这里取父、取子只关心父子关系,不再关心节点的类型
函数声明:
  OrgParent(组织机构范围表达式, 组织机构条件表达式, 是否取所有父, 是否包含自己)
  OrgChildren(组织机构范围表达式, 组织机构条件表达式, 是否取所有子, 是否包含自己)
  OrgFamily(组织机构范围表达式, 组织机构条件表达式, 是否取所有)
  OrgSibling(组织机构范围表达式, 组织机构条件表达式, 是否包含自己)
说明:
  组织机构范围表达式表示确定组织单元范围的表达式,任何组织机构表达式和他们的and or运算都是组织机构范围表达式
  组织机构条件表达式表示符合这个限定条件的父或者子,只能用OrgCondition,不能用其他的表达式

例如:
  OrgParent(OrgKey('BM1', '', ''), OrgCondition('*.DPT', '', ''), True, True) 部门1(ID为BM1)的上级所有部门,并且包括部门1
  OrgParent(OrgKey('BM1', '', ''), OrgCondition('*.DPT', '', ''), True, False) 部门1(ID为BM1)的上级所有部门,并且不包括部门1
  OrgFamily(OrgKey('BM1', '', ''), '', True) 部门1(ID为BM1)的所有相关单元(包括所有父和所有子)
  OrgSibling(OrgKey('BM1', '', ''), '', True) 部门1(ID为BM1)的所有兄弟单元(与部门1相同的父节点),并且包含自己
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-30 13:35:30 | 显示全部楼层

管理关系

根据组织机构中分配的管理权限,可以用表达式取组织单元的管理者和下属。
函数声明:
  OrgManager(组织机构范围表达式, 管理类型, 是否只取直接管理者)
  OrgSubordination(组织机构范围表达式, 管理类型)
说明:
  管理类型为空,表示组织管理权限;管理设置不为空,表示业务管理权限(有关组织管理权限和业务管理权限,请参考《用户手册》第8.5节)
  直接管理者:对于某组织单元B,如果它被直接包含在组织单元A的管理权限中,则称组织单元A是组织单元B的直接管理者;如果组织单元B没有被直接包含在组织单元A的管理权限中,但是它的上级单元被包含在组织单元A的管理权限中,则称组织单元A是组织单元B的间接管理者。
例如:
  在总经理的岗位成员上分配了管理权限为阳光集团
  在副总经理李海萍的人员成员上分配管理权限为生产部和仓储部,分配管理权限为阳光集团(管理类型为“生产”)
  OrgManager(OrgKey('ygjt','',''), '', True)  可以得到总经理的岗位成员
  OrgManager(OrgKey('ygjt','',''), '生产', True)  可以得到副总经理李海萍的人员成员
  OrgManager(OrgKey('XCB','',''), '', True) 可以得到副总经理李海萍的人员成员(生产部的直接管理者)
  OrgManager(OrgKey('XCB','',''), '', False) 可以得到总经理的岗位成员(生产部的间接管理者)和副总经理李海萍的人员成员(生产部的直接管理者)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-30 14:09:49 | 显示全部楼层

工作组相关表达式

机构下可以定义工作组,分配组织机构中的组织单元或者岗位到工作组作为工作组成员。
函数声明:
  OrgWorkGroup(组织机构范围表达式, 工作组类型, 是否只取直接的工作组)
  OrgWorkGroupMember(组织机构范围表达式)
说明:
  工作组类型:一个组织单元可能属于多个不同的工作组,可以用工作组类型来区分
  直接工作组与间接工作组:对于某组织单元B,如果它是工作组A的工作组成员,则称工作组A是组织单元B的直接工作组;如果组织单元B不是工作组A的工作组成员,但是它的上级单元是工作组A的工作组成员,则称工作组A是组织单元B的间接工作组。
  如果知道工作组的ID,可以用OrgKey('工作组ID', '', '') 来定位这个工作组。
例如:
  OrgKey('GZZ1', '', '') 可以得到工作组1
  OrgWorkGroupMember(OrgKey('gzz1','',''), '')  可以得到工作组1的所有成员
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-30 14:22:57 | 显示全部楼层

组织机构表达式的逻辑运算

组织机构表达式的计算结果是符合条件的组织单元的集合,因此他们也可以用集合运算的逻辑运算符And和Or来进行运算。
AND 表示逻辑与运算,A AND B表示A与B的交集,既在A中又在B中的组织单元
OR 表示逻辑或运算,A OR B表示A与B的合集,只要在A中或者在B中就在运算结果中
例如:
  OrgKey('XSB', '', '') or OrgKey('', 'XSY', '') 可以得到销售部和销售员岗位
  OrgKey('XSB', '', '') and OrgKey('', 'XSY', '') 结果为空,因为两个集合没有交集
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-30 14:29:00 | 显示全部楼层

范围表达式和条件表达式

上面的函数声明写了组织机构范围表达式和条件表达式,他们的区别是:
组织机构范围表达式的含义是对这个范围的组织单元进行计算,例如OrgChildren表达式中的范围表达式是说查找这些组织单元的子,以上所有组织机构表达式函数(包括and/or逻辑运算)都可以出现在范围表达式
组织机构条件表达式的含义是符合这个条件的组织单元,例如OrgChildren表达式中的条件表达式是说范围表达式的组织单元的符合这个条件的子,只有OrgCondition函数(包括and/or逻辑运算)可以出现在条件表达式中。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-30 14:35:46 | 显示全部楼层

性能提示

从理论上讲,利用组织机构表达式可以进行任意的嵌套来定位需要的组织单元,但是从实现上来看,这些组织机构表达式最终是代码中自动解析成SQL语句在系统数据库中执行的,过于复杂的组织机构表达式可能会执行时间长,因此在写组织机构表达式时候要注意组织机构中组织单元的个数以及组织机构表达式的复杂度,最好在模拟环境中建相同规模的组织机构,来测试组织机构表达式的性能。

如果在功能执行中,点击流转按钮到弹出流转对话框需要的时间较长,建议测试一下组织机构表达式的性能。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-19 19:11 , Processed in 0.047312 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表