起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 254|回复: 12

【结贴】根据人员ID设置TCheckBizTreeView中对应节点的Checked属性的问题**

[复制链接]
发表于 2009-2-4 17:06:21 | 显示全部楼层 |阅读模式
业务要求:根据传入的人员ID设置组织机构树中对应的人员节点为勾选。
平台版本:2827
问题:以下代码中通过FileName属性定位节点不成功,拜求原因和解决途径,谢谢拉
部分代码如下:
constructor TCT_GG_RYDXXZ.Create(AContext:TContext; ASelected:TStringList);
begin
     inherited Create(AContext);
     CSelected := ASelected; // 传入的人员ID列表
end;

procedure TCT_GG_RYDXXZ.BizFormCreate(Sender: TObject);
var
   lBizNode: TBizNode;
   lBizURL: TBizURL;
begin
     FSelected := TStringList.Create;
     
     // 以下设置为组织结构树
     lBizUrl :=TBizURL.Create;
     lBizUrl.URL :='Org:\ROOT';
     lBizNode := BizTree.BizTreeStructure.FindNodeByBizURL(lBizURL);
     if lBizNode <> nil then
        cbtvRYXZ.StartWithNodes.AddObject(lBizNode.GUID, lBizNode);
     cbtvRYXZ.ShowOptions := [TOrgUnitKind.boOrgServer, TOrgUnitKind.boOrgRoot,
                      TOrgUnitKind.boOrgan, TOrgUnitKind.boDept,
                      TOrgUnitKind.boPositionMember, TOrgUnitKind.boPersonMember];

     //cbtvRYXZ.CheckOptions := [TOrgUnitKind.boOrgan, TOrgUnitKind.boDept,
     //                 TOrgUnitKind.boPositionMember, TOrgUnitKind.boPersonMember];

     cbtvRYXZ.CheckOptions := [TOrgUnitKind.boPersonMember];
     cbtvRYXZ.ReloadTree;
end;

procedure TCT_GG_RYDXXZ.BizFormShow(Sender: TObject);
var
   I : integer;
   lFileName : string;
   lPerson: TPerson;
begin
     if Assigned(CSelected) then
     begin
          // 根据已经传入的人员ID给对应的节点打上勾
          for I:=0 to CSelected.Count-1 do
          begin
               lPerson := OrgSys.OrgSystem.GetPerson(CSelected.Strings[I]);
               lFileName := lPerson.BizURL.FileName;
               try
                  cbtvRYXZ.FileName := lFileName;
                  //if cbtvRYXZ.Selected <> nil then   // 这里检查得到 cbtvRYXZ.Selected = nil
                  //                Business.Forms.Dialogs.ShowMessage(cbtvRYXZ.Selected.Text);
                  cbtvRYXZ.Checked[cbtvRYXZ.Selected] := true;
                  FSelected.AddObject(CSelected.Strings[I], cbtvRYXZ.Selected);
               except
                     on E:Exception do
                     begin
                        //Business.Forms.Dialogs.ShowMessage(E.Message);
                        continue;
                     end;
               end;
          end;
     end;
end;
回复

使用道具 举报

发表于 2009-2-4 17:11:05 | 显示全部楼层
能不能给一个完整的。能跑起来的单独的一个功能
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-4 17:18:28 | 显示全部楼层
这个功能很简单的,你随便做个窗体丢个TCheckBizTreeView上去把代码拷贝进去就能编译了,要上传的话需要等会,我要他提取出来做个测试功能
回复 支持 反对

使用道具 举报

发表于 2009-2-4 17:26:33 | 显示全部楼层
给个测试功能吧,代码可以看到有很多未知的对象。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-4 17:35:54 | 显示全部楼层
组织机构表要导么?导哪几个表?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-4 17:43:14 | 显示全部楼层

测试资源包

测试资源包

test.rar

945.24 KB, 下载次数: 71

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-5 08:52:59 | 显示全部楼层
这个有结果么?
回复 支持 反对

使用道具 举报

发表于 2009-2-5 09:39:08 | 显示全部楼层
procedure TCT_ZZJGXZ_TEST.BizFormShow(Sender: TObject);
var
   I : integer;
   lFileName : string;
   lPerson: TPerson;

begin
     if Assigned(CSelected) then
     begin
          // 根据已经选择的人员自动打勾

          for I:=0 to CSelected.Count-1 do
          begin
               lFileName :=CSelected.Strings[I];  //直接用这个去查找  被我修改的*****
               try
                  cbtvRYXZ.FileName := lFileName;
                  cbtvRYXZ.Checked[cbtvRYXZ.Selected] := true;
                  FSelected.AddObject(CSelected.Strings[I], cbtvRYXZ.Selected);
               except
                     on E:Exception do
                     begin
                        //Business.Forms.Dialogs.ShowMessage(E.Message);
                        continue;
                     end;
               end;
          end;
     end;
     //cbtvRYXZ.Items[0].Expanded := true;
end;


procedure TCT_ZZJGXZ_TEST.cbtvRYXZClickCheck(Sender: TObject; ANode: TTreeNode; Checked: Boolean);
var
  lBizURL: TBizURL;
  lOrgUnit: TOrgUnit;
begin
     if Checked and (FSelected.IndexOfObject(ANode)<0) then
     begin
          lBizURL := TBizURL.Create;
          lBizURL.URL := TOrgNode(ANode.Data).ObjectID;
          lOrgUnit := OrgSys.OrgSystem.GetUnit(lBizURL);
          FSelected.AddObject(lOrgUnit.BizURL.URL, ANode);//被我修改的****   lOrgUnit.BizURL.URL
     end;
     if not Checked and (FSelected.IndexOfObject(ANode)>=0) then
        FSelected.Delete(FSelected.IndexOfObject(ANode));
end;
回复 支持 反对

使用道具 举报

发表于 2009-2-5 09:41:17 | 显示全部楼层
cbtvRYXZ.FileName 存储的是 Org:\ROOT\JG1.OGN\BM1.DPT\GW2.PTM\RY2.psm  人员成员的url
而你先前代码取的是人员的filename ,是这样Org:\PERSON\RY2.psn。
当然就查不到了。
可以按照我8楼的写法,直接存储选择对象的url,而不是id。显示友好性,楼主可以再想办法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-5 09:45:44 | 显示全部楼层
你把我的输出项改掉了,我数据库保存的是人员ID不是URL,要是我把窗体关闭了,下次打开我从数据库获取人员ID无法还原成URL啊
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-28 04:31 , Processed in 0.042691 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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