起步软件技术论坛-X3

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

[分享]根据需要做一个查询任务的功能,并且可以运行查询到的任务

[复制链接]
 楼主| 发表于 2007-11-12 13:13:58 | 显示全部楼层
那你就改改呗
if not lDataSet.Active then
    Exit;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-3 14:30:45 | 显示全部楼层
完整的考虑,4楼给的方法有以下几个方面考虑:
1  只检查自己的任务(当然,如果给管理员使用可以不是自己的任务)
2  要检查得到的任务列表不为空
3  如果人员有多个岗位,需要找到合适的岗位环境来运行任务
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-3 14:34:50 | 显示全部楼层

只检查自己的任务

只检查自己的任务,只要把自己和自己的父单元都作为执行者参数就可以了
procedure TMainForm.DoGetTaskReceivers(AOrgURLs: TOrgURLs);
var
  lOrgUnit: TOrgUnit;
  i: Integer;
begin
  for i:=0 to SystemCore.TSystemCore.Operator.PositionCount-1 do
  begin
    //每一个岗位环境下的人员成员
    lOrgUnit := SystemCore.TSystemCore.Operator.Positions.PersonMember;

    while lOrgUnit <> nil do
    begin
      case lOrgUnit.OrgKind of
        TOrgUnitKind.boOrgan, TOrgUnitKind.boDept:
          AOrgURLs.Add(lOrgUnit.ID, '', '');
        TOrgUnitKind.boPositionMember:
        begin
          AOrgURLs.Add(lOrgUnit.Parent.ID, lOrgUnit.ID, '');
          AOrgURLs.Add('', lOrgUnit.ID, '');
        end;
        TOrgUnitKind.boPersonMember:
          AOrgURLs.Add(lOrgUnit.Parent.Parent.ID, lOrgUnit.Parent.ID, lOrgUnit.ID);
      end;
      //找组织单元的父,因为分配到父单元上的任务,也是可以执行的
      //例如:直接分配在部门上的任务,部门内的每一个人员成员都可以执行
      lOrgUnit := lOrgUnit.Parent;
    end;
  end;
end;

      DoGetTaskReceivers(lTaskParam.Receivers);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-3 14:35:58 | 显示全部楼层

要检查得到的任务列表不为空

检查返回参数lTasks的Count属性是否等于零
    Flow.FlowEngine.GetTasks(lFlowParam, lTaskParam, lTasks);
    if lTasks.Count=0 then
      raise Exception.Create('没有符合条件的任务!');
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-3 14:39:22 | 显示全部楼层

如果人员有多个岗位,需要找到合适的岗位环境来运行任务

先在项目管理中引入  协同系统\任务\任务库
调用任务库中的静态函数FindTaskRunContext,用每一个任务消息查找环境

function TMAINFORM.GetTaskContext(ATask: TTask): TContext;
var
  i: Integer;
  lTask: TaskLib.TTask;
begin
  //需要在项目管理中引入 协同系统\任务\任务库
  lTask := TaskLib.TTask.Create;
  try
    lTask.Assign(ATask);
    for i:=0 to ATask.TaskMessages.Count-1 do
    begin
      //调用任务库中的静态函数FindTaskRunContext,用每一个任务消息查找环境
      Result := TaskLib.TTaskServices.FindTaskRunContext(Context, lTask, lTask.TaskMessages);
      if Assigned(Result) then
        Break;
    end;
  finally
    lTask := nil;
  end;
end;

    lContext := GetTaskContext(lTasks[0]);
    lFunc := SystemCore.TSystemCore.FuncManager.RunTask(lContext, lTasks[0]);
回复 支持 反对

使用道具 举报

发表于 2008-1-3 16:20:47 | 显示全部楼层
如何得到 下一个所有人员的岗位名称 或 姓名呢???
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-3 16:38:24 | 显示全部楼层
如何得到 下一个所有人员的岗位名称 或 姓名呢
???
看不懂
回复 支持 反对

使用道具 举报

发表于 2008-1-8 11:34:05 | 显示全部楼层
任务处理
procedure TBDSBJXSQLC.btnRunTaskClick(Sender: TObject); 没有错

可是procedure TBDSBJXSQLC.BizFormCreate(Sender: TObject);
处理岗位、处理状态有时正确 有时又是错误的?

是不是我程序写错了?

d.txt

20.53 KB, 下载次数: 96

回复 支持 反对

使用道具 举报

发表于 2008-1-8 14:29:21 | 显示全部楼层
客服人员不在吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 04:26 , Processed in 0.040071 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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