起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: liubin

【结贴】选择人员功能

[复制链接]
发表于 2010-8-24 16:26:07 | 显示全部楼层
参考上面连接的例子试试就可以了。你看我 做的一个简单测试:

1、做一个功能,然后把下面部分拷贝,直接粘贴到主窗体 界面上即可
object BizTreeView1: TBizTreeView
  Left = 8
  Top = 8
  Width = 272
  Height = 360
  AutoLoad = False
  Indent = 19
  TabOrder = 0
  TabStop = True
  DisplayType = dtDisplayName
  BizOperates = []
end
object Button1: TButton
  Left = 296
  Top = 336
  Width = 75
  Height = 25
  Caption = #36733#20837#26641
  TabOrder = 1
  OnClick = Button1Click
end
object ListBox1: TListBox
  Left = 296
  Top = 16
  Width = 288
  Height = 272
  ItemHeight = 12
  TabOrder = 2
end
object Button2: TButton
  Left = 384
  Top = 336
  Width = 75
  Height = 25
  Caption = #36873#25321
  TabOrder = 3
  OnClick = Button2Click
end


2、代码部分
unit MainForm;

interface

uses
  Business.System, Business.Forms, Business.Model;

type
  TMainForm = class(TForm)
    BizTreeView1: TBizTreeView;
    Button1: TButton;
    ListBox1: TListBox;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure BizFormCreate(Sender: TObject);
    procedure BizFormDestroy(Sender: TObject);
  private
    {private declarations}
    FNodes: TStrings;
  public
    {public declarations}
  end;

implementation


procedure TMainForm.Button1Click(Sender: TObject);
begin
  BizTreeView1.ShowOptions := [TBizObjectKind.boOrgServer, TBizObjectKind.boOrgRoot,
                               //TBizObjectKind.boPositionRoot,
                               //TBizObjectKind.boPersonRoot,
                               TBizObjectKind.boOrgan,
                               TBizObjectKind.boDept,
                               TBizObjectKind.boPositionMember,
                               TBizObjectKind.boPersonMember];
  BizTreeView1.ReloadTree;
end;

procedure TMainForm.Button2Click(Sender: TObject);
var
  lBizNode : TBizNode;
  lNode : TBaseNode;
  i : Integer;
begin
  lBizNode := BizTreeView1.SelectedNode;
  if lBizNode <> nil then
  begin
    //FNodes.AddObject(lBizNode.BizURL.URL, lBizNode);
    BizTree.BizTreeStructure.GetChildrenByKindsString(lBizNode.GUID,FNodes,True,'.psm');


    Dialogs.ShowMessage(lBizNode.ObjectKind);
    for i := 0 to FNodes.Count - 1 do
    begin
      //ListBox1.Items.Add(FNodes);
      lNode := BizTree.BizTreeStructure.FindNode(FNodes);
      if lNode <> nil then
        ListBox1.Items.Add(lNode.DisplayName);
    end;
  end;
end;

procedure TMainForm.BizFormCreate(Sender: TObject);
begin
  FNodes := TStringList.Create;
end;

procedure TMainForm.BizFormDestroy(Sender: TObject);
begin
  FreeAndNil(FNodes);
end;

end.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-25 08:22:59 | 显示全部楼层
执行这句话  BizTree.BizTreeStructure.GetChildrenByKindsString(lBizNode.GUID,FNodes,True,'.psm'); 出错

---------------------------
X3 Studio
---------------------------
运行业务功能13的时候发生异常:Access violation at address 01A829EC in module 'BizLib.bpl'. Read of address 00000000类型:EAccessViolation。
---------------------------
确定   
---------------------------
回复 支持 反对

使用道具 举报

发表于 2010-8-25 09:33:32 | 显示全部楼层
我这边这么运行是可以的,上面的代码仅仅是一个 参考,具体的还请楼主你结合实际再做修改。

录像6.rar

436.04 KB, 下载次数: 76

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-25 10:13:27 | 显示全部楼层
lNode.GUID 是得到哪张表的GUID   我想取得人的登录ID,可以直接取得吗
回复 支持 反对

使用道具 举报

发表于 2010-8-25 10:39:29 | 显示全部楼层
可以的,你这样简单做一下改造(不过这里会把 .psm带出,即类似于 ry1.psm,还需要简单做一下处理)
procedure TMainForm.Button2Click(Sender: TObject);
var
  lBizNode,lNode : TBizNode;
  lNode1 : TBaseNode;
  i : Integer;
begin
  lBizNode := BizTreeView1.SelectedNode;
  if lBizNode <> nil then
  begin
    //FNodes.AddObject(lBizNode.BizURL.URL, lBizNode);
    BizTree.BizTreeStructure.GetChildrenByKindsString(lBizNode.GUID,FNodes,True,'.psm');


    Dialogs.ShowMessage(lBizNode.ObjectKind);
    for i := 0 to FNodes.Count - 1 do
    begin
      //ListBox1.Items.Add(FNodes);

      lNode := TBizNode(BizTree.BizTreeStructure.FindNode(FNodes));
      if lNode <> nil then
      begin
        Dialogs.ShowMessage( lNode.ID);//就是这里 看他输出的内容
        ListBox1.Items.Add(lNode.DisplayName);
      end;
    end;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-25 10:58:52 | 显示全部楼层
for i := 0 to FNodes.Count - 1 do
组织机构上显示6个人,添加出来7个人,是不是有把组织机构上不显示的人员也添加上了,如何避免这个?
应该是该节点有数据,但是是删除后的
回复 支持 反对

使用道具 举报

发表于 2010-8-25 11:01:45 | 显示全部楼层
你贴图看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-25 11:06:42 | 显示全部楼层
我觉得是:,例如 部门A, 岗位A 下 有 3个人员, 删除1个人员后, 组织机构上只显示2个人员,但数据库里还是3条记录,所以 出现楼上的情况
回复 支持 反对

使用道具 举报

发表于 2010-8-25 11:32:25 | 显示全部楼层
按你的猜测,我试了一下,没你说的情况

录像1.rar

547.75 KB, 下载次数: 84

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-25 14:11:44 | 显示全部楼层
lBizNode := BizTreeView1.SelectedNode;
  if lBizNode <> nil then
  begin
    //FNodes.AddObject(lBizNode.BizURL.URL, lBizNode);
    BizTree.BizTreeStructure.GetChildrenByKindsString(lBizNode.GUID,FNodes,True,'.psm');


    Dialogs.ShowMessage(lBizNode.ObjectKind);
    for i := 0 to FNodes.Count - 1 do
    begin
      //ListBox1.Items.Add(FNodes);
      lNode := BizTree.BizTreeStructure.FindNode(FNodes);
      if lNode <> nil then
        ListBox1.Items.Add(lNode.DisplayName);
    end;
  end;
如果你选择到最底层的人员,如何添加?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-7 11:56 , Processed in 0.041613 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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