起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 353|回复: 11

【结贴】获取岗位成员的所有成员问题

[复制链接]
发表于 2009-9-1 16:12:37 | 显示全部楼层 |阅读模式
假如1个部门有2个岗位成员,现在通过动态获取岗位成员,然后再依此获取该岗位成员的所有成员,但筛选的结果怎么会是2个岗位的所有成员?而不是单单显示动态获取的那个岗位的所有成员呢?
回复

使用道具 举报

 楼主| 发表于 2009-9-1 16:17:43 | 显示全部楼层
代码如下

static procedure TRWFP.GetOrgUnitID(const AOrgURL: string;
  const AOrgKind: TBizObjectKind; var AID: string);
var
  lURLs: TStrings;
  I: integer;
  lURL: string;
  lKind: TBizObjectKind;
begin
  lURLs := TStringList.Create;
  try
    FileSys.FileUtils.ExpandFileList(AOrgURL, lURLs);
    for I := 0 to lURLs.Count - 1 do
    begin
      lURL := lURLs[I];
      lKind := BizSys.BizSystem.GetObjectKind(lURL);
      if lKind = AOrgKind then
      begin
        AID := FileSys.FileUtils.GetFileNameNoExt(lURL);
        Break;
      end;
    end;
  finally
    lURLs.Free;
  end;
end;

{ 获取指定岗位成员ID下的所有人员成员 }
static procedure TRWFP.GetAllPersonMemberURLsByDept(ADeptID: string;
  APersonMemberURLs: TStrings);
var
  lOrgExpr: string;
  lOrgURLs: TStrings;
begin
  lOrgURLs := TStringList.Create;
  try
    lOrgExpr := 'OrgChildren(OrgKey(''%s'', '''', ''''), OrgCondition(''*.PSM'', '''', ''''), True, False)';
    OrgSys.OrgSystem.GetBizURLsByOrgExpr(SysUtils.Format(lOrgExpr, [ADeptID]), lOrgURLs);

    APersonMemberURLs.AddStrings(lOrgURLs);
  finally
    lOrgURLs.Free;
  end;
end;

procedure TRWFP.showp();//筛选岗位成员的全部人员
var
  lOrgUnit :TOrgUnit;
  lBizUrl :TBizURl;
  i:integer;
  id,c:string;//a c
  strs:Tstrings;//b 定义一个Tstrings
  bm:string;//岗位成员名称
begin
  id:='';
  c:='';
  if not DataSetJYDB.Eof then //有数据时
  begin
    if DataSetJYDB.FieldByName('ZYKS').AsString <> ''then
    begin
      ComboBox1.Items.Clear;
      ComboBox2.Items.Clear;
      ComboBox3.Items.Clear;
      bm:=DataSetJYDB.FieldByName('ZYKS').AsString;
      strs:=TStringlist.create;
      Org.OrgSys.OrgSystem.GetBizURLsByOrgExpr('OrgCondition(''*.PTM'', :displayname='''+bm+''', '''')',strs);//生成岗位成员ID的url
      try
        for i := 0 to strs.Count - 1 do
        begin
          c := strs;//
        end;
        TRWFP.GetOrgUnitID(c,TBizObjectKind.boDept,id); //调用 指定的 OrgURL , 得到指定类型节点ID的函数
        TRWFP.GetAllPersonMemberURLsByDept(id,ComboBox1.Items);{ 获取指定岗位成员ID下的所有人员成员 }
      finally
        lBizUrl.Free;
      end;
      { 把URL转为中文显示 }
      lBizUrl :=TBizUrl.Create;
      try
        for  i:=0 to ComboBox1.Items.Count-1 do
        begin
          lBizUrl.URL :=ComboBox1.Items.ToString;
          lOrgUnit :=org.OrgSys.OrgSystem.GetUnit(lBizURL);
          ComboBox2.Items.Add(lOrgUnit.DisPlayName);
          ComboBox3.Items.Add(lOrgUnit.DisPlayName);
        end;
        //ComboBox2.ItemIndex :=0;
        //ComboBox3.ItemIndex :=0;
      finally
        lBizUrl.Free;
      end;
    end
    else
    begin
      ComboBox2.Items.Clear;
      ComboBox3.Items.Clear;
    end;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2009-9-1 16:30:12 | 显示全部楼层
楼主你是在那里动态获取的那个岗位的?
上面的代码就是获取某个部门下面的所有人员成员
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-1 16:37:28 | 显示全部楼层
哈?还是获取部门的?
这个是我原来获取部门的所有成员~现在我想改为获取岗位成员的所有成员
不是改这句代码就可以了吗?
原来获取部门的:
Org.OrgSys.OrgSystem.GetBizURLsByOrgExpr('OrgCondition(''*.DPT'', :displayname='''+bm+''', '''')',strs);
修改后:
Org.OrgSys.OrgSystem.GetBizURLsByOrgExpr('OrgCondition(''*.PTM'', :displayname='''+bm+''', '''')',strs);
如果不是要怎么修改才能实现呢?望赐教
回复 支持 反对

使用道具 举报

发表于 2009-9-1 16:48:45 | 显示全部楼层
TRWFP.GetOrgUnitID(c,TBizObjectKind.boDept,id);
这个TBizObjectKind.boDept不对吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-1 17:13:05 | 显示全部楼层
BizObjectKind 枚举值吧
那应该怎么改??
回复 支持 反对

使用道具 举报

发表于 2009-9-1 17:57:59 | 显示全部楼层
BizObjectKind 你自己点一下就能看到了
好像是bopositionmember
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-2 08:56:29 | 显示全部楼层
改了之后筛选不出对应的全部成员出来
回复 支持 反对

使用道具 举报

发表于 2009-9-2 09:10:18 | 显示全部楼层
请楼主先看看这里的逻辑吧。这儿的循环有意义吗?其他的不对请楼主自己跟踪调试一下吧。

      try
[B]        for i := 0 to strs.Count - 1 do
        begin
          c := strs;//
        end;[/B]
        TRWFP.GetOrgUnitID(c,TBizObjectKind.boDept,id); //调用 指定的 OrgURL , 得到指定类型节点ID的函数
        TRWFP.GetAllPersonMemberURLsByDept(id,ComboBox1.Items);{ 获取指定岗位成员ID下的所有人员成员 }
      finally
        lBizUrl.Free;
      end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-2 09:17:25 | 显示全部楼层
for i := 0 to strs.Count - 1 do
        begin
          c := strs;//
        end;
这个循环只是把Tstring 转为String的笨方法而已  
没影响到筛选成员的吧
获取部门全部成员就没问题 换了获取岗位成员的全部成员就筛选不出
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-17 03:22 , Processed in 0.038903 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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