起步软件技术论坛-X3

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

【结贴】选择人员功能

[复制链接]
发表于 2010-8-25 14:38:28 | 显示全部楼层
我这有个封装好的选择人员的对话框,如果能帮得上忙,可以开放代码,资源共享哈
设计截图见图。
功能就是选择人员,不管左边选择的是部门、岗位还是人员都会在右边带出人员。有两个属性可以获得选取的人员idlist和NameList

1282717961.jpg

37.45 KB, 下载次数: 273

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-25 14:48:11 | 显示全部楼层
请共享下,谢谢
回复 支持 反对

使用道具 举报

发表于 2010-8-25 14:55:36 | 显示全部楼层
窗体的代码:

object SelectPerson: TSelectPerson
  Left = 0
  Top = 0
  BorderStyle = bsDialog
  Caption = #20154#21592#36873#25321
  ClientHeight = 356
  ClientWidth = 539
  Color = clBtnFace
  Font.Charset = GB2312_CHARSET
  Font.Color = clWindowText
  Font.Height = -12
  Font.Name = #23435#20307
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  ShowHint = True
  OnCreate = BizFormCreate
  OnShow = BizFormShow
  PixelsPerInch = 96
  TextHeight = 12
  object OrgTreeView: TOrgTreeView
    Left = 16
    Top = 40
    Width = 200
    Height = 264
    AutoLoad = True
    Indent = 19
    ReadOnly = True
    TabOrder = 0
    TabStop = True
    BizURLs.Strings = (
      '')
    DisplayType = dtDisplayName
    BizOperates = []
  end
  object BitBtn1: TBitBtn
    Left = 232
    Top = 32
    Width = 75
    Height = 25
    Caption = #20840#37096#20998#37197'>>'
    TabOrder = 1
    Visible = False
    OnClick = BitBtn1Click
  end
  object BitBtn2: TBitBtn
    Left = 232
    Top = 72
    Width = 75
    Height = 25
    Caption = #20998#37197'>'
    TabOrder = 2
    OnClick = BitBtn2Click
  end
  object BitBtn3: TBitBtn
    Left = 232
    Top = 184
    Width = 75
    Height = 25
    Caption = '<<'#20840#37096#21462#28040
    TabOrder = 3
    OnClick = BitBtn3Click
  end
  object BitBtn4: TBitBtn
    Left = 232
    Top = 224
    Width = 75
    Height = 25
    Caption = '<'#21462#28040
    TabOrder = 4
    OnClick = BitBtn4Click
  end
  object BitBtn5: TBitBtn
    Left = 144
    Top = 320
    Width = 75
    Height = 25
    Caption = #30830#23450
    ModalResult = 1
    TabOrder = 5
  end
  object BitBtn6: TBitBtn
    Left = 328
    Top = 320
    Width = 75
    Height = 25
    Caption = #21462#28040
    ModalResult = 2
    TabOrder = 6
  end
  object OrgListView: TOrgListView
    Left = 320
    Top = 8
    Width = 208
    Height = 296
    ReadOnly = True
    TabOrder = 7
    TabStop = True
    ViewStyle = vsList
    ColumnOption = [bcDisplayName, bcSize, bcType, bcModifiedTime]
    DisplayType = dtDisplayName
    BizOperates = []
    UseThumbnail = False
    ThumbnailWidth = 0
    ThumbnailHeight = 0
    ExtendInfo.ExtendKind = ekDept
  end
  object EditSearch: TEdit
    Left = 16
    Top = 8
    Width = 136
    Height = 20
    TabOrder = 8
    OnKeyPress = EditSearchKeyPress
  end
  object btnSearch: TSpeedButton
    Left = 168
    Top = 8
    Width = 48
    Height = 22
    Glyph.Data = {
      76010000424D7601000000000000760000002800000020000000100000000100
      04000000000000010000130B0000130B00001000000000000000000000000000
      800000800000008080008000000080008000808000007F7F7F00BFBFBF000000
      FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333
      33033333333333333F7F3333333333333000333333333333F777333333333333
      000333333333333F777333333333333000333333333333F77733333333333300
      033333333FFF3F777333333700073B703333333F7773F77733333307777700B3
      33333377333777733333307F8F8F7033333337F333F337F3333377F8F9F8F773
      3333373337F3373F3333078F898F870333337F33F7FFF37F333307F99999F703
      33337F377777337F3333078F898F8703333373F337F33373333377F8F9F8F773
      333337F3373337F33333307F8F8F70333333373FF333F7333333330777770333
      333333773FF77333333333370007333333333333777333333333}
    NumGlyphs = 2
    OnClick = btnSearchClick
  end
end
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-25 14:57:17 | 显示全部楼层
请您把功能打个包,发上来可以吗
回复 支持 反对

使用道具 举报

发表于 2010-8-25 14:57:40 | 显示全部楼层
单元的代码:

