起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 3012|回复: 14

【分享】组织机构表达式说明与常用的例子

[复制链接]
发表于 2004-4-1 18:08:47 | 显示全部楼层 |阅读模式
组织机构表达式的说明

一、        组织机构表达式的意义:
通常,查找组织单元只能靠底层提供的各种函数、方法。这种做法带来的是如:提供的这些函数和方法能力远远不能达到用户的需求、组织机构的底层是在枚举用户有可能的使用方式、取到的组织单元不能方便的参与业务运算(如:参与业务表达式)等等问题。为了只解决这一系列的问题,同时也为了给用户提供一个可操作性,可扩展性更好的组织机构系统,提出了组织机构表达式。
二、组织机构表达式的概念
1、        组织机构表达式
组织机构表达式就是通过表达式的方式来指定组织单元的范围和条件从而得到组织单元。组织机构表达式可以嵌入到业务表达式中。它主要就是由组织机构表达式函数和组织机构表达式原子构成。
2、        组织机构表达式原子
    组织机构表达式原子就是OrgCondition,它是用来定义查找条件的,是组织机构表达式的最小组成单位。OrgCondition有三个参,OrgCondition(文件条件,属性条件,索引条件),三个参数不能同时为空。原子不能独立使用,它必须配合函数使用。原子之间可以进行逻辑运算,如:OrgCondition('*.PSM', '', '') or OrgCondition('*.PSN', '', '')
3、        函数
在组织机构表达式是中用来做范围限制的,在解释函数之前有两个概念需要解释即:组织机构范围表达式和组织机构条件表达式。
4、        组织机构范围表达式:
它就是一个组织机构表达式。用来限定组织单元范围。
5、        组织机构条件表达式:
它是由N个原子组成的条件表达式。用来限定条件范围。
    构成组织机构表达式的函数有:OrgKey、OrgSelect、OrgParent、OrgChildren、OrgFamily。
(1)OrgKey:
它通过部门ID,岗位ID,人员ID确定一个唯一的组织单元。OrgKey的格式是:OrgKey(部门ID,岗位ID,人员ID),三个参数不能同时都为空。如:查找部门ID为'BM1'的组织单元,表达式为:OrgKey('BM1', '', '')
(2)OrgSelect
查找符合条件的组织单元。OrgSelect的格式是:OrgSelect(组织机构条件表达式),其中“组织机构条件表达式”代表要查找符合哪些条件的组织单元,在函数OrgSelect中“组织机构条件表达式”不能为空。如:查找所有人员成员,表达式为:OrgSelect(OrgCondition('*.PSM', '', ''))。
(3)OrgChildren
查找组织单元的子。OrgChildren的格式是:OrgChildren(组织机构范围表达式,组织机构条件表达式,是否取所有子),其中“组织机构范围表达式”代表要查找哪些组织单元的子(查找谁的子),在函数OrgChildren中“组织机构范围表达式”不能为空。“组织机构条件表达式”要查找符合哪些条件的子(子要满足哪些条件),在函数OrgChildren中“组织机构条件表达式”可以为空。“是否取所有子”是一个值只能为True或者False的参数,当值为True是代表要取所有的子,反之当值为False时只取直接的子(第一层子)。如:查找BM1下的所有的人员成员,表达式为:OrgChildren(OrgKey('BM1', '', ''), OrgCondition('*.PSM', '', ''), True)
(4)OrgParent
查找组织单元的父。OrgParent的格式是:OrgParent(组织机构范围表达式,组织机构条件表达式,是否取所有父),其中“组织机构范围表达式”代表要查找哪些的组织单元的父(查找谁的父),在函数OrgParent中“组织机构范围表达式”不能为空。“组织机构条件表达式”要查找符合哪些条件的父(父要满足哪些条件)在函数OOrgParent中“组织机构条件表达式”可以为空。“是否取所有父”是一个值只能为True或者False的参数,当值为True是代表要取所有的父,反之当值为False时只取直接的父(第一层父)。如:查找BM1的上的所有部门,表达式为:OrgParent(OrgKey('BM1', '', ''), OrgCondition('*.DPT', '', ''), True)
(5)OrgFamily
查找组织单元相关的单元(相关单元包括父、子和自己)。OrgFamily的格式是:OrgFamily(组织机构范围表达式,组织机构条件表达式,是否取所有)。其中“组织机构范围表达式”代表要查找哪些组织单元相关的单元(查找谁的相关单元)。“组织机构条件表达式”代表查找符合哪些条件的相关单元(相关单元要满足哪些条件)。“是否取所有”是一个值只能为True或者False的参数,当值为True时代表要取所有的父相关单元(所有的父、所有的子和自己),反之当值为False时只取直接的相关单元(直接父,直接子和自己)。如:查找BM1的所有相关单元OrgFamily(OrgKey('BM1', '', ''), '', True)
6、        组织机构表达式的多个函数之间可以进行逻辑运算,
如:查找所有的人员成员或者BM1,表达式为:OrgKey('BM1', '', '') or OrgSelect(OrgCondition('*.PSM', '', ''))

三、组织机构表达式在业务流程中的使用

   当组织机构表达式在流程中使用作为任务执行者表达式的时候,在组织机构表达式函数的基础上流程扩充了查找任务执行者的函数,这些扩充的函数只能在流程中使用,它们包括:GetProcUnitExecutor、
