起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 725|回复: 23

【结贴】数据集策略的问题**

[复制链接]
发表于 2009-4-18 13:15:56 | 显示全部楼层 |阅读模式
“业务员”字段自动填充操作者编号,业务员进系统就能看到自己所填单据的策略好实现。
请问,现在想让主管(业务员的上级)可以看到其手下所有业务员所填的单据,怎么使用策略来实现?
回复

使用道具 举报

发表于 2009-4-18 14:00:27 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-20 17:02:11 | 显示全部楼层
ResultUrls.Add(lSubs[0]);  这个怎么理解,感觉有点模糊,是增加什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-27 14:06:42 | 显示全部楼层
function TRYXX.GetSubordinations: TStrings;
var
  i : integer;
  s : string;
  lOperator : TOPerator;
  lPersonMember: TOrgUnit;
  lSubs : TStrings;
  ResultUrls :Tstrings;
begin
  ResultUrls:=TStringlist.Create;//隐式向上转型
  try
    lOperator := TContextUtils.GetOperator(Context);//取出操作者
    for i := 0 to lOperator.PositionCount-1 do //取出操作者所属岗位
      begin
        lPersonMember := lOperator.Positions.PersonMember;//取出所属岗位对应的人员成员
        lSubs := GetSubordinations(lPersonMember);//取出该人员成员对应的管理权限
        {1
        if lSubs.Count = 1 then
          if ResultUrls.IndexOf(lSubs[0]) < 0 then
            ResultUrls.Add(lSubs[0]);
        if lSubs.Count > 1 then
          ResultUrls.AddStrings(lSubs);}
        {2}
        ResultUrls.AddStrings(lSubs);
        lSubs.Free;
      end;
  finally
    {2}
    for i := ResultUrls.Count-1 downto 0 do
       begin   //取出人员成员截取后四位并大写
        s := SysUtils.UpperCase(StringUtils.Copy(ResultUrls, Length(ResultUrls)-3, 4));
        if (ResultUrls.Count > 1) and (s = '.PSM') then
          ResultUrls.Delete(i);
      end;
    Result := ResultUrls;
  end;
end;

这个是上面链接里的一段代码,标题是“[分享] 按照管理权限过滤下属数据”,能对这个进行一个详细点的说明吗?函数返回的是当前操作者对应的所有管理权限的URLS数组ResultUrls (不知这么理解是否正确),然后需要怎么去用这个取得的管理权限控制数据呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-27 14:41:27 | 显示全部楼层
1、根据当前登录者取他管理的组织单元
http://bbs.justep.com/forum.php?mod=viewthread&tid=13268

2、根据1的结果,使用组织机构表达式取得属于这些单元的人员成员Bizurl,在bizurl中有人员ID的信息

3、根据这些ID的信息,组织sql的条件表达式
这是一个思路,请指教第二步是怎么实现,我想这个权限是大家经常会用到的,如果能给一个具体的从头至尾的实例,最好,请求支援啊。
回复 支持 反对

使用道具 举报

发表于 2009-4-27 14:47:20 | 显示全部楼层
最初由 icemei 发布
[B]ResultUrls.Add(lSubs[0]);  这个怎么理解,感觉有点模糊,是增加什么? [/B]


向返回值中添加下属bizurl
有可能是部门、岗位或者人员成员
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-27 15:38:27 | 显示全部楼层
期待对NO.5的回答
回复 支持 反对

使用道具 举报

发表于 2009-4-27 15:47:50 | 显示全部楼层
楼主,表达式的设计可以参考:
OrgChildren(OrgKey('JUSTEP', '', ''), OrgCondition('*.psm', '', ''), True, True),其中OrgKey('JUSTEP', '', '')要替换成1中得到的下属组织单元

表达式的使用,请参考:
http://bbs.justep.com/forum.php?mod=viewthread&tid=24763
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-28 16:35:22 | 显示全部楼层
请问一下下面这个函数怎么调用及展示出结果来,怎么定义传参时的组织单元?

function TRCCS.GetSubordinations(APersonMember: TOrgUnit): TStrings;
var
  lOrgUnit : TOrgUnit;
  lOrgSubordinationItems : TOrgSubordinationItems;
  i : integer;
  ResultUrls : TStrings;
begin
  ResultUrls := TStringList.Create;
  lOrgSubordinationItems := TOrgSubordinationItems.Create;//定义TOrgSubordinationItems对象,里面存储一个下属列表
  try
    OrgSys.OrgSystem.GetAllSubordinationItems(APersonMember, lOrgSubordinationItems);
    if lOrgSubordinationItems.Count > 0 then
      for i := 0 to lOrgSubordinationItems.Count-1 do
        begin
          lOrgUnit := OrgSys.OrgSystem.FindUnit(lOrgSubordinationItems.DeptID,
            lOrgSubordinationItems.PositionID, lOrgSubordinationItems.PersonID);
          ResultUrls.Add(lOrgUnit.BizUrl.URL);
        end
    else
      ResultUrls.Add(APersonMember.BizUrl.URL);
  finally
    lOrgSubordinationItems.Free;
    Result := ResultUrls;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2009-4-28 16:39:00 | 显示全部楼层
传入一个TOrgUnit对象,返回一个TStrings对象,包含了TOrgUnit下属bizurl
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-21 16:00 , Processed in 0.052114 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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