unit SelectPerson;

interface

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

type
  TSelectPerson = class(TForm)
    OrgTreeView: TOrgTreeView;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    OrgListView: TOrgListView;
    EditSearch: TEdit;
    btnSearch: TSpeedButton;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BizFormCreate(Sender: TObject);
    procedure btnSearchClick(Sender: TObject);
    procedure EditSearchKeyPress(Sender: TObject; var Key: Char);
    procedure BizFormShow(Sender: TObject);
  private
    {private declarations}
    lDeptID: string;
    procedure setDeptID(value: string);
    function GetIDResultList: TStringList;
    function GetNameResultList: TStringList;
    procedure SetIDResultList(Value: TStringList);
  public
    {public declarations}
    constructor Create(aDeptID:string); overload;
    property DeptID:string read lDeptID write setDeptID;
    property IDResultList: TStringList read GetIDResultList write SetIDResultList;
    property NameResultList: TStringList read GetNameResultList;
   
   
  end;

implementation
procedure TSelectPerson.setDeptID(value: string);
var
lUrl: TBizUrl;
begin
// lUrl:= TBizUrl.Create;
  try
  if value <> lDeptID then
  begin
    lDeptID:= Value;
    lUrl:= OrgSys.OrgSystem.GetURL(DeptID,'','');
    OrgTreeView.StartWithNodes.Clear;
    OrgTreeView.AddStartWith(lUrl.URL);
    OrgTreeView.ReloadTree;
  end;
  finally
   // lUrl.Free;
  end;
end;

constructor TSelectPerson.Create(aDeptID:string);
begin
  inherited create(Context);
  DeptID:= aDeptID;
end;

procedure TSelectPerson.BitBtn1Click(Sender: TObject);
var
lExpr: string;
begin
  OrgListView.BizURLs.Clear;
  lExpr:='OrgKey('''+ DeptID + ''','''','''')';
  lExpr:= 'OrgChildren(' + lExpr + ',OrgCondition(''*.psm'','''',''''),true)';
  OrgSys.OrgSystem.GetBizURLsByOrgExpr(lExpr,OrgListView.BizURLs);

end;

procedure TSelectPerson.BitBtn2Click(Sender: TObject);
var
  lOrgUnit: TOrgUnit;
  lExpr: string;
  sl: TStrings;
  lBizUrl: TBizUrl;
  i:integer;
begin
if OrgTreeView.SelectionCount = 0 then Exit;
  sl:= TStringList.Create;
  lBizUrl:= TBizUrl.Create;
  try
    sl.Clear;
    lBizUrl.URL:= TOrgNode(OrgTreeView.SelectedNode).ObjectID;
    lOrgUnit:= OrgSys.OrgSystem.GetUnit(lBizUrl);
    case TBizObjectKind(lOrgUnit.OrgKind) of
    TBizObjectKind.boOrgan:  //华大电子
       begin
         lExpr:= 'OrgChildren(OrgSelect(OrgCondition(''*.OGN'',isplayName=''' + lOrgUnit.DisplayName +''','''')),OrgCondition(''*.PSM'','''',''''),True,False)';;
         OrgSys.OrgSystem.GetBizURLsByOrgExpr(lExpr,sl);
       end;
     TBizObjectKind.boDept:  //选中部门
       begin
         lExpr:='OrgKey('''+ lOrgUnit.ID + ''','''','''')';
         lExpr:= 'OrgChildren(' + lExpr + ',OrgCondition(''*.psm'','''',''''),true)';
         OrgSys.OrgSystem.GetBizURLsByOrgExpr(lExpr,sl);
       end;
     TBizObjectKind.boPositionMember:  //选中岗位
       begin
        lExpr:='OrgKey('''+ lOrgUnit.Parent.ID +''','''+ lOrgUnit.ID + ''','''')';
        lExpr:= 'OrgChildren(' + lExpr + ',OrgCondition(''*.psm'','''',''''),true)';
        OrgSys.OrgSystem.GetBizURLsByOrgExpr(lExpr,sl);
       end;
     TBizObjectKind.boPersonMember:  //选中人员
       begin
         sl.Add(TOrgNode(OrgTreeView.SelectedNode).ObjectID);
       end;
    end; //case
    for i:=0 to sl.Count-1 do
    begin
      if OrgListView.BizURLs.IndexOf(sl.Strings)< 0 then
        OrgListView.BizURLs.Add(sl.Strings);
    end;
  finally
    sl.Free;
    lBizUrl.Free;
  end;
end;

procedure TSelectPerson.BitBtn3Click(Sender: TObject);
begin
   OrgListView.BizURLs.Clear;
end;

procedure TSelectPerson.BitBtn4Click(Sender: TObject);
begin
// JsDialogs.ShowMsg(OrgListView.SelectedNode.BizURL.URL,'');
  if OrgListView.SelCount=0 then Exit;
  OrgListView.BizURLs.Delete(OrgListView.BizURLs.IndexOf(OrgListView.SelectedNode.BizURL.URL));
