起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 892|回复: 6

【结帖】x3_3088版本,组织机构的调整

[复制链接]
发表于 2008-10-6 10:06:59 | 显示全部楼层 |阅读模式
http://bbs.justep.com/forum.php?mod=viewthread&tid=25031
具体问题见上面链接

问:如何通过代码将"分配操作权限"的新建部门,新建岗位等权限赋给“岗位”

未命名.jpg

84.55 KB, 下载次数: 198

回复

使用道具 举报

发表于 2008-10-6 11:53:58 | 显示全部楼层
操作权限分配到岗位上,应该是成功的。
问题出在“组织机构设计器”没有正确识别该权限。
这个缺陷已经提交了,解决后会通知楼主。
回复 支持 反对

使用道具 举报

发表于 2008-10-6 15:01:20 | 显示全部楼层

??急,急。。。 。。。

那如何写代码让“组织机构设计器”正确识别该权限??用户急着用这个功能点!
回复 支持 反对

使用道具 举报

发表于 2008-10-6 15:07:28 | 显示全部楼层
您暂时先把权限分配到岗位成员上吧,后续版本会解决这个问题的。
回复 支持 反对

使用道具 举报

发表于 2008-10-6 15:29:09 | 显示全部楼层
或者,直接修改系统的脚本:
"业务模型\系统空间\系统功能\组织机构\组织机构资源库"这个库源文件中
static procedure TCommonFunc.GetOperaters(AContext: TContext; ABroker: TOperationBroker; AList: TStrings);
var
  I, J, K: Integer;
  lOrgUnit: TOrgUnit;
  lList: TList;
  lOprPolicy: TOperationPolicy;
  lRealOperURLs, lPsms: TStrings;
  lOperator: TOperator;
begin
  lList := TList.Create;
  lRealOperURLs := TStringList.Create;
  lPsms := TStringList.Create;
  try
    TStringList(lRealOperURLs).Duplicates := TDuplicates.dupIgnore;
    for I := 0 to ABroker.Operations.Count - 1 do
      lRealOperURLs.Add(ABroker.Operations[I].URL);

    lOrgUnit := TContextUtils.FindPersonMember(AContext);
    if not Assigned(lOrgUnit) then
    begin
      lOperator := TContextUtils.FindOperator(AContext);
      if SysUtils.SameText(lOperator.ID, 'System') then
      begin
        for I := 0 to lRealOperURLs.Count - 1 do
          AList.Add(lRealOperURLs[I]);
        Exit;
      end else
        lOrgUnit := lOperator.DefaultPosition.PersonMember;
    end;

    while Assigned(lOrgUnit) do
    begin
      lList.Clear;
      lOrgUnit.Module.GetOperationPolicy(lList);
      if lOrgUnit.OrgKind = TBizObjectKind.boPositionMember then
        with Org.OrgSys.OrgSystem.FindPosition(lOrgUnit.ID).Module do
          GetOperationPolicy(lList);
      for I := 0 to lList.Count - 1 do
      begin
        lOprPolicy := TOperationPolicy(lList[I]);
        if SysUtils.SameText(lOprPolicy.Name, SysSQLConst.cFixOperationPolicyName) then
        begin
          for J := 0 to lOprPolicy.Operations.Count - 1 do
            if lRealOperURLs.IndexOf(lOprPolicy.Operations[J].URL) <> -1 then
              AList.Add(lOprPolicy.Operations[J].URL);
        end;
      end;
      lOrgUnit := lOrgUnit.Parent;
    end;
  finally
    lPsms.Free;
    lRealOperURLs.Free;
    lList.Free;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2008-10-6 15:29:55 | 显示全部楼层
增加了对岗位权限的处理:

if lOrgUnit.OrgKind = TBizObjectKind.boPositionMember then
        with Org.OrgSys.OrgSystem.FindPosition(lOrgUnit.ID).Module do
          GetOperationPolicy(lList);
回复 支持 反对

使用道具 举报

发表于 2008-10-9 16:40:11 | 显示全部楼层

结帖

结帖
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-2-5 17:55 , Processed in 0.039201 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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