起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: alang

[分享]组织机构表达式

[复制链接]
 楼主| 发表于 2008-7-30 14:47:34 | 显示全部楼层

代码中使用组织机构表达式

在代码中调用 Business.Model.Org.OrgSys.OrgSystem 的方法来计算组织机构表达式
  //计算组织机构表达式,得到符合条件的组织单元的OrgURL
  procedure GetOrgURLsByOrgExpr(AExpr: string; AOrgURLs: TOrgURLs);
  //计算组织机构表达式,得到符合条件的组织单元的BizURL
  procedure GetBizURLsByOrgExpr(AExpr: string; ABizURLs: Business.System.TStrings);
两个函数的计算都是一样的,只是返回结果的表现形式不一样了,一个是BizURL,一个是OrgURL。
var
  i: Integer;
  lOrgURLs: TOrgURLs;
begin
  memResult.Lines.Add('');
  memResult.Lines.Add('表达式:'+AExpr);
  lOrgURLs := TOrgURLs.Create;
  try
    try
      OrgSys.OrgSystem.GetOrgURLsByOrgExpr(AExpr, lOrgURLs);
      if lOrgURLs.Count=0 then
        memResult.Lines.Add('没有符合表达式条件的结果!')
      else
        memResult.Lines.Add(SysUtils.Format('共 %d 个', [lOrgURLs.Count]));
      for i:=0 to lOrgURLs.Count-1 do
        memResult.Lines.Add(SysUtils.Format('kind=%s%sBizURL=%s', [GetBizObjectKindStr(lOrgURLs.Kind), #9, lOrgURLs.BizURL.URL]));
    except
      on E: Exception do
        memResult.Lines.Add('执行出错:'+E.Message);
    end;
  finally
    lOrgURLs.Free;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-30 14:51:44 | 显示全部楼层
代码中计算组织机构表达式时候,表达式是一个字符串,拼写这个字符串时候会经常需要写很多个单引号('),很容易写错,而且也不易读,在Business.Model.Org.OrgExpr单元中定义了若干个函数来拼写这个组织机构表达式。
  static function OrgChildren(ARange: string; AChildrenCondition: string; AIncludeAll: Boolean): string; overload;
  static function OrgChildren(ARange: string; AChildrenCondition: string; AIncludeAll: Boolean; AIncludeSelf: Boolean): string; overload;
  static function OrgCondition(AMatchFileName: string; AMatchAttribute: string; AMatchIndex: string): string;
  static function OrgFamily(ARange: string; AFamilyCondition: string; AIncludeAll: Boolean): string;
  static function OrgKey(ADeptID: string; APositionID: string; APersonID: string): string;
  static function OrgManager(ARange: string; AKind: string): string;
  static function OrgParent(ARange: string; AParentCondition: string; AIncludeAll: Boolean): string; overload;
  static function OrgParent(ARange: string; AParentCondition: string; AIncludeAll: Boolean; AIncludeSelf: Boolean): string; overload;
  static function OrgSelect(AMatchFileName: string; AMatchAttribute: string; AMatchIndex: string): string; overload;
  static function OrgSelect(AOrgCondition: string): string; overload;
  static function OrgSubordination(ARange: string; AKind: string): string;
  static function OrgWorkGroup(ARange: string): string;
  static function OrgWorkGroupMember(ARange: string): string;

例如:
直接用字符串
  lExpr := 'OrgKey(''XSB'', '''', '''')';
如果用OrgExpr的函数
  lExpr := OrgExpr.OrgKey('XSB, '', '');
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-30 15:20:01 | 显示全部楼层

未公开的秘密

以下两个函数在目前版本可以支持,但是属于未公开的秘密,不保证以后版本可以支持
OrgKeys('a')  只有一个参数,参数值可以任意写,返回整个组织模型
OrgURLs('Org:\ROOT\YGJT.OGN\JLS.dpt') 只有一个参数,值为组织单元的BizURL,返回这个BizURL对应的组织单元
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-19 19:08 , Processed in 0.039611 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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