end;

function TSelectPerson.GetIDResultList: TStringList;
var
i: integer;
lOrgUnit: TOrgUnit;
lBizUrl: TBizUrl;
begin
  result:= TStringList.Create;
  result.Clear;
  if OrgListView.BizURLs.Count = 0 then Exit;
  lBizUrl:= TBizUrl.Create;
  try
    for i:=0 to OrgListView.BizURLs.Count - 1 do
    begin
      lBizUrl.URL:= OrgListView.BizURLs.Strings;
      lOrgUnit:= OrgSys.OrgSystem.GetUnit(lBizUrl);
      result.Add(lOrgUnit.ID);
    end;
   finally
     lBizUrl.Free;
   end;
end;

function TSelectPerson.GetNameResultList: TStringList;
var
i: integer;
lOrgUnit: TOrgUnit;
lBizUrl: TBizUrl;
begin
  result:= TStringList.Create;
  result.Clear;
  if OrgListView.BizURLs.Count = 0 then Exit;
  lBizUrl:= TBizUrl.Create;
  try
    for i:=0 to OrgListView.BizURLs.Count - 1 do
    begin
      lBizUrl.URL:= OrgListView.BizURLs.Strings;
      lOrgUnit:= OrgSys.OrgSystem.GetUnit(lBizUrl);
      result.Add(lOrgUnit.DisplayName);
    end;
   finally
     lBizUrl.Free;
   end;
end;

procedure TSelectPerson.SetIDResultList(Value: TStringList);
var
  i: integer;
  PersonList: TStrings;
  s: string;
const
// lExpr = 'OrgChildren(OrgKey('''', '''', ''%s'')  , OrgCondition(''*.psm'', '''', ''''), True, False)';
lExpr = 'OrgCondition(''%s.psm'', '''', '''')';
begin
//  JsDialogs.ShowMsg(value.Text,'设置值');
  PersonList:= TStringList.Create;
  try
    OrgListView.BizURLs.Clear;
    for i:=0 to Value.Count-1 do
    begin
      s:= SysUtils.Format(lExpr,[Value.Strings]);
      PersonList.Clear;
      OrgSys.OrgSystem.GetBizURLsByOrgExpr(s,PersonList);
      if PersonList.Count > 0 then
      OrgListView.BizURLs.Add(PersonList.Strings[0]);
    end;
  finally
     PersonList.Free;
  end;
end;



procedure TSelectPerson.BizFormCreate(Sender: TObject);
begin
    OrgTreeView.StartWithNodes.Clear;
    OrgTreeView.AddStartWith('Org:\ROOT\HED.ogn');
    OrgTreeView.ReloadTree;
    OrgTreeView.Items[0].Expand(False);
end;

procedure TSelectPerson.btnSearchClick(Sender: TObject);
var
// i: integer;
  PersonList: TStrings;
  s: string;
const
  lExpr = 'OrgCondition(''%s.psm'', '''', '''')';
begin
   if SysUtils.Trim(EditSearch.Text) = '' then
   begin
      BizFormCreate(nil);
   end
   else
   begin
     PersonList:= TStringList.Create;
     try
      s:= SysUtils.Format(lExpr,[EditSearch.text]);
      PersonList.Clear;
      OrgSys.OrgSystem.GetBizURLsByOrgExpr(s,PersonList);
      if PersonList.Count > 0 then
      begin
        OrgTreeView.StartWithNodes.Clear;
        OrgTreeView.AddStartWith(PersonList.Strings[0]);
        OrgTreeView.ReloadTree;
        OrgTreeView.Items[0].Expand(False);
      end
      else
      begin
         OrgTreeView.Clear;
      end;
      finally
        PersonList.Free;
      end;
   end;
end;

procedure TSelectPerson.EditSearchKeyPress(Sender: TObject; var Key: Char);
begin
   if key=#13 then
     BtnSearch.Click;
end;

procedure TSelectPerson.BizFormShow(Sender: TObject);
begin
  if IDResultList.Count>0 then
  SetIDResultList(IDResultList);
end;

end.
回复 支持 反对

使用道具 举报

发表于 2010-8-25 15:01:33 | 显示全部楼层
因为这个窗体是建在一个资源集下面,这个资源集里还有好多别的代码,不太方便打包
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-25 15:05:26 | 显示全部楼层
谢谢 zfang    可以结贴了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-25 16:24:23 | 显示全部楼层
还有个问题,我显示组织机构树时,从组织机构开始下面都显示,就是不显示组织模型,如何设置?
回复 支持 反对

使用道具 举报

发表于 2010-8-25 17:55:48 | 显示全部楼层
应该不行。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-7 06:53 , Processed in 0.046545 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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