起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1525|回复: 14

关于主界面“工作台”树形视图将“业务功能库”根节点设置为指定业务空间、文件夹的

[复制链接]
发表于 2004-5-20 15:27:34 | 显示全部楼层 |阅读模式
关于主界面“工作台”树形视图设置“业务功能库”根节点为指定业务空间、文件夹的解决办法。

在你的“专业”窗体代码中加入 SetFuncLibraryRootNode 和  RestoreDefaultFuncLibraryRootNode 以下两个方法,调用 SetFuncLibraryRootNode 方法传入一个业务空间或文件夹的URL 即可将其设置为根节点; 要恢复为默认的业务功能库根节点,调用 RestoreDefaultFuncLibraryRootNode 方法即可。

接口部分:
  { 设置业务功能库为指定的空间或文件夹 }
    procedure SetFuncLibraryRootNode(const AURL: string);
    { 恢复为默认的业务功能库根节点,即: Biz: }
    procedure RestoreDefaultFuncLibraryRootNode;

实现部分:
procedure TProfessional.SetFuncLibraryRootNode(const AURL: string);
var
  lRootNodes: TStringList;
  lDesktopFileName, lFileName: string;
  lDesktopNode, lUserNode: TUserNode;
  lBizURL: TBizURL;
begin
  lRootNodes := TStringList.Create;
  try
    { 加入当前用户工作台文件夹节点 }
    lDesktopFileName := TCommonComponentLibrary.UserSystem.UserDesktopFolderFileName;
    lDesktopNode := TCommonComponentLibrary.UserTree.FindNodeByFileName(lDesktopFileName);
    if lDesktopNode <> nil then
      lRootNodes.AddObject(lDesktopNode.GUID, lDesktopNode);

    { 加入指定的业务功能库根节点 }
    lBizURL := TBizURL.Create;
    try
      lBizURL.URL := AURL;
      lFileName := lBizURL.FileName;
    finally
      lBizURL.Free;
    end;
    lUserNode := TCommonComponentLibrary.UserTree.FindNodeByFileName(lFileName);
    if lUserNode <> nil then
      lRootNodes.AddObject(lUserNode.GUID, lUserNode);

    UserTreeView.StartWithNodes := lRootNodes;
    UserTreeView.ReloadTree;
  finally
    lRootNodes.Free;
  end;
end;

procedure TProfessional.RestoreDefaultFuncLibraryRootNode;
begin
  UserTreeView.StartWithNodes.Clear;
  UserTreeView.ReloadTree;
end;




调用代码示例:
  SetFuncLibraryRootNode('Biz:\Justep');
回复

使用道具 举报

 楼主| 发表于 2004-5-20 16:50:05 | 显示全部楼层

另附示例运行结果图:

另附示例运行结果图:

无标题.jpg

36 Bytes, 下载次数: 332

回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-21 19:36:07 | 显示全部楼层

没错,就是要你想要的特性,调用 SetFuncLibraryRootNode 方法就可以了。

没错,我和老唐确认过了,就是要你想要的特性,调用 SetFuncLibraryRootNode  方法就可以了,试试吧!不行再和我们说。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-31 18:16:22 | 显示全部楼层

没关系,那就使用BizTreeView控件加上组织机构功能权限,自己写一段代码来实现。

没关系,那就使用BizTreeView控件加上组织机构功能权限,自己写一段代码来实现。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-1 10:05:19 | 显示全部楼层

我提供的函数只列出当前用户拥有的业务功能,没有的就不会列出来,因为我们只可能考虑大

我提供的函数只列出当前用户拥有的业务功能,没有的就不会列出来,因为我们只可能考虑大多数的通用情况,就是只列出当前用户拥有的功能,没有的功能列出来对于绝大多数用户来说是毫无意义的。你们的需求已经属于特殊情况了,所以我专门写了一个方法给你使用,但目前看来还没有解决你们的问题。不知道你们的功能树需不需要列出“我的工作台”节点,如果不需要,那么使用TBizTreeView控件和组织机构功能权限相关的几个方法,写一点代码是可以解决你们的问题的。

另外,简单窗体恐怕是还没有支持切换岗位和重新登录。你问一问老唐吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-1 10:46:08 | 显示全部楼层

好的,你稍等,我稍后写一个例子功能传上来。

好的,你稍等,我稍后写一个例子功能传上来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-1 13:38:05 | 显示全部楼层

我做了一个例子功能,打包上传,以供参考。如有不明之处,继续交流。

我做了一个例子功能,打包上传,以供参考。如有不明之处,继续交流。

业务功能模型树使用例子.zip

36 Bytes, 下载次数: 40

回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-1 16:04:33 | 显示全部楼层

关于“还有两点需要请教:”的回复:

问题1的解决办法:
       在BizTreeStructure中找到找到的文件夹或空间对应的BizNode的,然后将此BizNode加入到一个TStringList中,最后将此StringList赋值给BizTreeView的StartWithNodes属性,再调用BizTreeView的ReloadTree重新装载树形视图即可。参考代码如下:

procedure TMainForm.btnApplyRootNodeClick(Sender: TObject);
var
  lBizNode: TBizNode;
  lRootNodes: TStrings;
  lBizURL: TBizURL;
begin
  lRootNodes := TStringList.Create;
  lBizURL := TBizURL.Create;
  try
    lBizURL.URL := edtURL.Text;
    lBizNode := BizTree.BizTreeStructure.FindNodeByBizURL(lBizURL);
    if Assigned(lBizNode) then
    begin
      lRootNodes.AddObject(lBizNode.GUID, lBizNode);
      BizTreeView1.StartWithNodes := lRootNodes;
      BizTreeView1.ReloadTree;
    end;
  finally
    lRootNodes.Free;
    lBizURL.Free;
  end;
end;



问题2的解决办法:
    接管 BizTreeView 的 OnInserting 事件,在此指定当前处理节点是否可以插入,参考代码如解决情况下:

procedure TMainForm.BizTreeView1Inserting(Sender: TObject; ANode: TBaseNode;
  var Allow: Boolean);
var
  lBizNode: TBizNode;
  lFuncItem: TOperatorFuncItem;
begin
  lBizNode := ANode as TBizNode;
  if lBizNode.ObjectKind = TBizObjectKind.boFunc then
  begin
    lFuncItem := TCommonComponentLibrary.UserSystem.FindFuncItem(lBizNode.BizURL.URL);
    Allow := Assigned(lFuncItem);
  end;
end;



另外再次将此功能打包上传,以供参考。

业务功能模型树使用例子.zip

36 Bytes, 下载次数: 26

回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-2 10:29:47 | 显示全部楼层

继续回复:

问题1:
    不好意思,有行代码笔误:
  if lBizNode.ObjectKind = TBizObjectKind.boFunc then
   应该写成:
  if lBizNode.NodeKind = TBizObjectKind.boFunc then   
修正后的过程如下:
procedure TMainForm.BizTreeView1Inserting(Sender: TObject; ANode: TBaseNode;
  var Allow: Boolean);
var
  lBizNode: TBizNode;
  lFuncItem: TOperatorFuncItem;
begin
  lBizNode := ANode as TBizNode;
  if lBizNode.NodeKind = TBizObjectKind.boFunc then
  begin
    lFuncItem := TCommonComponentLibrary.UserSystem.FindFuncItem(lBizNode.BizURL.URL);
    Allow := Assigned(lFuncItem);
  end;
end;


问题2:
      设置一下UserTreeView的ShowOptions属性就行了,参考代码如下:
  UserTreeView.ShowOptions := [TUserNodeKind.unFuncLibrary, TUserNodeKind.unFolder,
    TUserNodeKind.unFunc];

TUserNodeKind 是一个枚举类型,每一个枚举值代表了在TUserTreeView 中能够看到的一种类型,原型定义在公共组件库中,原型定义和各个枚举值的含义如下:

  TUserNodeKind = (unNone,
                                  unDesktop,        //我的工作台
                 unMyFuncs,       //我的功能
                 unFavorites,       //收藏夹
                 unStartup,          //启动
                 unUserFolder,    //用户自己创建的文件夹
                 unShortcut,        //用户创建的快捷方式
                 unUserFile,         //用户创建的文件
                 unFuncLibrary,   //业务功能库
                 unFolder,            //业务功能库下的文件夹
                 unFunc               //业务功能
                 );

TUserTreeView的Create方法中默认将ShowOptions设置为一个常量cDefaultShowOptions,默认是不显示业务功能库这一枝的 。这部分的源代码都在“公共组件库”中,有时间看看吧,对你们的工作会比较有用的。cDefaultShowOptions常量的值如下:
  cDefaultShowOptions = [TUserNodeKind.unDesktop, TUserNodeKind.unFavorites,
    TUserNodeKind.unMyFuncs, TUserNodeKind.unStartup, TUserNodeKind.unUserFolder,
    TUserNodeKind.unShortcut, TUserNodeKind.unUserFile];


我再上传一个修正后的例子包。

业务功能模型树使用例子.zip

36 Bytes, 下载次数: 63

回复 支持 反对

使用道具 举报

发表于 2004-5-20 23:23:57 | 显示全部楼层

谢谢龚明,但是还有疑问:)

我现在在做其他工作,还没来得及测。但是我看了代码,我想知道这个方法显示的是某个空间/文件夹下  流程中入口点的功能和不在流程中的功能吗?(我的需求是显示指定文件夹下的流程中入口点的功能和不在流程中的功能,并且如果如果操作者拥有操作改功能权限的话,则可以打开功能运行,没有的话则打不开,但是功能菜单仍然显示。)
他们是不是没有把我的意思转达明白呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-22 22:59 , Processed in 0.041274 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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