GetProcUnitExecutorPositionMember、
GetProcUnitExecutorPosition、
GetProcUnitExecutorDept、
GetProcUnitExecutorWorkGroup、
GetProcUnitExecutorOrgan。
   注意,以下函数中用到的执行者表示真正执行任务的人。
1、        GetProcUnitExecutor
查找环节的执行者,它的格式是:GetProcUnitExecutor(环节ID),其中“环节ID”代表要查找哪个环节的执行者。
2、        GetProcUnitExecutorPositionMember
查找环节执行者所属的岗位成员,它的格式是GetProcUnitExecutorPositionMember环节ID,是否包含子),其中是否包含子是一个值只能为True或者False的参数,当只为时代表查找环节执行者所属的岗位成员下的人员成员,反之为时代表仅仅只是查找岗位成员本身。
3、        GetProcUnitExecutorPosition
查找环节执行者所属的岗位,它的格式是GetProcUnitExecutor(环节ID,是否包含子),参数“是否包含子”代表是否是查找岗位下的组织单元。
4、        GetProcUnitExecutorDept
查找环节执行者所属的部门,它的格式是GetProcUnitExecutorDept环节ID,是否包含子),参数“是否包含子”代表否是查找岗位下的组织单元。
5、        GetProcUnitExecutorWorkGroup
查找环节执行者所属的工作组,它的格式是GetProcUnitExecutorWorkGroup环节ID,是否包含子),参数“是否包含子”代表是否是查找工作组下的组织单元。
6、        GetProcUnitExecutorOrgan
查找环节执行者所属的部门机构,它的格式是GetProcUnitExecutorOrgan环节ID,是否包含子),参数“是否包含子”代表是否是查找机构下的组织单元。
回复

使用道具 举报

发表于 2004-4-1 20:08:42 | 显示全部楼层
条件表达式只能用原子 OrgCondition 或者原子的and/ or运算 来表示
回复 支持 反对

使用道具 举报

发表于 2004-4-3 11:07:47 | 显示全部楼层
这是一个组织机构表达式的计算器,可以计算组织机构表达式,因为这是一个单独的功能没有在流程中,象GetProcUnitExecutor类的表达式请用OrgKey()来代替

OrgExprCalculator.rar

3.82 KB, 下载次数: 357

回复 支持 反对

使用道具 举报

发表于 2004-4-3 11:41:34 | 显示全部楼层
以下是常用的组织机构表达式:

1。所有具有某个功能的组织单元
OrgSelect(OrgCondition('','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func'))

2。所有具有某个功能的人员成员
OrgChildren(OrgSelect(OrgCondition('','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func')), OrgCondition('*.psm', '', ''), True) or OrgSelect(OrgCondition('*.psm','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func'))

3。所有名称为“总经理”的岗位成员
OrgSelect(OrgCondition('*.PTM',isplayName='总经理',''))

4。环节“fun_CPDG”执行者所在部门的父部门的“财务部”
OrgChildren(OrgParent(GetProcUnitExecutorDept('fun_CPDG', False), '', False), OrgCondition('*.DPT', isplayName='财务部',''), True)
回复 支持 反对

使用道具 举报

发表于 2004-4-3 12:02:50 | 显示全部楼层
组织机构表达式中用到的扩展名

.ORG  机构
.DPT  部门
.PTM  岗位成员
.PTN  岗位
.PSM  人员成员
.PSN  人员
.WGP  工作组
回复 支持 反对

使用道具 举报

发表于 2004-4-5 11:44:42 | 显示全部楼层
没有定义执行规则的环节的缺省执行者为
1。所有拥有此功能权限的人员成员
2。所有拥有此功能权限的单元的子并且是人员成员

OrgSelect(OrgCondition('*.PSM', '', '')) and (OrgSelect(OrgCondition('','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func')) or OrgChildren(OrgSelect(OrgCondition('','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func')), '', True))
回复 支持 反对

使用道具 举报

发表于 2004-4-6 14:01:09 | 显示全部楼层
上次给的拥有 某个功能的所有人员成员 的表达时
OrgChildren(OrgSelect(OrgCondition('','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func')),OrgCondition('*.psm','',''), True)
是错误的。这样得不到功能直接分配到人员成员上的情况。
因此,可以写为
OrgChildren(OrgSelect(OrgCondition('','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func')), OrgCondition('*.psm', '', ''), True) or OrgSelect(OrgCondition('*.psm','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func'))


OrgSelect(OrgCondition('*.psm','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func'))
表示所有分配了这个功能的人员成员

OrgChildren(OrgSelect(OrgCondition('','',:OrgUnit.FuncRef = '\JUSTEPDEMOSYSTEM\fun_CPDG.Func')), OrgCondition('*.psm', '', ''), True)
表示所有分配了这个功能的组织单元的 类型为人员成员的子
回复 支持 反对

使用道具 举报

发表于 2004-4-6 16:10:46 | 显示全部楼层
顶起来!
回复 支持 反对

使用道具 举报

发表于 2004-4-6 19:20:33 | 显示全部楼层
用6楼的表达式也可以
回复 支持 反对

使用道具 举报

发表于 2004-4-9 14:00:42 | 显示全部楼层
这个共享不错,俺也顶一下^_^
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 04:57 , Processed in 0.043333 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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