起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 740|回复: 15

【搞定】急!如何有代码刷新工作台的任务列表?**

[复制链接]
发表于 2007-4-3 13:21:51 | 显示全部楼层 |阅读模式
需求:
在自建的一个业务功能A中刷新工作台的任务列表。
相当于 我的工作台中右击-刷新 那个操作。

试了两种方式都不行:
1) 我的工作台业务功能中增加一个数据集代理(指向任务中心的任务索引数据集),调用它的刷新
DESKTOPFUNC.TMAINFORM(fbTask.func.MainForm).dsbTask.dataset.refresh;
--出错

2) 直接用信息代理任务中心信息,再刷新数据集
dsbTask.dataset.refresh;
--出错说数据集未打开。不能刷新。。

该如何实现? 谢谢
回复

使用道具 举报

发表于 2007-4-3 14:00:44 | 显示全部楼层
你打开对象查看器看看呢
是不是有两个 任务中心 的实例啊?
他们必须指向同一个实例才可以的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-3 15:22:41 | 显示全部楼层
如何才能指向同一实例呢? 这才是问题解决的关键啊。

我现在要做的只是刷新任务列表。 不管通过哪种方式,只要是代码刷新就可以了。
回复 支持 反对

使用道具 举报

发表于 2007-4-3 16:24:22 | 显示全部楼层
请看 http://bbs.justep.com/forum.php? ... 3%B2%E9%BF%B4%C6%F7
7楼的图,你需要再功能中找到全局环境
在全局环境中找到工作台的功能
在工作台功能上找到 任务中心信息,
这样就可以刷新里面的数据集了
回复 支持 反对

使用道具 举报

发表于 2007-4-3 16:25:52 | 显示全部楼层
找环境,可以用功能环境的Parent
或者找TContext.FindParentContext找
建议你看看TContext的各个函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-3 19:28:00 | 显示全部楼层
还是做不来
我用2种方式都不行啊。

1)我先找工作台功能,再找主窗体,再找数据集,不行! 功能是找到了,可是主窗体找不到。
2)先找任务中心业务信息,再找数据集。不行

代码中注释掉的是1)
未注释的是方式2)
麻烦帮忙看下哪错了。

procedure TYJDSH.refreshTaskList;
var lBizItem:TBizObject;
begin
    //刷新任务列表
// lBizItem:=context.FindParentContext('GLOBAL').findItem('Biz:\COLLABORATION\DesktopFunc.Func');
  
lBizItem:=context.FindParentContext('GLOBAL').GetBizObject(ibTask.BizClassRef);
  if lBizItem=nil then
    exit;
//  with DESKTOPFUNC.TMAINFORM(DESKTOPFUNC.TDESKTOPFUNC(lBizItem).MainForm).dsbTask.dataset do
  with TASKCENTERINFO.TTASKCENTERINFO(ibTask.info).datasetById('TaskIndex') do
  begin
   if not isEmpty then
     refresh;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-3 19:39:22 | 显示全部楼层
//刚才上面的那句写错了。 TTASKCENTERINFO(ibTask.info)要改成TTASKCENTERINFO(lBizItem)
  //不过还是不对,这样找出来的数据集是空的? 不过我的工作台确实是有记录的。
  with TASKCENTERINFO.TTASKCENTERINFO(lBizItem).datasetById('TaskIndex') do
  begin
   if not isEmpty then
     refresh;
  end;
回复 支持 反对

使用道具 举报

发表于 2007-4-4 09:59:36 | 显示全部楼层
const
  cDesktopURL = 'Biz:\COLLABORATION\DesktopFunc.Func';
  cTaskCenterURL = 'Biz:\COLLABORATION\TASKCENTERINFO.INFO';
var
  lBizObject: TBizObject;
  i: Integer;
  lContext: TContext;
begin
  lContext := Context.FindParentContext(BizSys.IL_PERSON);    //人员环境
  //在人员环境找工作台功能
  for i:=0 to lContext.ChildCount-1 do
  try
    if SysUtils.SameText(cDesktopURL, (lContext.Children.Owner as TFunc).BizClassURL.BizURL.URL) then
      lBizObject := lContext.Children.Owner;
  except
  end;
  if lBizObject=nil then exit;
  //在工作台功能上找任务中心信息
  lContext := lBizObject.Context;
  for i:=0 to lContext.ChildCount-1 do
  try
    if SysUtils.SameText(cTaskCenterURL, (lContext.Children.Owner as TInfo).BizClassURL.BizURL.URL) then
      lBizObject := lContext.Children.Owner;
  except
  end;
  //刷新数据集
  (lBizObject as TInfo).DataSetByID('TaskIndex').Refresh;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-4 18:03:27 | 显示全部楼层
8楼的代码也不行啊。
出错  //刷新数据集
  (lBizObject as TInfo).DataSetByID('TaskIndex').Refresh;
“cannot perfomr this action on a closed dataset.. ” 跟6楼的方式2)是一样的错误。


还有:
  //在人员环境找工作台功能
  for i:=0 to lContext.ChildCount-1 do
  try
    if (lContext.Children.Owner is TFunc) then  //**********这边必须加上类型判断,不然会出错。
      if SysUtils.SameText(cDesktopURL, (lContext.Children.Owner as TFunc).BizClassURL.BizURL.URL) then
        lBizObject := lContext.Children.Owner;
  except


麻烦你们再测试下该如何写好吗? 谢谢
回复 支持 反对

使用道具 举报

发表于 2007-4-4 18:29:51 | 显示全部楼层
8楼代码是我这里运行过的,没有问题
我故意试错的,因为有except,不会弹出错误来,这样写没有问题

这个数据集应该是已经打开了,我这里都是正常的,而且这里都是查找出来的工作台功能和信息。要么你贴一个对象查看器的图。要能看到工作台所在的环境,工作台下的信息
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-30 03:29 , Processed in 0.040313 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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